[flang-commits] [flang] b0cea89 - [flang] Allow redudant attributes on use-/host- associated names

Peter Klausler via flang-commits flang-commits at lists.llvm.org
Thu May 18 12:07:31 PDT 2023


Author: Peter Klausler
Date: 2023-05-18T12:07:25-07:00
New Revision: b0cea8941cab913d9a811ac5331ae63a22ada03f

URL: https://github.com/llvm/llvm-project/commit/b0cea8941cab913d9a811ac5331ae63a22ada03f
DIFF: https://github.com/llvm/llvm-project/commit/b0cea8941cab913d9a811ac5331ae63a22ada03f.diff

LOG: [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

Added: 
    flang/test/Semantics/resolve119.f90

Modified: 
    flang/lib/Semantics/resolve-names.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index fa782f3b414b..4a4841d5a936 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -2329,6 +2329,10 @@ Symbol &ScopeHandler::MakeHostAssocSymbol(
                       .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;
 }

diff  --git a/flang/test/Semantics/resolve119.f90 b/flang/test/Semantics/resolve119.f90
new file mode 100644
index 000000000000..71294303d795
--- /dev/null
+++ b/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
+


        


More information about the flang-commits mailing list