From db7d7dc1730d47f5813940d97ca60cd6ffa4e2eb Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Fri, 7 May 2010 11:36:45 -0400 Subject: [PATCH] re PR fortran/40728 (Bogus error "Error: Can't convert UNKNOWN to REAL(8) at (1)") gcc/fortran/: 2010-05-07 Daniel Franke PR fortran/40728 * intrinc.c (gfc_is_intrinsic): Do not prematurely mark symbol as external gcc/testsuite/: 2010-05-07 Daniel Franke PR fortran/40728 * gfortran.dg/coarray_1.f90: Fixed error message. * gfortran.dg/selected_char_kind_3.f90: Fixed error message. * gfortran.dg/intrinsic_std_1.f90: Fixed bogus message. * gfortran.dg/intrinsic_std_5.f90: New. From-SVN: r159155 --- gcc/fortran/ChangeLog | 7 ++++++ gcc/fortran/intrinsic.c | 19 +++++++-------- gcc/testsuite/ChangeLog | 8 +++++++ gcc/testsuite/gfortran.dg/coarray_1.f90 | 2 +- gcc/testsuite/gfortran.dg/intrinsic_std_1.f90 | 2 +- gcc/testsuite/gfortran.dg/intrinsic_std_5.f03 | 24 +++++++++++++++++++ .../gfortran.dg/selected_char_kind_3.f90 | 2 +- 7 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/intrinsic_std_5.f03 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4c42faac88e..97e002a1a19 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-05-07 Daniel Franke + + PR fortran/40728 + * intrinc.c (gfc_is_intrinsic): Do not prematurely mark symbol + as external + 2010-05-07 Jason Merrill * trans-expr.c (gfc_conv_procedure_call): Rename nullptr to null_ptr @@ -17,6 +23,7 @@ 2010-05-05 Daniel Franke + PR fortran/32331 * resolve.c (traverse_data_list): Rephrase error message for non-constant bounds in data-implied-do. diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 34afabc3d22..e8041eb9b9a 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -956,17 +956,14 @@ gfc_is_intrinsic (gfc_symbol* sym, int subroutine_flag, locus loc) /* See if this intrinsic is allowed in the current standard. */ if (gfc_check_intrinsic_standard (isym, &symstd, false, loc) == FAILURE) { - if (sym->attr.proc == PROC_UNKNOWN) - { - if (gfc_option.warn_intrinsics_std) - gfc_warning_now ("The intrinsic '%s' at %L is not included in the" - " selected standard but %s and '%s' will be" - " treated as if declared EXTERNAL. Use an" - " appropriate -std=* option or define" - " -fall-intrinsics to allow this intrinsic.", - sym->name, &loc, symstd, sym->name); - gfc_add_external (&sym->attr, &loc); - } + if (sym->attr.proc == PROC_UNKNOWN + && gfc_option.warn_intrinsics_std) + gfc_warning_now ("The intrinsic '%s' at %L is not included in the" + " selected standard but %s and '%s' will be" + " treated as if declared EXTERNAL. Use an" + " appropriate -std=* option or define" + " -fall-intrinsics to allow this intrinsic.", + sym->name, &loc, symstd, sym->name); return false; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2ddbe951209..297ae761ddd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2010-05-07 Daniel Franke + + PR fortran/40728 + * gfortran.dg/coarray_1.f90: Fixed error message. + * gfortran.dg/selected_char_kind_3.f90: Fixed error message. + * gfortran.dg/intrinsic_std_1.f90: Fixed bogus message. + * gfortran.dg/intrinsic_std_5.f90: New. + 2010-05-07 Jason Merrill * g++.dg/cpp0x/nullptr20.C: Use sprintf. diff --git a/gcc/testsuite/gfortran.dg/coarray_1.f90 b/gcc/testsuite/gfortran.dg/coarray_1.f90 index ba10d64a3ef..7fd4c84240f 100644 --- a/gcc/testsuite/gfortran.dg/coarray_1.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_1.f90 @@ -13,6 +13,6 @@ sync memory ! { dg-error "Fortran 2008:" } sync images(*) ! { dg-error "Fortran 2008:" } ! num_images is implicitly defined: -n = num_images() ! { dg-error "convert UNKNOWN to INTEGER" } +n = num_images() ! { dg-error "has no IMPLICIT type" } error stop 'stop' ! { dg-error "Fortran 2008:" } end diff --git a/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90 b/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90 index 9c97b7eaa5d..290b54c2cb4 100644 --- a/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90 +++ b/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90 @@ -20,7 +20,7 @@ SUBROUTINE no_implicit ! ASINH is an intrinsic of F2008 ! The warning should be issued in the declaration above where it is declared ! EXTERNAL. - WRITE (*,*) ASINH (1.) ! { dg-bogus "Fortran 2008" } + WRITE (*,*) ASINH (1.) ! { dg-warning "Fortran 2008" } END SUBROUTINE no_implicit SUBROUTINE implicit_type diff --git a/gcc/testsuite/gfortran.dg/intrinsic_std_5.f03 b/gcc/testsuite/gfortran.dg/intrinsic_std_5.f03 new file mode 100644 index 00000000000..f5c0f2d9d55 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/intrinsic_std_5.f03 @@ -0,0 +1,24 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! PR fortran/40728 +! + +! bogus error +SUBROUTINE s1 + IMPLICIT NONE + real(4), volatile :: r4 + + r4 = 0.0_4 + r4 = asinh(r4) ! { dg-error "has no IMPLICIT type" } +END SUBROUTINE + + + +! ICE on invalid (ATANH is defined by F2008 only) +SUBROUTINE s2 + IMPLICIT NONE + real :: r + r = 0.4 + print *, atanh(r) ! { dg-error "has no IMPLICIT type" } +END SUBROUTINE diff --git a/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90 b/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90 index 59bc18f1f6f..fad5e46c287 100644 --- a/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90 +++ b/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90 @@ -4,7 +4,7 @@ ! Check that SELECTED_CHAR_KIND is rejected with -std=f95 ! implicit none - character(kind=selected_char_kind("ascii")) :: s ! { dg-error "must be an intrinsic function" } + character(kind=selected_char_kind("ascii")) :: s ! { dg-error "has no IMPLICIT type" } s = "" ! { dg-error "has no IMPLICIT type" } print *, s end