Revise the implementation logic of sized deallocation: Do not automatically generate weak definitions of the sized operator delete (in terms of unsized operator delete). Instead, provide the funcitonality via a new compiler flag, -fdef-sized-delete.

The current implementation causes link-time ODR violations when the delete symbols are exported into the dynamic table.

llvm-svn: 229241
This commit is contained in:
Larisse Voufo
2015-02-14 05:42:57 +00:00
parent 0414b8578e
commit 5526f4f094
8 changed files with 38 additions and 17 deletions

View File

@@ -1615,13 +1615,13 @@ CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName,
// don't need it anymore).
addDeferredDeclToEmit(F, DDI->second);
DeferredDecls.erase(DDI);
// Otherwise, if this is a sized deallocation function, emit a weak
// definition
// for it at the end of the translation unit.
// definition for it at the end of the translation unit.
} else if (D && cast<FunctionDecl>(D)
->getCorrespondingUnsizedGlobalDeallocationFunction()) {
addDeferredDeclToEmit(F, GD);
if (getLangOpts().DefaultSizedDelete)
addDeferredDeclToEmit(F, GD);
// Otherwise, there are cases we have to worry about where we're
// using a declaration for which we must emit a definition but where