aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2019-10-02 17:01:30 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2019-10-02 17:01:30 +0000
commit8b4e5e711d9b2b979dcee445498a7f570ea49e2e (patch)
tree95139ba5c83855facfea0c6d13b90a158c9bdd6b /gcc
parentb1fb82e52520bf9be6dff67bbcd6129ae85bc098 (diff)
downloadgcc-8b4e5e711d9b2b979dcee445498a7f570ea49e2e.zip
gcc-8b4e5e711d9b2b979dcee445498a7f570ea49e2e.tar.gz
gcc-8b4e5e711d9b2b979dcee445498a7f570ea49e2e.tar.bz2
re PR fortran/91943 (ICE in gfc_conv_constant_to_tree, at fortran/trans-const.c:370)
2019-10-02 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/91943 * match.c (gfc_match_call): BOZ cannot be an actual argument in a subroutine reference. * resolve.c (resolve_function): BOZ cannot be an actual argument in a function reference. 2019-10-02 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/91943 gfortran.dg/pr91943.f90 From-SVN: r276471
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/match.c10
-rw-r--r--gcc/fortran/resolve.c15
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr91943.f907
5 files changed, 45 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 51c393a..f225ff2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2019-10-02 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/91943
+ * match.c (gfc_match_call): BOZ cannot be an actual argument in
+ a subroutine reference.
+ * resolve.c (resolve_function): BOZ cannot be an actual argument in
+ a function reference.
+
2019-10-01 Jan Hubicka <jh@suse.cz>
* module.c (load_commons): Initialize flags to 0 to silecne
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 83b1189..4a31080 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -4984,6 +4984,16 @@ gfc_match_call (void)
goto syntax;
}
+ /* Walk the argument list looking for invalid BOZ. */
+ for (a = arglist; a; a = a->next)
+ if (a->expr && a->expr->ts.type == BT_BOZ)
+ {
+ gfc_error ("A BOZ literal constant at %L cannot appear as an actual "
+ "argument in a subroutine reference", &a->expr->where);
+ goto cleanup;
+ }
+
+
/* If any alternate return labels were found, construct a SELECT
statement that will jump to the right place. */
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index e8d0566..a792547 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -3242,6 +3242,21 @@ resolve_function (gfc_expr *expr)
if (expr->expr_type != EXPR_FUNCTION)
return t;
+ /* Walk the argument list looking for invalid BOZ. */
+ if (expr->value.function.esym)
+ {
+ gfc_actual_arglist *a;
+
+ for (a = expr->value.function.actual; a; a = a->next)
+ if (a->expr && a->expr->ts.type == BT_BOZ)
+ {
+ gfc_error ("A BOZ literal constant at %L cannot appear as an "
+ "actual argument in a function reference",
+ &a->expr->where);
+ return false;
+ }
+ }
+
temp = need_full_assumed_size;
need_full_assumed_size = 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d455ce6..3256a02 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-10-02 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/91943
+ gfortran.dg/pr91943.f90
+
2019-10-02 Jan Hubicka <hubicka@ucw.cz>
* g++.dg/tree-ssa/pr53844.C: Add -fno-inline-functions --param
diff --git a/gcc/testsuite/gfortran.dg/pr91943.f90 b/gcc/testsuite/gfortran.dg/pr91943.f90
new file mode 100644
index 0000000..c2752c5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr91943.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/91943
+! Code contributed by Gerhard Steinmetz
+program p
+ print *, f(b'1001') ! { dg-error "cannot appear as an actual argument" }
+ call sub(b'1001') ! { dg-error "cannot appear as an actual argument" }
+end