[clang] Allow weak/selectany external definitions in header units. (PR #162713)

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 14 22:22:03 PDT 2025


================
@@ -13822,7 +13822,10 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {
       !VDecl->isInvalidDecl() && VDecl->isThisDeclarationADefinition() &&
       VDecl->getFormalLinkage() == Linkage::External && !VDecl->isInline() &&
       !VDecl->isTemplated() && !isa<VarTemplateSpecializationDecl>(VDecl) &&
-      !VDecl->getInstantiatedFromStaticDataMember()) {
+      !VDecl->getInstantiatedFromStaticDataMember() &&
+      // The intent of the above section seems to be to prevent ODR issues.
+      // Weak symbols do the same but are not part of the c++ spec.
----------------
ChuanqiXu9 wrote:

I feel better to have "we choose to permit entities with weak and selectany attribute as they are common in headers in practice."

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


More information about the cfe-commits mailing list