diff options
author | Steven G. Kargl <kargls@comcast.net> | 2008-09-06 17:11:29 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2008-09-06 17:11:29 +0200 |
commit | 2c68bc89b7f04ee6e599afb8a75734641e5a5038 (patch) | |
tree | 67cb2668f719844643b9fcb87857334f0174cdfe /gcc/fortran | |
parent | 9731c4a34803475968046006076f07d0fe5cd16c (diff) | |
download | gcc-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/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 10 |
2 files changed, 16 insertions, 0 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); |