Files
clang-p2996/flang/test/Semantics/misc-declarations.f90
peter klausler 52711fb8da [flang] Make builtin types more easily accessible; use them
Rearrange the contents of __builtin_* module files a little and
make sure that semantics implicitly USEs the module __Fortran_builtins
before processing each source file.  This ensures that the special derived
types for TEAM_TYPE, EVENT_TYPE, LOCK_TYPE, &c. exist in the symbol table
where they will be available for use in coarray intrinsic function
processing.

Update IsTeamType() to exploit access to the __Fortran_builtins
module rather than applying ad hoc name tests.  Move it and some
other utilities from Semantics/tools.* to Evaluate/tools.* to make
them available to intrinsics processing.

Add/correct the intrinsic table definitions for GET_TEAM, TEAM_NUMBER,
and THIS_IMAGE to exercise the built-in TEAM_TYPE as an argument and
as a result.

Add/correct/extend tests accordingly.

Differential Revision: https://reviews.llvm.org/D110356
2021-09-29 13:06:01 -07:00

42 lines
1.6 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
! Miscellaneous constraint and requirement checking on declarations:
! - 8.5.6.2 & 8.5.6.3 constraints on coarrays
! - 8.5.19 constraints on the VOLATILE attribute
module m
!ERROR: 'mustbedeferred' is an ALLOCATABLE coarray and must have a deferred coshape
real, allocatable :: mustBeDeferred[*] ! C827
!ERROR: 'mustbeexplicit' is a non-ALLOCATABLE coarray and must have an explicit coshape
real :: mustBeExplicit[:] ! C828
type :: hasCoarray
real, allocatable :: coarray[:]
end type
real :: coarray[*]
type(hasCoarray) :: coarrayComponent
contains
!ERROR: VOLATILE attribute may not apply to an INTENT(IN) argument
subroutine C866(x)
intent(in) :: x
volatile :: x
!ERROR: VOLATILE attribute may apply only to a variable
volatile :: notData
external :: notData
end subroutine
subroutine C867
!ERROR: VOLATILE attribute may not apply to a coarray accessed by USE or host association
volatile :: coarray
!ERROR: VOLATILE attribute may not apply to a type with a coarray ultimate component accessed by USE or host association
volatile :: coarrayComponent
end subroutine
subroutine C868(coarray,coarrayComponent)
real, volatile :: coarray[*]
type(hasCoarray) :: coarrayComponent
block
!ERROR: VOLATILE attribute may not apply to a coarray accessed by USE or host association
volatile :: coarray
!ERROR: VOLATILE attribute may not apply to a type with a coarray ultimate component accessed by USE or host association
volatile :: coarrayComponent
end block
end subroutine
end module