Implement code generation for constant CFStrings.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41206 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp
index 0095bde..769fa5c 100644
--- a/CodeGen/CGBuiltin.cpp
+++ b/CodeGen/CGBuiltin.cpp
@@ -15,6 +15,7 @@
#include "CodeGenModule.h"
#include "clang/AST/Builtins.h"
#include "clang/AST/Expr.h"
+#include "llvm/Constant.h"
using namespace clang;
using namespace CodeGen;
@@ -22,6 +23,17 @@
RValue CodeGenFunction::EmitBuiltinExpr(unsigned builtinID, const CallExpr *E)
{
switch (builtinID) {
+ case Builtin::BI__builtin___CFStringMakeConstantString: {
+ const Expr *Arg = E->getArg(0);
+
+ while (const ParenExpr *PE = dyn_cast<const ParenExpr>(Arg))
+ Arg = PE->getSubExpr();
+
+ const StringLiteral *Literal = cast<const StringLiteral>(Arg);
+ std::string S(Literal->getStrData(), Literal->getByteLength());
+
+ return RValue::get(CGM.GetAddrOfConstantCFString(S));
+ }
default:
assert(0 && "Unknown builtin id");
}