[clang] [libcxx] [Clang] Add __builtin_invoke and use it in libc++ (PR #116709)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Tue May 20 06:38:46 PDT 2025


================
@@ -5406,6 +5408,101 @@ ExprResult Sema::ConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo,
                                    RParenLoc, CurFPFeatureOverrides());
 }
 
+ExprResult Sema::BuiltinInvoke(CallExpr *TheCall) {
+  auto Loc = TheCall->getBeginLoc();
+  auto Args = MutableArrayRef(TheCall->getArgs(), TheCall->getNumArgs());
+  assert(llvm::none_of(Args,
+                       [](Expr *Arg) { return Arg->isTypeDependent(); }));
+
+  if (Args.size() == 0) {
+    Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least)
+        << 0 << 1 << 0 << 0 << TheCall->getSourceRange();
+    return ExprError();
+  }
+
+  auto FuncT = Args[0]->getType();
+
+  if (auto *MPT = FuncT->getAs<MemberPointerType>()) {
+    if (Args.size() < 2) {
+      Diag(TheCall->getBeginLoc(),
+            diag::err_typecheck_call_too_few_args_at_least)
+          << 0 << 2 << 1 << 0 << TheCall->getSourceRange();
----------------
erichkeane wrote:

Same here, we do the /*whatever=*/ pattern here.

https://github.com/llvm/llvm-project/pull/116709


More information about the cfe-commits mailing list