aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargls@comcast.net>2008-09-06 17:11:29 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2008-09-06 17:11:29 +0200
commit2c68bc89b7f04ee6e599afb8a75734641e5a5038 (patch)
tree67cb2668f719844643b9fcb87857334f0174cdfe /gcc
parent9731c4a34803475968046006076f07d0fe5cd16c (diff)
downloadgcc-2c68bc89b7f04ee6e599afb8a75734641e5a5038.zip
gcc-2c68bc89b7f04ee6e599afb8a75734641e5a5038.tar.gz
gcc-2c68bc89b7f04ee6e599afb8a75734641e5a5038.tar.bz2
re PR fortran/33229 (ICE with "intrinsic" plus calling a subroutine as function)
2008-09-06 Steven G. Kargl <kargls@comcast.net> PR fortran/33229 * resolve.c (resolve_function): An intrinsic subroutine should * not be called as a function. 2008-09-06 Steven G. Kargl <kargls@comcast.net> PR fortran/33229 * gfortran.dg/intrinsic_subroutine.f90: New test. From-SVN: r140061
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c10
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic_subroutine.f907
4 files changed, 31 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2008990..e3f2dcd 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2008-09-06 Steven G. Kargl <kargls@comcast.net>
+
+ PR fortran/33229
+ * resolve.c (resolve_function): An intrinsic subroutine should not be
+ called as a function.
+
2008-09-05 Daniel Kraft <d@domob.eu>
PR fortran/35837
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index e28d704..485d331 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2204,6 +2204,16 @@ resolve_function (gfc_expr *expr)
if (expr->symtree)
sym = expr->symtree->n.sym;
+ if (sym && sym->attr.intrinsic
+ && !gfc_find_function (sym->name)
+ && gfc_find_subroutine (sym->name)
+ && sym->attr.function)
+ {
+ gfc_error ("Intrinsic subroutine '%s' used as "
+ "a function at %L", sym->name, &expr->where);
+ return FAILURE;
+ }
+
if (sym && sym->attr.flavor == FL_VARIABLE)
{
gfc_error ("'%s' at %L is not a function", sym->name, &expr->where);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9ea373a..c094425 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-09-06 Steven G. Kargl <kargls@comcast.net>
+
+ PR fortran/33229
+ * gfortran.dg/intrinsic_subroutine.f90: New test.
+
2008-09-06 Richard Sandiford <rdsandiford@googlemail.com>
* gcc.target/mips/mips.exp (dg-mips-options): Make
@@ -26,8 +31,8 @@
2008-09-05 Douglas Gregor <doug.gregor@gmail.com>
- PR c++/37342
- * g++.dg/other/canon-37342.C: New.
+ PR c++/37342
+ * g++.dg/other/canon-37342.C: New.
2008-09-05 Joseph Myers <joseph@codesourcery.com>
@@ -213,7 +218,7 @@
2008-09-02 Victor Kaplansky <victork@il.ibm.com>
* gcc.dg/fastmath-2.c: New.
-
+
2008-09-02 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/37095
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_subroutine.f90 b/gcc/testsuite/gfortran.dg/intrinsic_subroutine.f90
new file mode 100644
index 0000000..103ff3b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intrinsic_subroutine.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR 33229
+implicit none
+intrinsic cpu_time
+real :: time
+print *, CPU_TIME(TIME) ! { dg-error "Intrinsic subroutine" }
+end