[flang-commits] [PATCH] D150819: [flang] Allow redudant attributes on use-/host- associated names
Peter Klausler via Phabricator via flang-commits
flang-commits at lists.llvm.org
Wed May 17 14:36:03 PDT 2023
klausler created this revision.
klausler added a reviewer: PeteSteinfeld.
klausler added a project: Flang.
Herald added subscribers: sunshaoce, jdoerfert.
Herald added a reviewer: sscalpone.
Herald added a project: All.
klausler requested review of this revision.
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.
https://reviews.llvm.org/D150819
Files:
flang/lib/Semantics/resolve-names.cpp
flang/test/Semantics/resolve119.f90
Index: flang/test/Semantics/resolve119.f90
===================================================================
--- /dev/null
+++ flang/test/Semantics/resolve119.f90
@@ -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
+
Index: flang/lib/Semantics/resolve-names.cpp
===================================================================
--- flang/lib/Semantics/resolve-names.cpp
+++ flang/lib/Semantics/resolve-names.cpp
@@ -2329,6 +2329,10 @@
.first->second};
name.symbol = &symbol;
symbol.attrs() = hostSymbol.attrs(); // TODO: except PRIVATE, PUBLIC?
+ // These attributes can be redundantly reapplied without error
+ // on the host-associated name, at most once (C815).
+ symbol.implicitAttrs() =
+ symbol.attrs() & Attrs{Attr::ASYNCHRONOUS, Attr::VOLATILE};
symbol.flags() = hostSymbol.flags();
return symbol;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150819.523178.patch
Type: text/x-patch
Size: 2845 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20230517/50f3794f/attachment.bin>
More information about the flang-commits
mailing list