<div dir="ltr">Nice, thanks! A few notes:<br><br><div class="gmail_quote"><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">  return builtinID == Builtin::BI__builtin___CFStringMakeConstantString ||<br>

-         builtinID == Builtin::BI__builtin_classify_type;<br>
+         builtinID == Builtin::BI__builtin_classify_type ||<br>
+         builtinID == Builtin::BI__builtin_huge_valf;<br></blockquote><div><br>Quite a few builtins are treated as constant exprs. We should probably add another parameter to BUILTIN in Builtins.def to handle this instead of building a big disjunction here.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">+  llvm::Constant *VisitCallExpr(const CallExpr *E) {<br>
+    if (const ImplicitCastExpr *IcExpr =<br>
+        dyn_cast<const ImplicitCastExpr>(E->getCallee()))<br>
+      if (const DeclRefExpr *DRExpr =<br>
+          dyn_cast<const DeclRefExpr>(IcExpr->getSubExpr()))<br>
+        if (const FunctionDecl *FDecl =<br>
+            dyn_cast<const FunctionDecl>(DRExpr->getDecl()))<br>
+          if (unsigned builtinID = FDecl->getIdentifier()->getBuiltinID())<br>
+            return EmitBuiltinExpr(builtinID, E);<br>
+<br>
+    CGM.ErrorUnsupported(E, "constant call expression");<br>
+    return llvm::Constant::getNullValue(ConvertType(E->getType()));<br>
+  }</blockquote><div><br>This seems rather fragile and possibly broken. Two immediates issues:<br>(1) The cast is being ignored, which probably means we may end up emitting the wrong type.<br>(2) We also should handle the case when there is no ImplicitCastExpr of a builtin.<br>
<br> - Daniel<br><br></div></div></div>