diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/Expr.cpp | 156 | ||||
-rw-r--r-- | clang/lib/AST/StmtSerialization.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Analysis/CFRefCount.cpp | 16 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 30 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExprAgg.cpp | 3 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExprComplex.cpp | 4 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 57 |
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); |