================
@@ -13518,8 +13518,29 @@ bool 
Sema::GloballyUniqueObjectMightBeAccidentallyDuplicated(
 
   // If the object isn't hidden, the dynamic linker will prevent duplication.
   clang::LinkageInfo Lnk = Target->getLinkageAndVisibility();
-  if (Lnk.getVisibility() != HiddenVisibility)
+
+  // The target is "hidden" (from the dynamic linker) if:
+  // 1. On posix, it has hidden visibility, or
+  // 2. On windows, it has no import/export annotation
+  if (Context.getTargetInfo().shouldDLLImportComdatSymbols()) {
+    if (Target->hasAttr<DLLExportAttr>() || Target->hasAttr<DLLImportAttr>())
+      return false;
+
+    // If the variable isn't directly annotated, check to see if it's a member
+    // of an annotated class.
+    const VarDecl *VD = dyn_cast_if_present<VarDecl>(Target);
----------------
DKLoehr wrote:

Hmm, right now we're running the warning in `CheckCompleteVariableDeclaration`, 
which feels like the right place to me. It seems like the attribute gets 
propagated in `CheckCompletedCXXClass`, which would have to happen later, so 
I'm not sure there's a good way to move the warning check later. We could defer 
to the end of the TU, but that seems more complicated then looking upwards one 
level. It is annoying that we can't borrow the propagation logic, though.

https://github.com/llvm/llvm-project/pull/143537
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to