diff options
Diffstat (limited to 'clang/lib/CodeGen/CGExprScalar.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 487cfcc57bf..a4c65c087f9 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -1149,8 +1149,14 @@ Value *ScalarExprEmitter::VisitOverloadExpr(OverloadExpr *E) {  Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE) {    llvm::Value *ArgValue = EmitLValue(VE->getSubExpr()).getAddress(); -  llvm::Value *V = Builder.CreateVAArg(ArgValue, ConvertType(VE->getType()));   -  return V; +  llvm::Value *ArgPtr = CGF.EmitVAArg(ArgValue, VE->getType()); + +  // If EmitVAArg fails, we fall back to the LLVM instruction. +  if (!ArgPtr)  +    return Builder.CreateVAArg(ArgValue, ConvertType(VE->getType())); + +  // FIXME: volatile? +  return Builder.CreateLoad(ArgPtr);  }  Value *ScalarExprEmitter::VisitObjCEncodeExpr(const ObjCEncodeExpr *E) { | 

