re PR fortran/40728 (Bogus error "Error: Can't convert UNKNOWN to REAL(8) at (1)")

gcc/fortran/:
2010-05-07  Daniel Franke  <franke.daniel@gmail.com>

	PR fortran/40728
	* intrinc.c (gfc_is_intrinsic): Do not prematurely mark symbol
        as external


gcc/testsuite/:
2010-05-07  Daniel Franke  <franke.daniel@gmail.com>

        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
This commit is contained in:
Daniel Franke 2010-05-07 11:36:45 -04:00 committed by Daniel Franke
parent 2cd5965fa3
commit db7d7dc173
7 changed files with 50 additions and 14 deletions

View file

@ -1,3 +1,9 @@
2010-05-07 Daniel Franke <franke.daniel@gmail.com>
PR fortran/40728
* intrinc.c (gfc_is_intrinsic): Do not prematurely mark symbol
as external
2010-05-07 Jason Merrill <jason@redhat.com>
* trans-expr.c (gfc_conv_procedure_call): Rename nullptr to null_ptr
@ -17,6 +23,7 @@
2010-05-05 Daniel Franke <franke.daniel@gmail.com>
PR fortran/32331
* resolve.c (traverse_data_list): Rephrase error message for
non-constant bounds in data-implied-do.

View file

@ -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;
}

View file

@ -1,3 +1,11 @@
2010-05-07 Daniel Franke <franke.daniel@gmail.com>
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 <jason@redhat.com>
* g++.dg/cpp0x/nullptr20.C: Use sprintf.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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