aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2016-08-27 15:38:55 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2016-08-27 15:38:55 +0000
commit741b52b54f3b7332b3199a5bd3af12acf0901c13 (patch)
tree4615b33c636ea77b984f41a11584c75bc505e9db /gcc
parent4aebb4e4a6444400c9592484dab9336754e185e3 (diff)
downloadgcc-741b52b54f3b7332b3199a5bd3af12acf0901c13.zip
gcc-741b52b54f3b7332b3199a5bd3af12acf0901c13.tar.gz
gcc-741b52b54f3b7332b3199a5bd3af12acf0901c13.tar.bz2
re PR fortran/77372 (ICE in simplify_ieee_selected_real_kind, at fortran/simplify.c:7049)
2016-08-27 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/77372 simplify.c (simplify_ieee_selected_real_kind): Check for NULL pointers. 2016-08-27 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/77372 gfortran.dg/pr77372.f90: New test. From-SVN: r239795
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/simplify.c14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr77372.f907
4 files changed, 28 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6def5b4..f15e936 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2016-08-27 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/77372
+ simplify.c (simplify_ieee_selected_real_kind): Check for NULL pointers.
+
2016-08-25 Steven g. Kargl <kargl@gcc.gnu.org>
PR fortran/77351
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 8096a92..6e6566d 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -7044,9 +7044,17 @@ gfc_simplify_compiler_version (void)
gfc_expr *
simplify_ieee_selected_real_kind (gfc_expr *expr)
{
- gfc_actual_arglist *arg = expr->value.function.actual;
- gfc_expr *p = arg->expr, *q = arg->next->expr,
- *rdx = arg->next->next->expr;
+ gfc_actual_arglist *arg;
+ gfc_expr *p = NULL, *q = NULL, *rdx = NULL;
+
+ arg = expr->value.function.actual;
+ p = arg->expr;
+ if (arg->next)
+ {
+ q = arg->next->expr;
+ if (arg->next->next)
+ rdx = arg->next->next->expr;
+ }
/* Currently, if IEEE is supported and this module is built, it means
all our floating-point types conform to IEEE. Hence, we simply handle
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 952380f..68e1804 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-08-27 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/77372
+ gfortran.dg/pr77372.f90: New test.
+
2016-08-26 David Malcolm <dmalcolm@redhat.com>
* gcc.dg/spellcheck-fields-2.c (test): Move
diff --git a/gcc/testsuite/gfortran.dg/pr77372.f90 b/gcc/testsuite/gfortran.dg/pr77372.f90
new file mode 100644
index 0000000..8609d16
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr77372.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+program p
+ use ieee_arithmetic
+ real(kind=ieee_selected_real_kind(10_1)) :: z1
+ real(kind=ieee_selected_real_kind(10_2)) :: z2
+ real(kind=ieee_selected_real_kind(10_4)) :: z4
+end