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

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
79 lines
1.9 KiB
Fortran
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
|
|
|