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