summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/Expr.cpp156
-rw-r--r--clang/lib/AST/StmtSerialization.cpp2
-rw-r--r--clang/lib/Analysis/CFRefCount.cpp16
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp2
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp30
-rw-r--r--clang/lib/CodeGen/CGExprAgg.cpp3
-rw-r--r--clang/lib/CodeGen/CGExprComplex.cpp4
-rw-r--r--clang/lib/CodeGen/CGExprScalar.cpp2
-rw-r--r--clang/lib/CodeGen/CodeGenFunction.h57
9 files changed, 91 insertions, 181 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 78c305051ee..496afd6457f 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -92,7 +92,7 @@ const char *UnaryOperator::getOpcodeStr(Opcode Op) {
CallExpr::CallExpr(Expr *fn, Expr **args, unsigned numargs, QualType t,
SourceLocation rparenloc)
: Expr(CallExprClass, t), NumArgs(numargs) {
- SubExprs = new Expr*[numargs+1];
+ SubExprs = new Stmt*[numargs+1];
SubExprs[FN] = fn;
for (unsigned i = 0; i != numargs; ++i)
SubExprs[i+ARGS_START] = args[i];
@@ -115,7 +115,7 @@ void CallExpr::setNumArgs(unsigned NumArgs) {
}
// Otherwise, we are growing the # arguments. New an bigger argument array.
- Expr **NewSubExprs = new Expr*[NumArgs+1];
+ Stmt **NewSubExprs = new Stmt*[NumArgs+1];
// Copy over args.
for (unsigned i = 0; i != getNumArgs()+ARGS_START; ++i)
NewSubExprs[i] = SubExprs[i];
@@ -1109,7 +1109,7 @@ ObjCMessageExpr::ObjCMessageExpr(Expr *receiver, Selector selInfo,
: Expr(ObjCMessageExprClass, retType), SelName(selInfo),
MethodProto(mproto) {
NumArgs = nargs;
- SubExprs = new Expr*[NumArgs+1];
+ SubExprs = new Stmt*[NumArgs+1];
SubExprs[RECEIVER] = receiver;
if (NumArgs) {
for (unsigned i = 0; i != NumArgs; ++i)
@@ -1128,7 +1128,7 @@ ObjCMessageExpr::ObjCMessageExpr(IdentifierInfo *clsName, Selector selInfo,
: Expr(ObjCMessageExprClass, retType), SelName(selInfo),
MethodProto(mproto) {
NumArgs = nargs;
- SubExprs = new Expr*[NumArgs+1];
+ SubExprs = new Stmt*[NumArgs+1];
SubExprs[RECEIVER] = (Expr*) ((uintptr_t) clsName | 0x1);
if (NumArgs) {
for (unsigned i = 0; i != NumArgs; ++i)
@@ -1184,7 +1184,7 @@ int64_t UnaryOperator::evaluateOffsetOf(ASTContext& C) const
assert(Opc == OffsetOf && "Unary operator not offsetof!");
unsigned CharSize = C.Target.getCharWidth();
- return ::evaluateOffsetOf(C, Val) / CharSize;
+ return ::evaluateOffsetOf(C, cast<Expr>(Val)) / CharSize;
}
//===----------------------------------------------------------------------===//
@@ -1196,22 +1196,12 @@ Stmt::child_iterator DeclRefExpr::child_begin() { return child_iterator(); }
Stmt::child_iterator DeclRefExpr::child_end() { return child_iterator(); }
// ObjCIvarRefExpr
-Stmt::child_iterator ObjCIvarRefExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Base);
-}
-
-Stmt::child_iterator ObjCIvarRefExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Base)+1;
-}
+Stmt::child_iterator ObjCIvarRefExpr::child_begin() { return &Base; }
+Stmt::child_iterator ObjCIvarRefExpr::child_end() { return &Base+1; }
// ObjCPropertyRefExpr
-Stmt::child_iterator ObjCPropertyRefExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Base);
-}
-
-Stmt::child_iterator ObjCPropertyRefExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Base)+1;
-}
+Stmt::child_iterator ObjCPropertyRefExpr::child_begin() { return &Base; }
+Stmt::child_iterator ObjCPropertyRefExpr::child_end() { return &Base+1; }
// ObjCSuperRefExpr
Stmt::child_iterator ObjCSuperRefExpr::child_begin() { return child_iterator();}
@@ -1234,32 +1224,20 @@ Stmt::child_iterator FloatingLiteral::child_begin() { return child_iterator(); }
Stmt::child_iterator FloatingLiteral::child_end() { return child_iterator(); }
// ImaginaryLiteral
-Stmt::child_iterator ImaginaryLiteral::child_begin() {
- return reinterpret_cast<Stmt**>(&Val);
-}
-Stmt::child_iterator ImaginaryLiteral::child_end() {
- return reinterpret_cast<Stmt**>(&Val)+1;
-}
+Stmt::child_iterator ImaginaryLiteral::child_begin() { return &Val; }
+Stmt::child_iterator ImaginaryLiteral::child_end() { return &Val+1; }
// StringLiteral
Stmt::child_iterator StringLiteral::child_begin() { return child_iterator(); }
Stmt::child_iterator StringLiteral::child_end() { return child_iterator(); }
// ParenExpr
-Stmt::child_iterator ParenExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Val);
-}
-Stmt::child_iterator ParenExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Val)+1;
-}
+Stmt::child_iterator ParenExpr::child_begin() { return &Val; }
+Stmt::child_iterator ParenExpr::child_end() { return &Val+1; }
// UnaryOperator
-Stmt::child_iterator UnaryOperator::child_begin() {
- return reinterpret_cast<Stmt**>(&Val);
-}
-Stmt::child_iterator UnaryOperator::child_end() {
- return reinterpret_cast<Stmt**>(&Val+1);
-}
+Stmt::child_iterator UnaryOperator::child_begin() { return &Val; }
+Stmt::child_iterator UnaryOperator::child_end() { return &Val+1; }
// SizeOfAlignOfTypeExpr
Stmt::child_iterator SizeOfAlignOfTypeExpr::child_begin() {
@@ -1276,74 +1254,54 @@ Stmt::child_iterator SizeOfAlignOfTypeExpr::child_end() {
// ArraySubscriptExpr
Stmt::child_iterator ArraySubscriptExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs);
+ return &SubExprs[0];
}
Stmt::child_iterator ArraySubscriptExpr::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
+ return &SubExprs[0]+END_EXPR;
}
// CallExpr
Stmt::child_iterator CallExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs[0]);
+ return &SubExprs[0];
}
Stmt::child_iterator CallExpr::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs[NumArgs+ARGS_START]);
+ return &SubExprs[0]+NumArgs+ARGS_START;
}
// MemberExpr
-Stmt::child_iterator MemberExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Base);
-}
-Stmt::child_iterator MemberExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Base)+1;
-}
+Stmt::child_iterator MemberExpr::child_begin() { return &Base; }
+Stmt::child_iterator MemberExpr::child_end() { return &Base+1; }
// ExtVectorElementExpr
-Stmt::child_iterator ExtVectorElementExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Base);
-}
-Stmt::child_iterator ExtVectorElementExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Base)+1;
-}
+Stmt::child_iterator ExtVectorElementExpr::child_begin() { return &Base; }
+Stmt::child_iterator ExtVectorElementExpr::child_end() { return &Base+1; }
// CompoundLiteralExpr
-Stmt::child_iterator CompoundLiteralExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Init);
-}
-Stmt::child_iterator CompoundLiteralExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Init)+1;
-}
+Stmt::child_iterator CompoundLiteralExpr::child_begin() { return &Init; }
+Stmt::child_iterator CompoundLiteralExpr::child_end() { return &Init+1; }
// ImplicitCastExpr
-Stmt::child_iterator ImplicitCastExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Op);
-}
-Stmt::child_iterator ImplicitCastExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Op)+1;
-}
+Stmt::child_iterator ImplicitCastExpr::child_begin() { return &Op; }
+Stmt::child_iterator ImplicitCastExpr::child_end() { return &Op+1; }
// CastExpr
-Stmt::child_iterator CastExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Op);
-}
-Stmt::child_iterator CastExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Op)+1;
-}
+Stmt::child_iterator CastExpr::child_begin() { return &Op; }
+Stmt::child_iterator CastExpr::child_end() { return &Op+1; }
// BinaryOperator
Stmt::child_iterator BinaryOperator::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs);
+ return &SubExprs[0];
}
Stmt::child_iterator BinaryOperator::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
+ return &SubExprs[0]+END_EXPR;
}
// ConditionalOperator
Stmt::child_iterator ConditionalOperator::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs);
+ return &SubExprs[0];
}
Stmt::child_iterator ConditionalOperator::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
+ return &SubExprs[0]+END_EXPR;
}
// AddrLabelExpr
@@ -1351,12 +1309,8 @@ Stmt::child_iterator AddrLabelExpr::child_begin() { return child_iterator(); }
Stmt::child_iterator AddrLabelExpr::child_end() { return child_iterator(); }
// StmtExpr
-Stmt::child_iterator StmtExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&SubStmt);
-}
-Stmt::child_iterator StmtExpr::child_end() {
- return reinterpret_cast<Stmt**>(&SubStmt)+1;
-}
+Stmt::child_iterator StmtExpr::child_begin() { return &SubStmt; }
+Stmt::child_iterator StmtExpr::child_end() { return &SubStmt+1; }
// TypesCompatibleExpr
Stmt::child_iterator TypesCompatibleExpr::child_begin() {
@@ -1368,47 +1322,31 @@ Stmt::child_iterator TypesCompatibleExpr::child_end() {
}
// ChooseExpr
-Stmt::child_iterator ChooseExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs);
-}
-
-Stmt::child_iterator ChooseExpr::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
-}
+Stmt::child_iterator ChooseExpr::child_begin() { return &SubExprs[0]; }
+Stmt::child_iterator ChooseExpr::child_end() { return &SubExprs[0]+END_EXPR; }
// OverloadExpr
-Stmt::child_iterator OverloadExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs[0]);
-}
-Stmt::child_iterator OverloadExpr::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs[NumExprs]);
-}
+Stmt::child_iterator OverloadExpr::child_begin() { return &SubExprs[0]; }
+Stmt::child_iterator OverloadExpr::child_end() { return &SubExprs[0]+NumExprs; }
// ShuffleVectorExpr
Stmt::child_iterator ShuffleVectorExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs[0]);
+ return &SubExprs[0];
}
Stmt::child_iterator ShuffleVectorExpr::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs[NumExprs]);
+ return &SubExprs[0]+NumExprs;
}
// VAArgExpr
-Stmt::child_iterator VAArgExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&Val);
-}
-
-Stmt::child_iterator VAArgExpr::child_end() {
- return reinterpret_cast<Stmt**>(&Val)+1;
-}
+Stmt::child_iterator VAArgExpr::child_begin() { return &Val; }
+Stmt::child_iterator VAArgExpr::child_end() { return &Val+1; }
// InitListExpr
Stmt::child_iterator InitListExpr::child_begin() {
- return reinterpret_cast<Stmt**>(InitExprs.size() ?
- &InitExprs[0] : 0);
+ return InitExprs.size() ? &InitExprs[0] : 0;
}
Stmt::child_iterator InitListExpr::child_end() {
- return reinterpret_cast<Stmt**>(InitExprs.size() ?
- &InitExprs[0] + InitExprs.size() : 0);
+ return InitExprs.size() ? &InitExprs[0] + InitExprs.size() : 0;
}
// ObjCStringLiteral
@@ -1441,9 +1379,9 @@ Stmt::child_iterator ObjCProtocolExpr::child_end() {
// ObjCMessageExpr
Stmt::child_iterator ObjCMessageExpr::child_begin() {
- return reinterpret_cast<Stmt**>(&SubExprs[ getReceiver() ? 0 : ARGS_START ]);
+ return getReceiver() ? &SubExprs[0] : &SubExprs[0] + ARGS_START;
}
Stmt::child_iterator ObjCMessageExpr::child_end() {
- return reinterpret_cast<Stmt**>(&SubExprs[getNumArgs()+ARGS_START]);
+ return &SubExprs[0]+ARGS_START+getNumArgs();
}
diff --git a/clang/lib/AST/StmtSerialization.cpp b/clang/lib/AST/StmtSerialization.cpp
index 6fcc1ef4282..cc794f0c8d7 100644
--- a/clang/lib/AST/StmtSerialization.cpp
+++ b/clang/lib/AST/StmtSerialization.cpp
@@ -338,7 +338,7 @@ CallExpr* CallExpr::CreateImpl(Deserializer& D, ASTContext& C) {
QualType t = QualType::ReadVal(D);
SourceLocation L = SourceLocation::ReadVal(D);
unsigned NumArgs = D.ReadInt();
- Expr** SubExprs = new Expr*[NumArgs+1];
+ Stmt** SubExprs = new Stmt*[NumArgs+1];
D.BatchReadOwnedPtrs(NumArgs+1, SubExprs, C);
return new CallExpr(SubExprs,NumArgs,t,L);
diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp
index 24971edcdde..7207c133ade 100644
--- a/clang/lib/Analysis/CFRefCount.cpp
+++ b/clang/lib/Analysis/CFRefCount.cpp
@@ -194,10 +194,10 @@ public:
return Receiver;
}
- typedef ArgEffects::const_iterator arg_iterator;
+ typedef ArgEffects::const_iterator ExprIterator;
- arg_iterator begin_args() const { return Args->begin(); }
- arg_iterator end_args() const { return Args->end(); }
+ ExprIterator begin_args() const { return Args->begin(); }
+ ExprIterator end_args() const { return Args->end(); }
static void Profile(llvm::FoldingSetNodeID& ID, ArgEffects* A,
RetEffect RetEff, ArgEffect DefaultEff,
@@ -998,7 +998,7 @@ public:
Expr* Ex,
Expr* Receiver,
RetainSummary* Summ,
- Expr** arg_beg, Expr** arg_end,
+ ExprIterator arg_beg, ExprIterator arg_end,
ExplodedNode<ValueState>* Pred);
virtual void EvalCall(ExplodedNodeSet<ValueState>& Dst,
@@ -1129,7 +1129,7 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<ValueState>& Dst,
Expr* Ex,
Expr* Receiver,
RetainSummary* Summ,
- Expr** arg_beg, Expr** arg_end,
+ ExprIterator arg_beg, ExprIterator arg_end,
ExplodedNode<ValueState>* Pred) {
@@ -1146,7 +1146,7 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<ValueState>& Dst,
Expr* ErrorExpr = NULL;
SymbolID ErrorSym = 0;
- for (Expr **I = arg_beg, **E = arg_end; I != E; ++I, ++idx) {
+ for (ExprIterator I = arg_beg; I != arg_end; ++I, ++idx) {
RVal V = StateMgr.GetRVal(St, *I);
@@ -1235,9 +1235,9 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<ValueState>& Dst,
case RetEffect::Alias: {
unsigned idx = RE.getValue();
- assert ((arg_end - arg_beg) >= 0);
+ assert (arg_end >= arg_beg);
assert (idx < (unsigned) (arg_end - arg_beg));
- RVal V = StateMgr.GetRVal(St, arg_beg[idx]);
+ RVal V = StateMgr.GetRVal(St, *(arg_beg+idx));
St = StateMgr.SetRVal(St, Ex, V, Eng.getCFG().isBlkExpr(Ex), false);
break;
}
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index f8132f417de..cd6b742b625 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -42,7 +42,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E) {
if (getContext().BuiltinInfo.isLibFunction(BuiltinID))
return EmitCallExpr(CGM.getBuiltinLibFunction(BuiltinID),
E->getCallee()->getType(), E->arg_begin(),
- E->getNumArgs());
+ E->arg_end());
// See if we have a target specific intrinsic.
Intrinsic::ID IntrinsicID;
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 05a8972a404..5856531f433 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -650,13 +650,15 @@ RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) {
llvm::Value *Callee = EmitScalarExpr(E->getCallee());
return EmitCallExpr(Callee, E->getCallee()->getType(),
- E->arg_begin(), E->getNumArgs());
+ E->arg_begin(), E->arg_end());
}
-RValue CodeGenFunction::EmitCallExpr(Expr *FnExpr, Expr *const *Args,
- unsigned NumArgs) {
+RValue CodeGenFunction::EmitCallExpr(Expr *FnExpr,
+ CallExpr::const_arg_iterator ArgBeg,
+ CallExpr::const_arg_iterator ArgEnd) {
+
llvm::Value *Callee = EmitScalarExpr(FnExpr);
- return EmitCallExpr(Callee, FnExpr->getType(), Args, NumArgs);
+ return EmitCallExpr(Callee, FnExpr->getType(), ArgBeg, ArgEnd);
}
LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) {
@@ -702,7 +704,9 @@ LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) {
}
RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType,
- Expr *const *ArgExprs, unsigned NumArgs) {
+ CallExpr::const_arg_iterator ArgBeg,
+ CallExpr::const_arg_iterator ArgEnd) {
+
// The callee type will always be a pointer to function type, get the function
// type.
FnType = cast<PointerType>(FnType.getCanonicalType())->getPointeeType();
@@ -718,20 +722,20 @@ RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType,
// FIXME: set the stret attribute on the argument.
}
- for (unsigned i = 0, e = NumArgs; i != e; ++i) {
- QualType ArgTy = ArgExprs[i]->getType();
+ for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I) {
+ QualType ArgTy = I->getType();
if (!hasAggregateLLVMType(ArgTy)) {
// Scalar argument is passed by-value.
- Args.push_back(EmitScalarExpr(ArgExprs[i]));
+ Args.push_back(EmitScalarExpr(*I));
} else if (ArgTy->isAnyComplexType()) {
// Make a temporary alloca to pass the argument.
llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy));
- EmitComplexExprIntoAddr(ArgExprs[i], DestMem, false);
+ EmitComplexExprIntoAddr(*I, DestMem, false);
Args.push_back(DestMem);
} else {
llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy));
- EmitAggExpr(ArgExprs[i], DestMem, false);
+ EmitAggExpr(*I, DestMem, false);
Args.push_back(DestMem);
}
}
@@ -744,8 +748,10 @@ RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType,
ParamAttrList.push_back(
llvm::ParamAttrsWithIndex::get(1, llvm::ParamAttr::StructRet));
unsigned increment = hasAggregateLLVMType(ResultType) ? 2 : 1;
- for (unsigned i = 0; i < NumArgs; i++) {
- QualType ParamType = ArgExprs[i]->getType();
+
+ unsigned i = 0;
+ for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I, ++i) {
+ QualType ParamType = I->getType();
unsigned ParamAttrs = 0;
if (ParamType->isRecordType())
ParamAttrs |= llvm::ParamAttr::ByVal;
diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp
index 924a5cf46d8..748ddde7b7e 100644
--- a/clang/lib/CodeGen/CGExprAgg.cpp
+++ b/clang/lib/CodeGen/CGExprAgg.cpp
@@ -206,7 +206,8 @@ void AggExprEmitter::VisitCallExpr(const CallExpr *E)
void AggExprEmitter::VisitOverloadExpr(const OverloadExpr *E)
{
RValue RV = CGF.EmitCallExpr(E->getFn(), E->arg_begin(),
- E->getNumArgs(CGF.getContext()));
+ E->arg_end(CGF.getContext()));
+
assert(RV.isAggregate() && "Return value must be aggregate value!");
// If the result is ignored, don't copy from the value.
diff --git a/clang/lib/CodeGen/CGExprComplex.cpp b/clang/lib/CodeGen/CGExprComplex.cpp
index 8a8e7986770..6bf0d48c1ec 100644
--- a/clang/lib/CodeGen/CGExprComplex.cpp
+++ b/clang/lib/CodeGen/CGExprComplex.cpp
@@ -246,8 +246,8 @@ ComplexPairTy ComplexExprEmitter::VisitCallExpr(const CallExpr *E) {
}
ComplexPairTy ComplexExprEmitter::VisitOverloadExpr(const OverloadExpr *E) {
- return CGF.EmitCallExpr(E->getFn(), E->arg_begin(),
- E->getNumArgs(CGF.getContext())).getComplexVal();
+ return CGF.EmitCallExpr(E->getFn(), E->arg_begin(),
+ E->arg_end(CGF.getContext())).getComplexVal();
}
ComplexPairTy ComplexExprEmitter::VisitStmtExpr(const StmtExpr *E) {
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp
index ea92828f729..47bbd8827d4 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/lib/CodeGen/CGExprScalar.cpp
@@ -1095,7 +1095,7 @@ Value *ScalarExprEmitter::VisitChooseExpr(ChooseExpr *E) {
Value *ScalarExprEmitter::VisitOverloadExpr(OverloadExpr *E) {
return CGF.EmitCallExpr(E->getFn(), E->arg_begin(),
- E->getNumArgs(CGF.getContext())).getScalarVal();
+ E->arg_end(CGF.getContext())).getScalarVal();
}
Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE) {
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h
index 313d2d1829a..6712d2f05f1 100644
--- a/clang/lib/CodeGen/CodeGenFunction.h
+++ b/clang/lib/CodeGen/CodeGenFunction.h
@@ -18,6 +18,9 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/IRBuilder.h"
+#include "clang/AST/Expr.h"
+#include "clang/AST/ExprObjC.h"
+
#include <vector>
namespace llvm {
@@ -31,50 +34,7 @@ namespace clang {
class ObjCMethodDecl;
class TargetInfo;
class FunctionTypeProto;
-
- class Stmt;
- class CompoundStmt;
- class LabelStmt;
- class GotoStmt;
- class IfStmt;
- class WhileStmt;
- class DoStmt;
- class ForStmt;
- class ReturnStmt;
- class DeclStmt;
- class CaseStmt;
- class DefaultStmt;
- class SwitchStmt;
- class AsmStmt;
-
- class Expr;
- class DeclRefExpr;
- class StringLiteral;
- class IntegerLiteral;
- class FloatingLiteral;
- class CharacterLiteral;
- class TypesCompatibleExpr;
-
- class ImplicitCastExpr;
- class CastExpr;
- class CallExpr;
- class UnaryOperator;
- class BinaryOperator;
- class CompoundAssignOperator;
- class ArraySubscriptExpr;
- class ExtVectorElementExpr;
- class ConditionalOperator;
- class ChooseExpr;
- class PreDefinedExpr;
- class ObjCStringLiteral;
- class ObjCIvarRefExpr;
- class MemberExpr;
- class CompoundLiteralExpr;
-
- class VarDecl;
- class EnumConstantDecl;
- class ParmVarDecl;
- class FieldDecl;
+
namespace CodeGen {
class CodeGenModule;
class CodeGenTypes;
@@ -468,9 +428,14 @@ public:
//===--------------------------------------------------------------------===//
RValue EmitCallExpr(const CallExpr *E);
- RValue EmitCallExpr(Expr *FnExpr, Expr *const *Args, unsigned NumArgs);
+
+ RValue EmitCallExpr(Expr *FnExpr, CallExpr::const_arg_iterator ArgBeg,
+ CallExpr::const_arg_iterator ArgEnd);
+
RValue EmitCallExpr(llvm::Value *Callee, QualType FnType,
- Expr *const *Args, unsigned NumArgs);
+ CallExpr::const_arg_iterator ArgBeg,
+ CallExpr::const_arg_iterator ArgEnd);
+
RValue EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
OpenPOWER on IntegriCloud