aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2014-08-15 21:19:33 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2014-08-15 21:19:33 +0000
commit5b33845084ba98bc0bc87c7220254b3ab4999ed5 (patch)
treeb8b72935d966803ea53ec8959acb59f44210a5ad /gcc
parent33cb682bcea5e450ea4c19f99dd07cda04e0ada7 (diff)
downloadgcc-5b33845084ba98bc0bc87c7220254b3ab4999ed5.zip
gcc-5b33845084ba98bc0bc87c7220254b3ab4999ed5.tar.gz
gcc-5b33845084ba98bc0bc87c7220254b3ab4999ed5.tar.bz2
re PR fortran/62142 (internal compiler error: Segmentation fault (X = X - L*floor(X/L)))
2014-08-15 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/62142 * trans-expr.c (is_runtime_conformable): Add NULL pointer checks. 2014-08-15 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/62142 * gfortran.dg/realloc_on_assign_24.f90: New test. From-SVN: r214043
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/trans-expr.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/realloc_on_assign_24.f9010
4 files changed, 22 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index fcf591c..ec126b9 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2014-08-15 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/62142
+ * trans-expr.c (is_runtime_conformable): Add NULL pointer checks.
+
2014-08-15 Tobias Burnus <burnus@net-b.de>
* resolve.c (resolve_critical): Fix name mangling.
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 544fc76..2ea09ce 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 3f19ce7..5c40c0e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-08-15 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/62142
+ * gfortran.dg/realloc_on_assign_24.f90: New test.
+
2014-08-15 Paolo Carlini <paolo.carlini@oracle.com>
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 0000000..6f88c2b
--- /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