]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/71859 (ICE on same variable/subroutine name (verify_gimple...
authorSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 30 Sep 2016 21:46:14 +0000 (21:46 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 30 Sep 2016 21:46:14 +0000 (21:46 +0000)
2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>

Backport from trunk

PR fortran/71859
* gfortran.dg/pr71859.f90: New test.
* gfortran.dg/intrinsic_numeric_arg.f: Update error message.
* gfortran.dg/coarray_collectives_1.f90: Ditto.

PR fortran/71859
* check.c(numeric_check): Prevent ICE.  Issue error for invalid
subroutine as an actual argument when numeric argument is expected.

From-SVN: r240682

gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/coarray_collectives_1.f90
gcc/testsuite/gfortran.dg/intrinsic_numeric_arg.f
gcc/testsuite/gfortran.dg/pr71859.f90 [new file with mode: 0644]

index 2e9ec14f2152b71a8a0c15861dbae6928abc5d19..a2513068d18f4e4c00f5edcdecdd5c30dfaab82d 100644 (file)
@@ -1,3 +1,11 @@
+2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       Backport from trunk
+
+       PR fortran/71859
+       * check.c(numeric_check): Prevent ICE.  Issue error for invalid
+       subroutine as an actual argument when numeric argument is expected.
+
 2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
  
        Backport of trunk
index de7ed0fd0e36417206eb8879318d8bb999f371c0..c2cc09f60a8e49f82170161af4d710a0460fb1f9 100644 (file)
@@ -72,6 +72,11 @@ type_check (gfc_expr *e, int n, bt type)
 static bool
 numeric_check (gfc_expr *e, int n)
 {
+  /* Users sometime use a subroutine designator as an actual argument to
+     an intrinsic subprogram that expects an argument with a numeric type.  */
+  if (e->symtree && e->symtree->n.sym->attr.subroutine)
+    goto error;
+
   if (gfc_numeric_ts (&e->ts))
     return true;
 
@@ -86,7 +91,9 @@ numeric_check (gfc_expr *e, int n)
       return true;
     }
 
-  gfc_error ("%qs argument of %qs intrinsic at %L must be a numeric type",
+error:
+
+  gfc_error ("%qs argument of %qs intrinsic at %L must have a numeric type",
             gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
             &e->where);
 
index 94bc71e8d306d9ca6f9c32eba7b622ebf42ded14..584bd5646265bf0795aece05df7ad2a9741ffc14 100644 (file)
@@ -1,3 +1,11 @@
+2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       Backport from trunk
+
+       PR fortran/71859
+       * check.c(numeric_check): Prevent ICE.  Issue error for invalid
+       subroutine as an actual argument when numeric argument is expected.
+
 2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
  
        Backport from trunk
index a09a81f6b1d067b6b7b04397be301fb670249072..cdb3993e58742165725cf21da2537c74f9cf4a63 100644 (file)
@@ -14,7 +14,7 @@ program test
   integer(8) :: i8
   character(len=19, kind=4) :: msg4
 
-  call co_sum("abc") ! { dg-error "must be a numeric type" }
+  call co_sum("abc") ! { dg-error "must have a numeric type" }
   call co_max(cmplx(1.0,0.0)) ! { dg-error "shall be of type integer, real or character" }
   call co_min(cmplx(0.0,1.0)) ! { dg-error "shall be of type integer, real or character" }
 
index 3257d456f75f02488afebff380d5f6e0882db1a5..445c39ef297960a4c23d1955f267ad9ec23fd475 100644 (file)
@@ -4,6 +4,6 @@
        LOGICAL Z
        CHARACTER A
        REAL R
-       R = ABS(Z) !  { dg-error " must be a numeric type" }
-       R = ABS(A) !  { dg-error " must be a numeric type" }
+       R = ABS(Z) !  { dg-error " must have a numeric type" }
+       R = ABS(A) !  { dg-error " must have a numeric type" }
        END
diff --git a/gcc/testsuite/gfortran.dg/pr71859.f90 b/gcc/testsuite/gfortran.dg/pr71859.f90
new file mode 100644 (file)
index 0000000..0dc6177
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do compile }
+program p
+   call s(1)
+   x = abs(s)  ! { dg-error "must have a numeric type" }
+end
+subroutine s(n)
+   print *, n
+end