From: Anders Carlsson Date: Mon, 1 Dec 2008 02:42:14 +0000 (+0000) Subject: Change more code over to using the new Expr::Evaluate X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4b3f9c06d548d3de576441a91ef986c6840bd983;p=clang Change more code over to using the new Expr::Evaluate git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60323 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index 584cbc08c3..7f294e2996 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/lib/CodeGen/CGExprConstant.cpp @@ -388,12 +388,12 @@ public: // Binary operators llvm::Constant *VisitCallExpr(const CallExpr *E) { - APValue Result; + Expr::EvalResult Result; if (E->Evaluate(Result, CGM.getContext())) { - if (Result.isInt()) - return llvm::ConstantInt::get(Result.getInt()); - if (Result.isFloat()) - return llvm::ConstantFP::get(Result.getFloat()); + if (Result.Val.isInt()) + return llvm::ConstantInt::get(Result.Val.getInt()); + if (Result.Val.isFloat()) + return llvm::ConstantFP::get(Result.Val.getFloat()); } // Handle __builtin___CFStringMakeConstantString. @@ -622,16 +622,19 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, CodeGenFunction *CGF) { QualType type = Context.getCanonicalType(E->getType()); - APValue V; - if (E->Evaluate(V, Context)) { - // FIXME: Assert that the value doesn't have any side effects. - switch (V.getKind()) { + Expr::EvalResult Result; + + if (E->Evaluate(Result, Context)) { + assert(!Result.HasSideEffects && + "Constant expr should not have any side effects!"); + switch (Result.Val.getKind()) { default: assert(0 && "unhandled value kind!"); case APValue::LValue: { - llvm::Constant *Offset = llvm::ConstantInt::get(llvm::Type::Int64Ty, - V.getLValueOffset()); + llvm::Constant *Offset = + llvm::ConstantInt::get(llvm::Type::Int64Ty, + Result.Val.getLValueOffset()); - if (const Expr *LVBase = V.getLValueBase()) { + if (const Expr *LVBase = Result.Val.getLValueBase()) { llvm::Constant *C = ConstExprEmitter(*this, CGF).EmitLValue(const_cast(LVBase)); @@ -651,7 +654,7 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, getTypes().ConvertType(type)); } case APValue::Int: { - llvm::Constant *C = llvm::ConstantInt::get(V.getInt()); + llvm::Constant *C = llvm::ConstantInt::get(Result.Val.getInt()); if (C->getType() == llvm::Type::Int1Ty) { const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType()); @@ -660,12 +663,12 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, return C; } case APValue::Float: - return llvm::ConstantFP::get(V.getFloat()); + return llvm::ConstantFP::get(Result.Val.getFloat()); case APValue::ComplexFloat: { llvm::Constant *Complex[2]; - Complex[0] = llvm::ConstantFP::get(V.getComplexFloatReal()); - Complex[1] = llvm::ConstantFP::get(V.getComplexFloatImag()); + Complex[0] = llvm::ConstantFP::get(Result.Val.getComplexFloatReal()); + Complex[1] = llvm::ConstantFP::get(Result.Val.getComplexFloatImag()); return llvm::ConstantStruct::get(Complex, 2); }