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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user