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
