From: Thomas Koenig Date: Fri, 6 Oct 2017 18:15:26 +0000 (+0000) Subject: backport: re PR fortran/80118 (ICE with zero size parameter array) X-Git-Tag: releases/gcc-6.5.0~748 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac36cdb1648e83ffe2f2de9a453d2f9bb2dccb05;p=thirdparty%2Fgcc.git backport: re PR fortran/80118 (ICE with zero size parameter array) 2017-10-06 Thomas Koenig Steven G. Kargl Backport from trunk PR fortran/80118 * expr.c (gfc_get_full_arrayspec_from_expr): If there is no symtree, set array spec to NULL. 2017-10-06 Thomas Koenig Steven G. Kargl Backport from trunk PR fortran/80118 * gfortran.dg/zero_sized_7.f90: New test. Co-Authored-By: Steven G. Kargl From-SVN: r253500 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0d1f7b66ae29..ac16bc09fc12 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2017-10-06 Thomas Koenig + Steven G. Kargl + + Backport from trunk + * expr.c (gfc_get_full_arrayspec_from_expr): If there is + no symtree, set array spec to NULL. + 2017-09-02 Janus Weil Backport from trunk diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index b91f906e86cc..a30ea2d3d54f 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -4102,7 +4102,11 @@ gfc_get_full_arrayspec_from_expr (gfc_expr *expr) if (expr->expr_type == EXPR_VARIABLE || expr->expr_type == EXPR_CONSTANT) { - as = expr->symtree->n.sym->as; + if (expr->symtree) + as = expr->symtree->n.sym->as; + else + as = NULL; + for (ref = expr->ref; ref; ref = ref->next) { switch (ref->type) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bbeea292d7dc..c53d6b168f83 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2017-10-06 Thomas Koenig + Steven G. Kargl + + Backport from trunk + PR fortran/80118 + * gfortran.dg/zero_sized_7.f90: New test. + 2017-10-02 Bill Schmidt Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/zero_sized_7.f90 b/gcc/testsuite/gfortran.dg/zero_sized_7.f90 new file mode 100644 index 000000000000..7908532eaea5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/zero_sized_7.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! PR 80118 - this used to ICE +! Original test case by Marco Restelli +module m +implicit none + + integer, parameter :: not_empty(1) = 0 + integer, parameter :: empty1(0) = (/integer :: /) + integer, parameter :: empty2(0) = 0 + +contains + + subroutine sub(v) + integer, allocatable, intent(out) :: v(:) + v = 2*empty2 ! internal compiler error + end subroutine sub + +end module m