-
Notifications
You must be signed in to change notification settings - Fork 11.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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 #60274 Differential Revision: https://reviews.llvm.org/D150819
- Loading branch information
Showing
2 changed files
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
! 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 | ||
|