================
@@ -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.
----------------
Bigcheese wrote:

Really they are the same thing. It's not that they are common, they just have 
approximately the same semantics as inline.

I don't like the wording of "The intent of the above section seems to be" 
because it makes it sound like we don't actually know what the compiler is 
doing. We know it's disallowing multiple definitions of entities that are not 
allowed to have multiple definitions, and weak/selectany are just another way 
to allow multiple definitions.

https://github.com/llvm/llvm-project/pull/162713
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to