aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2018-01-09 19:49:25 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2018-01-09 19:49:25 +0000
commitd4319ef830cfbbc12965bd1853cfde919bd842ab (patch)
tree83bcd4c2da434e1545d8d7014652e0c694801d2f
parentd2dfcf823c0ba2b654f8d25a9ec46f59612cb60c (diff)
downloadgcc-d4319ef830cfbbc12965bd1853cfde919bd842ab.zip
gcc-d4319ef830cfbbc12965bd1853cfde919bd842ab.tar.gz
gcc-d4319ef830cfbbc12965bd1853cfde919bd842ab.tar.bz2
re PR fortran/83742 (ICE in gfc_is_simply_contiguous, at fortran/expr.c:5323)
2018-01-09 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/83742 * expr.c (gfc_is_simply_contiguous): Check for NULL pointer. 2018-01-09 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/83742 * gfortran.dg/contiguous_6.f90: New test. From-SVN: r256391
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/expr.c16
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/contiguous_6.f907
4 files changed, 25 insertions, 8 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 32586c5..e19ed61 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-09 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/83742
+ * expr.c (gfc_is_simply_contiguous): Check for NULL pointer.
+
2018-01-08 Steven G. Kargl <kargl@gcc.gnu.org>
* match.c (gfc_match_allocate): Check for NULL pointer.
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 5be8da1..45ccc18 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -5313,14 +5313,14 @@ gfc_is_simply_contiguous (gfc_expr *expr, bool strict, bool permit_element)
sym = expr->symtree->n.sym;
if (expr->ts.type != BT_CLASS
- && ((part_ref
- && !part_ref->u.c.component->attr.contiguous
- && part_ref->u.c.component->attr.pointer)
- || (!part_ref
- && !sym->attr.contiguous
- && (sym->attr.pointer
- || sym->as->type == AS_ASSUMED_RANK
- || sym->as->type == AS_ASSUMED_SHAPE))))
+ && ((part_ref
+ && !part_ref->u.c.component->attr.contiguous
+ && part_ref->u.c.component->attr.pointer)
+ || (!part_ref
+ && !sym->attr.contiguous
+ && (sym->attr.pointer
+ || (sym->as && sym->as->type == AS_ASSUMED_RANK)
+ || (sym->as && sym->as->type == AS_ASSUMED_SHAPE)))))
return false;
if (!ar || ar->type == AR_FULL)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bbf9c76..6357b53 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-09 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/83742
+ * gfortran.dg/contiguous_6.f90: New test.
+
2018-01-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/83668
diff --git a/gcc/testsuite/gfortran.dg/contiguous_6.f90 b/gcc/testsuite/gfortran.dg/contiguous_6.f90
new file mode 100644
index 0000000..b17c7ed
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/contiguous_6.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/83742
+! Contributed by Gerhard Steinmetz <gscfq at t-online dot de>
+program p
+ real, target :: a
+ real, pointer, contiguous :: b => a ! { dg-error "has the CONTIGUOUS attribute" }
+end