From e219f32f4b52e334503376ba983ee1503dd34e09 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 11 Dec 2009 15:40:36 +0100 Subject: [PATCH] re PR fortran/42335 ([OOP] ICE on CLASS IS (bad_identifier)) gcc/fortran/ 2009-12-11 Janus Weil PR fortran/42335 * symbol.c (select_type_insert_tmp): Add an extra check for error recovery. gcc/testsuite/ 2009-12-11 Janus Weil PR fortran/42335 * gfortran.dg/select_type_11.f03: New test. From-SVN: r155162 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/symbol.c | 2 +- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gfortran.dg/select_type_11.f03 | 28 ++++++++++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/select_type_11.f03 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6e588c632d9..7000e25e5f8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-12-11 Janus Weil + + PR fortran/42335 + * symbol.c (select_type_insert_tmp): Add an extra check for + error recovery. + 2009-12-10 Daniel Franke PR fortran/40287 diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 08477c4f577..1b40d9a549a 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -2476,7 +2476,7 @@ select_type_insert_tmp (gfc_symtree **st) { gfc_select_type_stack *stack = select_type_stack; for (; stack; stack = stack->prev) - if ((*st)->n.sym == stack->selector) + if ((*st)->n.sym == stack->selector && stack->tmp) *st = stack->tmp; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 18343a27538..598c1aa20f5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-12-11 Janus Weil + + PR fortran/42335 + * gfortran.dg/select_type_11.f03: New test. + 2009-12-11 Dodji Seketeli PR c++/42225 diff --git a/gcc/testsuite/gfortran.dg/select_type_11.f03 b/gcc/testsuite/gfortran.dg/select_type_11.f03 new file mode 100644 index 00000000000..54501d6ab1e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/select_type_11.f03 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR 42335: [OOP] ICE on CLASS IS (bad_identifier) +! +! Contributed by Harald Anlauf + + implicit none + type, abstract :: vector_class + end type vector_class + + type, extends(vector_class) :: trivial_vector_type + real :: elements(100) + end type trivial_vector_type + +contains + + subroutine bar (this,v) + class(trivial_vector_type), intent(inout) :: this + class(vector_class), intent(in) :: v + + select type (v) + class is (bad_id) ! { dg-error "is not an accessible derived type" } + this%elements(:) = v%elements(:) ! { dg-error "is not a member of" } + end select + + end subroutine bar + +end -- 2.30.2