From 156c01601daa73cb19b7a77b630ad49424c9bcf7 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 14 Dec 2013 18:47:22 +0100 Subject: [PATCH] re PR fortran/59502 ([OOP] ICE on invalid on pointer assignment to non-pointer CLASS) 2013-12-14 Janus Weil PR fortran/59502 * primary.c (gfc_match_varspec): Check for 'class_ok'. 2013-12-14 Janus Weil PR fortran/59502 * gfortran.dg/class_57.f90: New. From-SVN: r205990 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/primary.c | 5 ++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/class_57.f90 | 24 ++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/class_57.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 197b890c47c..9de18607db3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2013-12-14 Janus Weil + + PR fortran/59502 + * primary.c (gfc_match_varspec): Check for 'class_ok'. + 2013-12-14 Janus Weil PR fortran/59450 diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index c9a26b09be4..089ed429310 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -2039,9 +2039,8 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, if (m != MATCH_YES) return m; } - else if (component->ts.type == BT_CLASS - && CLASS_DATA (component)->as != NULL - && !component->attr.proc_pointer) + else if (component->ts.type == BT_CLASS && component->attr.class_ok + && CLASS_DATA (component)->as && !component->attr.proc_pointer) { tail = extend_ref (primary, tail); tail->type = REF_ARRAY; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7820c932ddc..6579c8bec96 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-12-14 Janus Weil + + PR fortran/59502 + * gfortran.dg/class_57.f90: New. + 2013-12-14 H.J. Lu PR target/59492 diff --git a/gcc/testsuite/gfortran.dg/class_57.f90 b/gcc/testsuite/gfortran.dg/class_57.f90 new file mode 100644 index 00000000000..7256dfc4d29 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_57.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! +! PR 59502: [OOP] ICE on invalid on pointer assignment to non-pointer CLASS +! +! Contributed by Andrew Benson + + implicit none + + type :: d + end type + + type :: p + class(d) :: cc ! { dg-error "must be allocatable or pointer" } + end type + +contains + + function pc(pd) + type(p) :: pc + class(d), intent(in), target :: pd + pc%cc => pd ! { dg-error "Non-POINTER in pointer association context" } + end function + +end -- 2.30.2