[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
Thu May 18 12:07:39 PDT 2023


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGb0cea8941cab: [flang] Allow redudant attributes on use-/host- associated names (authored by klausler).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150819/new/

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.523497.patch
Type: text/x-patch
Size: 2845 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20230518/2f2c1a17/attachment-0001.bin>


More information about the flang-commits mailing list