diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fc39b414959..6477c4849b8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-01-16 Janus Weil + + PR fortran/55983 + * class.c (find_typebound_proc_uop): Check for f2k_derived instead of + asserting it. + 2013-01-16 Jakub Jelinek Tobias Burnus diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 3bb326cf0fb..9ef30f6d331 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -2707,15 +2707,17 @@ find_typebound_proc_uop (gfc_symbol* derived, gfc_try* t, gfc_symtree* res; gfc_symtree* root; - /* Set correct symbol-root. */ - gcc_assert (derived->f2k_derived); - root = (uop ? derived->f2k_derived->tb_uop_root - : derived->f2k_derived->tb_sym_root); - /* Set default to failure. */ if (t) *t = FAILURE; + if (derived->f2k_derived) + /* Set correct symbol-root. */ + root = (uop ? derived->f2k_derived->tb_uop_root + : derived->f2k_derived->tb_sym_root); + else + return NULL; + /* Try to find it in the current type's namespace. */ res = gfc_find_symtree (root, name); if (res && res->n.tb && !res->n.tb->error) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c6473f2cbcf..7572696951e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-01-16 Janus Weil + + PR fortran/55983 + * gfortran.dg/class_55.f90: New. + 2013-01-16 Janis Johnson PR testsuite/55994 diff --git a/gcc/testsuite/gfortran.dg/class_55.f90 b/gcc/testsuite/gfortran.dg/class_55.f90 new file mode 100644 index 00000000000..b47989f416c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_55.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! +! PR 55983: [4.7/4.8 Regression] ICE in find_typebound_proc_uop, at fortran/class.c:2711 +! +! Contributed by Sylwester Arabas + + type :: mpdata_t + class(bcd_t), pointer :: bcx, bcy ! { dg-error "is a type that has not been declared" } + end type + type(mpdata_t) :: this + call this%bcx%fill_halos() ! { dg-error "is being used before it is defined" } +end