aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2009-12-11 15:40:36 +0100
committerJanus Weil <janus@gcc.gnu.org>2009-12-11 15:40:36 +0100
commite219f32f4b52e334503376ba983ee1503dd34e09 (patch)
treeca2cc8d506c36f950dfd34db4731f0c40b750d52 /gcc
parent63a00e0d9139428cec7f5b5471ae036ee3d73db4 (diff)
downloadgcc-e219f32f4b52e334503376ba983ee1503dd34e09.zip
gcc-e219f32f4b52e334503376ba983ee1503dd34e09.tar.gz
gcc-e219f32f4b52e334503376ba983ee1503dd34e09.tar.bz2
re PR fortran/42335 ([OOP] ICE on CLASS IS (bad_identifier))
gcc/fortran/ 2009-12-11 Janus Weil <janus@gcc.gnu.org> PR fortran/42335 * symbol.c (select_type_insert_tmp): Add an extra check for error recovery. gcc/testsuite/ 2009-12-11 Janus Weil <janus@gcc.gnu.org> PR fortran/42335 * gfortran.dg/select_type_11.f03: New test. From-SVN: r155162
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/symbol.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/select_type_11.f0328
4 files changed, 40 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6e588c6..7000e25 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-11 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/42335
+ * symbol.c (select_type_insert_tmp): Add an extra check for
+ error recovery.
+
2009-12-10 Daniel Franke <franke.daniel@gmail.com>
PR fortran/40287
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 08477c4..1b40d9a 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 18343a2..598c1aa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-12-11 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/42335
+ * gfortran.dg/select_type_11.f03: New test.
+
2009-12-11 Dodji Seketeli <dodji@redhat.com>
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 0000000..54501d6
--- /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 <anlauf@gmx.de>
+
+ 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