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

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
39 lines
1.5 KiB
Fortran
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
|