diff options
Diffstat (limited to 'CodeGen')
-rw-r--r-- | CodeGen/CGBuiltin.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp index ecac12b1f4..8cdf0685ca 100644 --- a/CodeGen/CGBuiltin.cpp +++ b/CodeGen/CGBuiltin.cpp @@ -40,8 +40,14 @@ RValue CodeGenFunction::EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E) { case Builtin::BI__builtin___CFStringMakeConstantString: { const Expr *Arg = E->getArg(0); - while (const ParenExpr *PE = dyn_cast<ParenExpr>(Arg)) - Arg = PE->getSubExpr(); + while (1) { + if (const ParenExpr *PE = dyn_cast<ParenExpr>(Arg)) + Arg = PE->getSubExpr(); + else if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(Arg)) + Arg = CE->getSubExpr(); + else + break; + } const StringLiteral *Literal = cast<StringLiteral>(Arg); std::string S(Literal->getStrData(), Literal->getByteLength()); @@ -71,6 +77,14 @@ RValue CodeGenFunction::EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E) { return RValue::get(llvm::ConstantInt::get(Result)); } + case Builtin::BI__builtin_constant_p: { + llvm::APSInt Result(32); + + // FIXME: Analyze the parameter and check if it is a constant. + Result = 0; + + return RValue::get(llvm::ConstantInt::get(Result)); + } } return RValue::get(0); |