[flang-commits] [flang] [flang][cuda][openacc] Fix OpenACC use_device host association symbol copies (PR #194705)

Valentin Clement バレンタイン クレメン via flang-commits flang-commits at lists.llvm.org
Wed Apr 29 10:59:26 PDT 2026


================
@@ -1615,30 +1616,55 @@ void AccVisitor::CopySymbolWithDevice(const parser::Name *name) {
   // New symbols are created for those appearing in the use_device clause.
   // These new symbols get the CUDA device attribute.
   if (name && name->symbol) {
-    Symbol *copy{currScope().CopySymbol(name->symbol->GetUltimate())};
+    Symbol *copy{CopyUseDeviceSymbol(*name->symbol)};
     if (copy) {
-      if (auto *object{copy->GetUltimate().detailsIf<ObjectEntityDetails>()}) {
+      if (auto *object{copy->detailsIf<ObjectEntityDetails>()}) {
         object->set_cudaDataAttr(common::CUDADataAttr::Device);
       }
-    } else {
-      copy = FindInScope(currScope(), name->symbol->GetUltimate().name());
-    }
-    if (copy) {
       name->symbol = copy;
     }
   }
 }
 
+Symbol *AccVisitor::CopyUseDeviceSymbol(const Symbol &symbol) {
+  const Symbol &ultimate{symbol.GetUltimate()};
+  Symbol *copy{currScope().CopySymbol(ultimate)};
+  if (!copy) {
+    copy = FindInScope(currScope(), ultimate.name());
+  }
+  if (copy && copy->has<HostAssocDetails>()) {
+    if (const auto *hostAssoc{copy->detailsIf<HostAssocDetails>()};
+        hostAssoc && copy->owner().kind() == Scope::Kind::OpenACCConstruct) {
+      Scope &hostScope{currScope().parent()};
+      if (!FindInScope(hostScope, ultimate.name())) {
+        auto pair{hostScope.try_emplace(
+            ultimate.name(), HostAssocDetails{hostAssoc->symbol()})};
+        Symbol &hostCopy{*pair.first->second};
+        hostCopy.attrs() = hostAssoc->symbol().attrs();
+        hostCopy.implicitAttrs() =
+            hostCopy.attrs() & Attrs{Attr::ASYNCHRONOUS, Attr::VOLATILE};
+        hostCopy.implicitAttrs() |=
+            hostAssoc->symbol().implicitAttrs() & Attrs{Attr::SAVE};
+        hostCopy.flags() = hostAssoc->symbol().flags();
----------------
clementval wrote:

Yeah that works fine and its cleaner. Thanks

https://github.com/llvm/llvm-project/pull/194705


More information about the flang-commits mailing list