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");
   }