From 236e3815280b1c6f0809f956c5f43c005118d6a0 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 12 Apr 2013 23:41:50 +0200 Subject: [PATCH] re PR fortran/56266 ([OOP] ICE on invalid in gfc_match_varspec) 2013-04-12 Janus Weil PR fortran/56266 * primary.c (gfc_match_varspec): Turn gcc_assert into MATCH_ERROR. 2013-04-12 Janus Weil PR fortran/56266 * gfortran.dg/typebound_proc_28.f03: New. From-SVN: r197936 --- gcc/fortran/ChangeLog | 5 ++++ gcc/fortran/primary.c | 10 ++++--- gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/typebound_proc_28.f03 | 30 +++++++++++++++++++ 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/typebound_proc_28.f03 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c2b8a5d70be..ace16ad1bf2 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2013-04-12 Janus Weil + + PR fortran/56266 + * primary.c (gfc_match_varspec): Turn gcc_assert into MATCH_ERROR. + 2013-04-12 Tobias Burnus PR fortran/56929 diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index cd8a4175594..1276abb3aa7 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1953,10 +1953,12 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, return MATCH_ERROR; gcc_assert (!tail || !tail->next); - gcc_assert (primary->expr_type == EXPR_VARIABLE - || (primary->expr_type == EXPR_STRUCTURE - && primary->symtree && primary->symtree->n.sym - && primary->symtree->n.sym->attr.flavor)); + + if (!(primary->expr_type == EXPR_VARIABLE + || (primary->expr_type == EXPR_STRUCTURE + && primary->symtree && primary->symtree->n.sym + && primary->symtree->n.sym->attr.flavor))) + return MATCH_ERROR; if (tbp->n.tb->is_generic) tbp_sym = NULL; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 90dd664d6b7..c99fee87998 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-04-12 Janus Weil + + PR fortran/56266 + * gfortran.dg/typebound_proc_28.f03: New. + 2013-04-12 Jeff Law * gcc.dg/tree-ssa/vrp87.c: Do not run test on ppc and xtensa diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_28.f03 b/gcc/testsuite/gfortran.dg/typebound_proc_28.f03 new file mode 100644 index 00000000000..74199c343fa --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_28.f03 @@ -0,0 +1,30 @@ +! { dg-do compile } +! +! PR 56266: [OOP] ICE on invalid in gfc_match_varspec +! +! Contributed by Andrew Benson + +module t + + implicit none + + type nc + contains + procedure :: encM => em + end type nc + +contains + + double precision function em(self) + class(nc) :: self + em=0. + end function + + double precision function cem(c) + type(nc) :: c + cem=c(i)%encM() ! { dg-error "Unclassifiable statement" } + end function + +end module + +! { dg-final { cleanup-modules "t" } } -- 2.30.2