A guard variable in a COMDAT'd function should also be in a COMDAT.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226629
91177308-0d34-0410-b5e6-
96231b3b80d8
GV->getLinkage(), Zero, GuardName.str());
GI->Guard->setVisibility(GV->getVisibility());
GI->Guard->setDLLStorageClass(GV->getDLLStorageClass());
+ if (GI->Guard->isWeakForLinker())
+ GI->Guard->setComdat(
+ CGM.getModule().getOrInsertComdat(GI->Guard->getName()));
} else {
assert(GI->Guard->getLinkage() == GV->getLinkage() &&
"static local from the same function had different linkage");
return x++;
};
-// MSC-DAG: @"\01?x@?1??inlineStaticLocalsFunc@@YAHXZ@4HA" = weak_odr dllexport global i32 0
-// MSC-DAG: @"\01??_B?1??inlineStaticLocalsFunc@@YAHXZ@51" = weak_odr dllexport global i32 0
+// MSC-DAG: @"\01?x@?1??inlineStaticLocalsFunc@@YAHXZ@4HA" = weak_odr dllexport global i32 0, comdat
+// MSC-DAG: @"\01??_B?1??inlineStaticLocalsFunc@@YAHXZ@51" = weak_odr dllexport global i32 0, comdat
// Note: MinGW doesn't seem to export the static local here.
inline int __declspec(dllexport) inlineStaticLocalsFunc() {
static int x = f();