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:
@@ -891,8 +891,11 @@ void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn,
|
||||
} else if (FunctionDecl *UnsizedDealloc =
|
||||
FD->getCorrespondingUnsizedGlobalDeallocationFunction()) {
|
||||
// Global sized deallocation functions get an implicit weak definition if
|
||||
// they don't have an explicit definition.
|
||||
// they don't have an explicit definition, if allowed.
|
||||
assert(getLangOpts().DefaultSizedDelete &&
|
||||
"Can't emit unallowed definition.");
|
||||
EmitSizedDeallocationFunction(*this, UnsizedDealloc);
|
||||
|
||||
} else
|
||||
llvm_unreachable("no definition for emitted function");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user