diff options
author | Adrian Prantl <aprantl@apple.com> | 2013-07-26 20:42:57 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2013-07-26 20:42:57 +0000 |
commit | ca64c3e136f08a135d6031d1940a63dd071be5b3 (patch) | |
tree | 1843628e98a60fae0d90a137dd37233250b42245 /clang/lib/CodeGen/CGExpr.cpp | |
parent | 39b1a26aeb13c75a4d1c5e63843bd1dc9a37143f (diff) | |
download | bcm5719-llvm-ca64c3e136f08a135d6031d1940a63dd071be5b3.tar.gz bcm5719-llvm-ca64c3e136f08a135d6031d1940a63dd071be5b3.zip |
Debug Info / EmitCallArgs: arguments may modify the debug location.
Restore it after each argument is emitted. This fixes the scope info for
inlined subroutines inside of function argument expressions. (E.g.,
anything STL).
rdar://problem/12592135
llvm-svn: 187240
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index ad80afd8bad..73824afc17e 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -3096,8 +3096,15 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee, const FunctionType *FnType = cast<FunctionType>(cast<PointerType>(CalleeType)->getPointeeType()); + // Force column info to differentiate multiple inlined call sites on + // the same line, analoguous to EmitCallExpr. + bool ForceColumnInfo = false; + if (const FunctionDecl* FD = dyn_cast_or_null<const FunctionDecl>(TargetDecl)) + ForceColumnInfo = FD->isInlineSpecified(); + CallArgList Args; - EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd); + EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd, + ForceColumnInfo); const CGFunctionInfo &FnInfo = CGM.getTypes().arrangeFreeFunctionCall(Args, FnType); |