From 5b33845084ba98bc0bc87c7220254b3ab4999ed5 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Fri, 15 Aug 2014 21:19:33 +0000 Subject: [PATCH] re PR fortran/62142 (internal compiler error: Segmentation fault (X = X - L*floor(X/L))) 2014-08-15 Thomas Koenig PR fortran/62142 * trans-expr.c (is_runtime_conformable): Add NULL pointer checks. 2014-08-15 Thomas Koenig PR fortran/62142 * gfortran.dg/realloc_on_assign_24.f90: New test. From-SVN: r214043 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/trans-expr.c | 4 ++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/realloc_on_assign_24.f90 | 10 ++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/realloc_on_assign_24.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fcf591c940f..ec126b9aa63 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2014-08-15 Thomas Koenig + + PR fortran/62142 + * trans-expr.c (is_runtime_conformable): Add NULL pointer checks. + 2014-08-15 Tobias Burnus * resolve.c (resolve_critical): Fix name mangling. diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 544fc765bed..2ea09ce27d4 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -7897,7 +7897,7 @@ is_runtime_conformable (gfc_expr *expr1, gfc_expr *expr2) for (a = expr2->value.function.actual; a != NULL; a = a->next) { e1 = a->expr; - if (e1->rank > 0 && !is_runtime_conformable (expr1, e1)) + if (e1 && e1->rank > 0 && !is_runtime_conformable (expr1, e1)) return false; } return true; @@ -7908,7 +7908,7 @@ is_runtime_conformable (gfc_expr *expr1, gfc_expr *expr2) for (a = expr2->value.function.actual; a != NULL; a = a->next) { e1 = a->expr; - if (e1->rank > 0 && !is_runtime_conformable (expr1, e1)) + if (e1 && e1->rank > 0 && !is_runtime_conformable (expr1, e1)) return false; } return true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3f19ce745a0..5c40c0e3ff6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-08-15 Thomas Koenig + + PR fortran/62142 + * gfortran.dg/realloc_on_assign_24.f90: New test. + 2014-08-15 Paolo Carlini PR c++/62072 diff --git a/gcc/testsuite/gfortran.dg/realloc_on_assign_24.f90 b/gcc/testsuite/gfortran.dg/realloc_on_assign_24.f90 new file mode 100644 index 00000000000..6f88c2bf27c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_24.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR 62142 - this used to segfault +! Original test case by Ondřej Čertík . +program test_segfault + implicit none + real, allocatable :: X(:) + allocate (x(1)) + x = 1. + X = floor(X) +end program