aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2009-05-06 17:44:18 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2009-05-06 17:44:18 +0200
commitb050b2dec68289dc363907df52e0b558f5443251 (patch)
tree4a987a2be2a59e5ddaa4159669ce452ba4b6e923 /gcc
parent1f11033528b5b35ecc84eb4afa53c64509eb542c (diff)
downloadgcc-b050b2dec68289dc363907df52e0b558f5443251.zip
gcc-b050b2dec68289dc363907df52e0b558f5443251.tar.gz
gcc-b050b2dec68289dc363907df52e0b558f5443251.tar.bz2
re PR fortran/40041 (spurious warning with INTRINSIC statement)
2009-05-06 Tobias Burnus <burnus@net-b.de> PR fortran/40041 * resolve.c (resolve_symbol): Print no warning for implicitly typed intrinsic functions. 2009-05-06 Tobias Burnus <burnus@net-b.de> PR fortran/40041 * gfortran.dg/intrinsic_2.f90: New test. * gfortran.dg/intrinsic.f90: Add old and this PR as comment. From-SVN: r147183
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic.f903
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic_2.f9040
5 files changed, 58 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 3e9c86a..1cbfa14 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2009-05-06 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/40041
+ * resolve.c (resolve_symbol): Print no warning for implicitly
+ typed intrinsic functions.
+
2009-05-05 Janus Weil <janus@gcc.gnu.org>
PR fortran/39998
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index fe79e4a..1878042 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -9320,13 +9320,14 @@ resolve_symbol (gfc_symbol *sym)
if ((isym = gfc_find_function (sym->name)))
{
- if (sym->ts.type != BT_UNKNOWN && gfc_option.warn_surprising)
+ if (sym->ts.type != BT_UNKNOWN && gfc_option.warn_surprising
+ && !sym->attr.implicit_type)
gfc_warning ("Type specified for intrinsic function '%s' at %L is"
" ignored", sym->name, &sym->declared_at);
}
else if ((isym = gfc_find_subroutine (sym->name)))
{
- if (sym->ts.type != BT_UNKNOWN)
+ if (sym->ts.type != BT_UNKNOWN && !sym->attr.implicit_type)
{
gfc_error ("Intrinsic subroutine '%s' at %L shall not have a type"
" specifier", sym->name, &sym->declared_at);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 880a5d4..7953f67 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-05-06 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/40041
+ * gfortran.dg/intrinsic_2.f90: New test.
+ * gfortran.dg/intrinsic.f90: Add old and this PR as comment.
+
2009-05-06 Joseph Myers <joseph@codesourcery.com>
PR c/40032
diff --git a/gcc/testsuite/gfortran.dg/intrinsic.f90 b/gcc/testsuite/gfortran.dg/intrinsic.f90
index 8bb41fd..e3ac35e 100644
--- a/gcc/testsuite/gfortran.dg/intrinsic.f90
+++ b/gcc/testsuite/gfortran.dg/intrinsic.f90
@@ -1,5 +1,8 @@
! { dg-do compile }
! { dg-options "-c -Wall" }
+!
+! PR fortran/20373
+! cf. also PR fortran/40041
subroutine valid
intrinsic :: abs ! ok, intrinsic function
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_2.f90 b/gcc/testsuite/gfortran.dg/intrinsic_2.f90
new file mode 100644
index 0000000..b4919a1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intrinsic_2.f90
@@ -0,0 +1,40 @@
+! { dg-do compile }
+! { dg-options "-c -Wall" }
+!
+! PR fortran/40041
+! cf. also PR fortran/20373
+
+subroutine valid_one
+ REAL :: a
+ INTEGER :: n
+ INTRINSIC ABS, MAX
+ a(n) = MAX(ABS(2),ABS(3),n)
+end subroutine
+
+subroutine valid_two
+ IMPLICIT NONE
+ REAL :: a
+ INTEGER :: n
+ INTRINSIC ABS, MAX
+ a(n) = MAX(ABS(2),ABS(3),n)
+end subroutine
+
+subroutine warnings_one
+ REAL :: a
+ INTEGER :: n
+ REAL :: ABS ! { dg-warning "Type specified for intrinsic function" }
+ REAL :: MAX ! { dg-warning "Type specified for intrinsic function" }
+ INTRINSIC ABS, MAX
+ a(n) = MAX(ABS(2),ABS(3),n)
+end subroutine
+
+subroutine warnings_two
+ IMPLICIT NONE
+ REAL :: a
+ INTEGER :: n
+ INTRINSIC ABS ! { dg-warning "Type specified for intrinsic function" }
+ INTRINSIC MAX ! { dg-warning "Type specified for intrinsic function" }
+ REAL :: ABS
+ REAL :: MAX
+ a(n) = MAX(ABS(2),ABS(3),n)
+end subroutine