================ @@ -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); + + if (VD && VD->isStaticDataMember()) { + const CXXRecordDecl *Ctx = + dyn_cast_if_present<CXXRecordDecl>(VD->getDeclContext()); ---------------- zmodem wrote:
Same here: `VD->getDeclContext()` will never return null (there's always at least the TranslationUnitDecl) so this should be a regular `dyn_cast`. 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