mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			re PR fortran/54243 ([OOP] ICE (segfault) in gfc_type_compatible for invalid BT_CLASS)
2012-08-15 Janus Weil <janus@gcc.gnu.org> PR fortran/54243 PR fortran/54244 * resolve.c (check_typebound_baseobject): Check for class_ok attribute. (resolve_procedure_interface,resolve_fl_derived0): Copy class_ok attribute. 2012-08-15 Janus Weil <janus@gcc.gnu.org> PR fortran/54243 PR fortran/54244 * gfortran.dg/typebound_call_24.f03: New. From-SVN: r190420
This commit is contained in:
		
							parent
							
								
									4b78ca9d81
								
							
						
					
					
						commit
						0b2d443bef
					
				|  | @ -1,3 +1,11 @@ | ||||||
|  | 2012-08-15  Janus Weil  <janus@gcc.gnu.org> | ||||||
|  | 
 | ||||||
|  | 	PR fortran/54243 | ||||||
|  | 	PR fortran/54244 | ||||||
|  | 	* resolve.c (check_typebound_baseobject): Check for class_ok attribute. | ||||||
|  | 	(resolve_procedure_interface,resolve_fl_derived0): Copy class_ok | ||||||
|  | 	attribute. | ||||||
|  | 
 | ||||||
| 2012-08-14  Mikael Morin  <mikael@gcc.gnu.org> | 2012-08-14  Mikael Morin  <mikael@gcc.gnu.org> | ||||||
| 
 | 
 | ||||||
| 	PR fortran/47586 | 	PR fortran/47586 | ||||||
|  |  | ||||||
|  | @ -237,6 +237,7 @@ resolve_procedure_interface (gfc_symbol *sym) | ||||||
|       sym->attr.always_explicit = ifc->attr.always_explicit; |       sym->attr.always_explicit = ifc->attr.always_explicit; | ||||||
|       sym->attr.ext_attr |= ifc->attr.ext_attr; |       sym->attr.ext_attr |= ifc->attr.ext_attr; | ||||||
|       sym->attr.is_bind_c = ifc->attr.is_bind_c; |       sym->attr.is_bind_c = ifc->attr.is_bind_c; | ||||||
|  |       sym->attr.class_ok = ifc->attr.class_ok; | ||||||
|       /* Copy array spec.  */ |       /* Copy array spec.  */ | ||||||
|       sym->as = gfc_copy_array_spec (ifc->as); |       sym->as = gfc_copy_array_spec (ifc->as); | ||||||
|       if (sym->as) |       if (sym->as) | ||||||
|  | @ -5795,6 +5796,9 @@ check_typebound_baseobject (gfc_expr* e) | ||||||
| 
 | 
 | ||||||
|   gcc_assert (base->ts.type == BT_DERIVED || base->ts.type == BT_CLASS); |   gcc_assert (base->ts.type == BT_DERIVED || base->ts.type == BT_CLASS); | ||||||
| 
 | 
 | ||||||
|  |   if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok) | ||||||
|  |     return FAILURE; | ||||||
|  | 
 | ||||||
|   /* F08:C611.  */ |   /* F08:C611.  */ | ||||||
|   if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract) |   if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract) | ||||||
|     { |     { | ||||||
|  | @ -11982,6 +11986,7 @@ resolve_fl_derived0 (gfc_symbol *sym) | ||||||
| 	      c->attr.recursive = ifc->attr.recursive; | 	      c->attr.recursive = ifc->attr.recursive; | ||||||
| 	      c->attr.always_explicit = ifc->attr.always_explicit; | 	      c->attr.always_explicit = ifc->attr.always_explicit; | ||||||
| 	      c->attr.ext_attr |= ifc->attr.ext_attr; | 	      c->attr.ext_attr |= ifc->attr.ext_attr; | ||||||
|  | 	      c->attr.class_ok = ifc->attr.class_ok; | ||||||
| 	      /* Replace symbols in array spec.  */ | 	      /* Replace symbols in array spec.  */ | ||||||
| 	      if (c->as) | 	      if (c->as) | ||||||
| 		{ | 		{ | ||||||
|  |  | ||||||
|  | @ -1,3 +1,9 @@ | ||||||
|  | 2012-08-15  Janus Weil  <janus@gcc.gnu.org> | ||||||
|  | 
 | ||||||
|  | 	PR fortran/54243 | ||||||
|  | 	PR fortran/54244 | ||||||
|  | 	* gfortran.dg/typebound_call_24.f03: New. | ||||||
|  | 
 | ||||||
| 2012-08-15  Bill Schmidt  <wschmidt@linux.vnet.ibm.com> | 2012-08-15  Bill Schmidt  <wschmidt@linux.vnet.ibm.com> | ||||||
| 
 | 
 | ||||||
| 	PR tree-optimization/54245 | 	PR tree-optimization/54245 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | ! { dg-do compile } | ||||||
|  | ! | ||||||
|  | ! PR 54243: [OOP] ICE (segfault) in gfc_type_compatible for invalid BT_CLASS | ||||||
|  | ! | ||||||
|  | ! Contributed by Sylwester Arabas <slayoo@staszic.waw.pl> | ||||||
|  | 
 | ||||||
|  | module aqq_m | ||||||
|  |   type :: aqq_t | ||||||
|  |   contains | ||||||
|  |     procedure :: aqq_init | ||||||
|  |   end type  | ||||||
|  |  contains | ||||||
|  |   subroutine aqq_init(this) | ||||||
|  |     class(aqq_t) :: this | ||||||
|  |   end subroutine | ||||||
|  | end module | ||||||
|  | 
 | ||||||
|  | program bug2 | ||||||
|  |   use aqq_m | ||||||
|  |   class(aqq_t) :: aqq  ! { dg-error "must be dummy, allocatable or pointer" } | ||||||
|  |   call aqq%aqq_init | ||||||
|  | end program | ||||||
|  | 
 | ||||||
|  | ! { dg-final { cleanup-modules "aqq_m" } } | ||||||
		Loading…
	
		Reference in New Issue
	
	 Janus Weil
						Janus Weil