mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 15:16:36 +00:00

Before emitting a warning message, code should check that the usage in question should be diagnosed by calling ShouldWarn(). A fair number of sites in the code do not, and can emit portability warnings unconditionally, which can confuse a user that hasn't asked for them (-pedantic) and isn't terribly concerned about portability *to* other compilers. Add calls to ShouldWarn() or IsEnabled() around messages that need them, and add -pedantic to tests that now require it to test their portability messages, and add more expected message lines to those tests when -pedantic causes other diagnostics to fire.
48 lines
2.5 KiB
Fortran
48 lines
2.5 KiB
Fortran
! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
|
|
! C1030 - assignment of pointers to intrinsic procedures
|
|
! C1515 - interface definition for procedure pointers
|
|
! C1519 - initialization of pointers to intrinsic procedures
|
|
program main
|
|
intrinsic :: cos ! a specific & generic intrinsic name
|
|
intrinsic :: alog10 ! a specific intrinsic name, not generic
|
|
intrinsic :: null ! a weird special case
|
|
intrinsic :: bessel_j0 ! generic intrinsic, not specific
|
|
intrinsic :: amin0
|
|
intrinsic :: mod
|
|
intrinsic :: llt
|
|
!ERROR: 'haltandcatchfire' is not a known intrinsic procedure
|
|
intrinsic :: haltandcatchfire
|
|
|
|
abstract interface
|
|
logical function chrcmp(a,b)
|
|
character(*), intent(in) :: a
|
|
character(*), intent(in) :: b
|
|
end function chrcmp
|
|
end interface
|
|
|
|
!PORTABILITY: Procedure pointer 'p' should not have an ELEMENTAL intrinsic as its interface
|
|
procedure(sin), pointer :: p => cos
|
|
!ERROR: Intrinsic procedure 'amin0' is not an unrestricted specific intrinsic permitted for use as the definition of the interface to procedure pointer 'q'
|
|
procedure(amin0), pointer :: q
|
|
!ERROR: Intrinsic procedure 'bessel_j0' is not an unrestricted specific intrinsic permitted for use as the definition of the interface to procedure pointer 'r'
|
|
procedure(bessel_j0), pointer :: r
|
|
!ERROR: Intrinsic procedure 'llt' is not an unrestricted specific intrinsic permitted for use as the initializer for procedure pointer 's'
|
|
procedure(chrcmp), pointer :: s => llt
|
|
!ERROR: Intrinsic procedure 'bessel_j0' is not an unrestricted specific intrinsic permitted for use as the initializer for procedure pointer 't'
|
|
!PORTABILITY: Procedure pointer 't' should not have an ELEMENTAL intrinsic as its interface
|
|
procedure(cos), pointer :: t => bessel_j0
|
|
procedure(chrcmp), pointer :: u
|
|
p => alog ! valid use of an unrestricted specific intrinsic
|
|
p => alog10 ! ditto, but already declared intrinsic
|
|
p => cos ! ditto, but also generic
|
|
p => tan ! a generic & an unrestricted specific, not already declared
|
|
!ERROR: Function pointer 'p' associated with incompatible function designator 'mod': function results have distinct types: REAL(4) vs INTEGER(4)
|
|
p => mod
|
|
!ERROR: Function pointer 'p' associated with incompatible function designator 'index': function results have distinct types: REAL(4) vs INTEGER(4)
|
|
p => index
|
|
!ERROR: 'bessel_j0' is not an unrestricted specific intrinsic procedure
|
|
p => bessel_j0
|
|
!ERROR: 'llt' is not an unrestricted specific intrinsic procedure
|
|
u => llt
|
|
end program main
|