summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGVTables.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2013-12-07 16:12:52 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2013-12-07 16:12:52 +0000
commit065c61b64629d5ad969c0708b66294b05ccf1cbd (patch)
tree81f07d697808c5b485a7d733fd23d3a6c485d277 /clang/lib/CodeGen/CGVTables.cpp
parentc108676822ecfe986d5642bbfd59f2dd4d39c9b0 (diff)
downloadbcm5719-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.cpp7
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,
OpenPOWER on IntegriCloud