Peter Klausler 41a964cff0 [flang] Settle ambiguity between C795 and C721
C721 says that a type parameter value of '*' is permitted in the type-spec
for a named constant; C795 says that such type parameters are allowed
in type-specs only for a few kinds of things, not including named
constants.  The interpretation seems to depend on context, with C721
applying to intrinsic types (i.e., character) and C795 applying only
to derived types.

Differential Revision: https://reviews.llvm.org/D146586
2023-03-27 17:37:30 -07:00

39 lines
1.5 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
! C722 A function name shall not be declared with an asterisk type-param-value
! unless it is of type CHARACTER and is the name of a dummy function or the
! name of the result of an external function.
subroutine s()
type derived(param)
integer, len :: param
end type
type(derived(34)) :: a
procedure(character(len=*)) :: externCharFunc
!ERROR: An assumed (*) type parameter may be used only for a (non-statement function) dummy argument, associate name, character named constant, or external function result
procedure(type(derived(param =*))) :: externDerivedFunc
interface
subroutine subr(dummyFunc)
character(len=*) :: dummyFunc
end subroutine subr
end interface
contains
function works()
type(derived(param=4)) :: works
end function works
!ERROR: An assumed (*) type parameter may be used only for a (non-statement function) dummy argument, associate name, character named constant, or external function result
function fails1()
character(len=*) :: fails1
end function fails1
!ERROR: An assumed (*) type parameter may be used only for a (non-statement function) dummy argument, associate name, character named constant, or external function result
function fails2()
!ERROR: An assumed (*) type parameter may be used only for a (non-statement function) dummy argument, associate name, character named constant, or external function result
type(derived(param=*)) :: fails2
end function fails2
end subroutine s