https://github.com/PrabbyDD created 
https://github.com/llvm/llvm-project/pull/190840

Fixes issue #189964

>From 18508d94e3cde9cf47fa11fcc28803cc7966c5e4 Mon Sep 17 00:00:00 2001
From: PrabbyDD <[email protected]>
Date: Mon, 6 Apr 2026 15:43:31 -0700
Subject: [PATCH 1/2] first PR attempt on SPIRV diagnositic

---
 clang/include/clang/Basic/DiagnosticFrontendKinds.td |  3 +++
 clang/lib/Frontend/CompilerInstance.cpp              | 11 +++++++++++
 2 files changed, 14 insertions(+)

diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td 
b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index 62b74574102e4..7fa858c0d50be 100644
--- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -43,6 +43,9 @@ def note_fe_backend_resource_limit: Note<"%0 (%1) exceeds 
limit (%2) in '%3'">,
 def remark_fe_backend_plugin: Remark<"%0">, BackendInfo, 
InGroup<RemarkBackendPlugin>;
 def note_fe_backend_plugin: Note<"%0">, BackendInfo;
 
+def err_spirv_requires_vulkan : Error
+    "SPIR-V target requires a Vulkan environment, e.g. '-target 
spirv64-unknown-vulkan1.3'">;
+
 def warn_fe_override_module : Warning<
     "overriding the module target triple with %0">,
     InGroup<DiagGroup<"override-module">>;
diff --git a/clang/lib/Frontend/CompilerInstance.cpp 
b/clang/lib/Frontend/CompilerInstance.cpp
index 0b00ad7128c00..89898d3adfbae 100644
--- a/clang/lib/Frontend/CompilerInstance.cpp
+++ b/clang/lib/Frontend/CompilerInstance.cpp
@@ -112,6 +112,17 @@ void CompilerInstance::setTarget(TargetInfo *Value) { 
Target = Value; }
 void CompilerInstance::setAuxTarget(TargetInfo *Value) { AuxTarget = Value; }
 
 bool CompilerInstance::createTarget() {
+
+  // Validate Vulkan environment for SPIRV. 
+  llvm::Triple Triple(getInvocation().getTargetOpts().Triple);
+  if (Triple.getArch() == llvm::Triple::spirv) {
+    if (Triple.getOS() != llvm::Triple::Vulkan ||
+        Triple.getVulkanVersion() == llvm::VersionTuple(0)) {
+      getDiagnostics().Report(diag::err_spirv_requires_vulkan) << Triple.str();
+      return false;
+    }
+  }
+
   // Create the target instance.
   setTarget(TargetInfo::CreateTargetInfo(getDiagnostics(),
                                          getInvocation().getTargetOpts()));

>From 2b0276129061915fc82c1639439c7b733215e196 Mon Sep 17 00:00:00 2001
From: PrabbyDD <[email protected]>
Date: Tue, 7 Apr 2026 13:04:38 -0700
Subject: [PATCH 2/2] [clang] generate diagnostic error instead of assert for
 invalid SPIR-V target for release

When a user passes '-target spirv' without specififying a vulkan environment 
ttriple, SPIRVTargetInfo will fire an assert instead of throwing an error 
diagnostic. Added this diagnostic in CompilerInstance::createTarget() before 
target is initialized. Fixes #189964
---
 clang/include/clang/Basic/DiagnosticFrontendKinds.td | 4 ++--
 clang/test/Driver/spirv-target-validation.c          | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/Driver/spirv-target-validation.c

diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td 
b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index 7fa858c0d50be..0a3e4e82a79e5 100644
--- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -43,8 +43,8 @@ def note_fe_backend_resource_limit: Note<"%0 (%1) exceeds 
limit (%2) in '%3'">,
 def remark_fe_backend_plugin: Remark<"%0">, BackendInfo, 
InGroup<RemarkBackendPlugin>;
 def note_fe_backend_plugin: Note<"%0">, BackendInfo;
 
-def err_spirv_requires_vulkan : Error
-    "SPIR-V target requires a Vulkan environment, e.g. '-target 
spirv64-unknown-vulkan1.3'">;
+def err_spirv_requires_vulkan : Error<
+    "SPIR-V target requires a Vulkan environment (e.g. '-target 
spirv64-unknown-vulkan1.3')">;
 
 def warn_fe_override_module : Warning<
     "overriding the module target triple with %0">,
diff --git a/clang/test/Driver/spirv-target-validation.c 
b/clang/test/Driver/spirv-target-validation.c
new file mode 100644
index 0000000000000..cde5b46c54b94
--- /dev/null
+++ b/clang/test/Driver/spirv-target-validation.c
@@ -0,0 +1,4 @@
+// RUN: %clang -target spirv %s 2>&1 | FileCheck %s
+// CHECK: error: SPIR-V target requires a Vulkan environment
+
+int main() { return 0; }
\ No newline at end of file

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to