Initializers in entity-decls don't need to have their expressions analyzed immediately in name resolution unless of course they are defining the values of named constants. By deferring the expression analysis, the compiler can better handle references to module and internal procedures that might appear in structure constructors; at present, these are typically rejected as being forward references (which they can be) to subprogram names that can't yet be checked for compatibility with the characteristics of the corresponding procedure component.
39 lines
1.0 KiB
Fortran
39 lines
1.0 KiB
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' is a pointer but is not initialized like one
|
|
!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
|