]> granicus.if.org Git - clang/commitdiff
Stub out codegen for __builtin_constant_p. Remove any implicit cast exprs in the...
authorAnders Carlsson <andersca@mac.com>
Thu, 1 Nov 2007 00:39:26 +0000 (00:39 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 1 Nov 2007 00:39:26 +0000 (00:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43592 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGBuiltin.cpp

index ecac12b1f4b37938428591cc65ae763d0235d38a..8cdf0685ca8dff6e35fc853714377804dba2408a 100644 (file)
@@ -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);