llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-driver

Author: PrabbyDD

<details>
<summary>Changes</summary>

Fixes issue #<!-- -->189964

---
Full diff: https://github.com/llvm/llvm-project/pull/190840.diff


3 Files Affected:

- (modified) clang/include/clang/Basic/DiagnosticFrontendKinds.td (+3) 
- (modified) clang/lib/Frontend/CompilerInstance.cpp (+11) 
- (added) clang/test/Driver/spirv-target-validation.c (+4) 


``````````diff
diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td 
b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index 62b74574102e4..0a3e4e82a79e5 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()));
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

``````````

</details>


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

Reply via email to