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.
38 lines
1003 B
Fortran
38 lines
1003 B
Fortran
! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
|
|
module m
|
|
real mobj
|
|
contains
|
|
subroutine msubr
|
|
end subroutine
|
|
end module
|
|
program main
|
|
use m
|
|
!PORTABILITY: Name 'main' declared in a main program should not have the same name as the main program
|
|
pointer main
|
|
!ERROR: Cannot change POINTER attribute on use-associated 'mobj'
|
|
pointer mobj
|
|
!ERROR: Cannot change POINTER attribute on use-associated 'msubr'
|
|
pointer msubr
|
|
!ERROR: 'inner' cannot have the POINTER attribute
|
|
pointer inner
|
|
real obj
|
|
!ERROR: 'ip' may not have both the POINTER and PARAMETER attributes
|
|
integer, parameter :: ip = 123
|
|
pointer ip
|
|
type dt; end type
|
|
!ERROR: 'dt' cannot have the POINTER attribute
|
|
pointer dt
|
|
interface generic
|
|
subroutine extsub
|
|
end subroutine
|
|
end interface
|
|
!ERROR: 'generic' cannot have the POINTER attribute
|
|
pointer generic
|
|
namelist /nml/ obj
|
|
!ERROR: 'nml' cannot have the POINTER attribute
|
|
pointer nml
|
|
contains
|
|
subroutine inner
|
|
end subroutine
|
|
end
|