https://github.com/JustinStitt updated 
https://github.com/llvm/llvm-project/pull/152614

>From 590919c26c01c25bf7e0f16df37e3dd8d43bd2b2 Mon Sep 17 00:00:00 2001
From: Justin Stitt <justinst...@google.com>
Date: Thu, 7 Aug 2025 16:09:54 -0700
Subject: [PATCH 1/2] [CIR] Replace unreachable with diagnostic when not built
 with CLANG_ENABLE_CIR

Add a new frontend diagnostic that informs users with ill-equipped clang
binaries that they need to rebuild with -DCLANG_ENABLE_CIR=ON.

This requires adding some plumbing for the new `cir-support` lit option.

This improves the user experience as they may have a clang binary that
wasn't built with MLIR/CIR support and using `-emit-cir` results in an
unfriendly crash.
---
 clang/include/clang/Basic/DiagnosticFrontendKinds.td |  2 ++
 clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp |  3 ++-
 clang/test/Frontend/cir-not-built.c                  | 12 ++++++++++++
 clang/test/lit.cfg.py                                |  4 ++++
 4 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 clang/test/Frontend/cir-not-built.c

diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td 
b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index 8a8db27490f06..89bca11540147 100644
--- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -132,6 +132,8 @@ def err_fe_no_pch_in_dir : Error<
     "no suitable precompiled header file found in directory '%0'">;
 def err_fe_action_not_available : Error<
     "action %0 not compiled in">;
+def err_fe_cir_not_built : Error<"clang IR support not available, rebuild "
+                                 "clang with -DCLANG_ENABLE_CIR=ON">;
 def err_fe_invalid_multiple_actions : Error<
     "'%0' action ignored; '%1' action specified previously">;
 def err_fe_invalid_alignment : Error<
diff --git a/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp 
b/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
index 443eb4f1a29bf..67372a37c05f7 100644
--- a/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
+++ b/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
@@ -81,7 +81,8 @@ CreateFrontendBaseAction(CompilerInstance &CI) {
 #if CLANG_ENABLE_CIR
     return std::make_unique<cir::EmitCIRAction>();
 #else
-    llvm_unreachable("CIR suppport not built into clang");
+    CI.getDiagnostics().Report(diag::err_fe_cir_not_built);
+    return nullptr;
 #endif
   case EmitHTML:               return std::make_unique<HTMLPrintAction>();
   case EmitLLVM: {
diff --git a/clang/test/Frontend/cir-not-built.c 
b/clang/test/Frontend/cir-not-built.c
new file mode 100644
index 0000000000000..f9af2c4193b28
--- /dev/null
+++ b/clang/test/Frontend/cir-not-built.c
@@ -0,0 +1,12 @@
+// Test that using -emit-cir when clang is not built with CIR support gives a 
proper error message
+// instead of crashing.
+
+// This test should only run when CIR support is NOT enabled
+// REQUIRES: !cir-support
+
+// RUN: not %clang_cc1 -emit-cir %s 2>&1 | FileCheck %s
+// CHECK: error: clang IR support not available, rebuild clang with 
-DCLANG_ENABLE_CIR=ON
+
+int main(void) {
+  return 0;
+}
diff --git a/clang/test/lit.cfg.py b/clang/test/lit.cfg.py
index 1957bb1715eb6..4b2ecb0a6ca4c 100644
--- a/clang/test/lit.cfg.py
+++ b/clang/test/lit.cfg.py
@@ -224,6 +224,10 @@ def have_host_clang_repl_cuda():
         )
     )
 
+# ClangIR support
+if config.clang_enable_cir:
+    config.available_features.add("cir-support")
+
 llvm_config.add_tool_substitutions(tools, tool_dirs)
 
 config.substitutions.append(

>From 762c7f0e2753f738e689e99398c0e94559804313 Mon Sep 17 00:00:00 2001
From: Justin Stitt <justinst...@google.com>
Date: Fri, 8 Aug 2025 11:06:36 -0700
Subject: [PATCH 2/2] use UNSUPPORTED over REQUIRES in lit test

---
 clang/test/Frontend/cir-not-built.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/Frontend/cir-not-built.c 
b/clang/test/Frontend/cir-not-built.c
index f9af2c4193b28..57fbd280c6a45 100644
--- a/clang/test/Frontend/cir-not-built.c
+++ b/clang/test/Frontend/cir-not-built.c
@@ -2,7 +2,7 @@
 // instead of crashing.
 
 // This test should only run when CIR support is NOT enabled
-// REQUIRES: !cir-support
+// UNSUPPORTED: cir-support
 
 // RUN: not %clang_cc1 -emit-cir %s 2>&1 | FileCheck %s
 // CHECK: error: clang IR support not available, rebuild clang with 
-DCLANG_ENABLE_CIR=ON

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to