llvm-project/flang/test/Semantics/resolve119.f90
Peter Klausler b0cea8941c
[flang] Allow redudant attributes on use-/host- associated names
Constraint C815 in F'2018 allows a name to acquire an attribute at
most once per scope.  For some attributes, the attribute may have
already been inherited, and the compiler was emitting a bogus error
message for a redundant application of the same attribute in another
scope.

Fixes https://github.com/llvm/llvm-project/issues/60274

Differential Revision: https://reviews.llvm.org/D150819
2023-05-18 12:07:25 -07:00

79 lines
1.9 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
! C815: an attribute may be applied at most once per scope
module m
real a1, a2, v1, v2
asynchronous a1
asynchronous a2
!ERROR: ASYNCHRONOUS attribute was already specified on 'a2'
asynchronous a2
volatile v1
volatile v2
!ERROR: VOLATILE attribute was already specified on 'v2'
volatile v2
contains
subroutine modsub
asynchronous a1
asynchronous a2
!ERROR: ASYNCHRONOUS attribute was already specified on 'a2'
asynchronous a2
volatile v1
volatile v2
!ERROR: VOLATILE attribute was already specified on 'v2'
volatile v2
block
asynchronous a1
asynchronous a2
!ERROR: ASYNCHRONOUS attribute was already specified on 'a2'
asynchronous a2
volatile v1
volatile v2
!ERROR: VOLATILE attribute was already specified on 'v2'
volatile v2
end block
end
end
subroutine s
use m
asynchronous a1
asynchronous a2
!ERROR: ASYNCHRONOUS attribute was already specified on 'a2'
asynchronous a2
volatile v1
volatile v2
!ERROR: VOLATILE attribute was already specified on 'v2'
volatile v2
block
asynchronous a1
asynchronous a2
!ERROR: ASYNCHRONOUS attribute was already specified on 'a2'
asynchronous a2
volatile v1
volatile v2
!ERROR: VOLATILE attribute was already specified on 'v2'
volatile v2
end block
contains
subroutine internal
asynchronous a1
asynchronous a2
!ERROR: ASYNCHRONOUS attribute was already specified on 'a2'
asynchronous a2
volatile v1
volatile v2
!ERROR: VOLATILE attribute was already specified on 'v2'
volatile v2
block
asynchronous a1
asynchronous a2
!ERROR: ASYNCHRONOUS attribute was already specified on 'a2'
asynchronous a2
volatile v1
volatile v2
!ERROR: VOLATILE attribute was already specified on 'v2'
volatile v2
end block
end
end