diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-12-07 16:12:52 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-12-07 16:12:52 +0000 |
commit | 065c61b64629d5ad969c0708b66294b05ccf1cbd (patch) | |
tree | 81f07d697808c5b485a7d733fd23d3a6c485d277 /clang/lib/CodeGen/CGVTables.cpp | |
parent | c108676822ecfe986d5642bbfd59f2dd4d39c9b0 (diff) | |
download | bcm5719-llvm-065c61b64629d5ad969c0708b66294b05ccf1cbd.tar.gz bcm5719-llvm-065c61b64629d5ad969c0708b66294b05ccf1cbd.zip |
CodeGen: Don't emit linkage on thunks that aren't emitted because they're vararg.
This can happen when we're trying to emit a thunk with available_externally
linkage with optimization enabled but bail because it doesn't make sense
for vararg functions.
PR18098.
llvm-svn: 196658
Diffstat (limited to 'clang/lib/CodeGen/CGVTables.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGVTables.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index 2fda9263f99..81648cbef83 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/lib/CodeGen/CGVTables.cpp @@ -422,14 +422,15 @@ void CodeGenVTables::emitThunk(GlobalDecl GD, const ThunkInfo &Thunk, // expensive/sucky at the moment, so don't generate the thunk unless // we have to. // FIXME: Do something better here; GenerateVarArgsThunk is extremely ugly. - if (!UseAvailableExternallyLinkage) + if (!UseAvailableExternallyLinkage) { CodeGenFunction(CGM).GenerateVarArgsThunk(ThunkFn, FnInfo, GD, Thunk); + CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable); + } } else { // Normal thunk body generation. CodeGenFunction(CGM).GenerateThunk(ThunkFn, FnInfo, GD, Thunk); + CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable); } - - CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable); } void CodeGenVTables::maybeEmitThunkForVTable(GlobalDecl GD, |