Skip to content

Commit b73372b

Browse files
bharadwajyBharadwaj Yadavalli
authored andcommitted
Incorporate PR feedback
- Delete call to report_fatal_error and return std::nullopt. As a result appropriate unsupported SM version diagnostic is reported. - Add the requirement of SubArch to be set for a DXIL Triple to be deemed legal. - Add test to verify invalid profile error.
1 parent 5f02dab commit b73372b

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

clang/lib/Driver/ToolChains/HLSL.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "llvm/ADT/StringSwitch.h"
1515
#include "llvm/Support/ErrorHandling.h"
1616
#include "llvm/TargetParser/Triple.h"
17+
#include <optional>
1718
#include <string>
1819

1920
using namespace clang::driver;
@@ -37,6 +38,11 @@ bool isLegalShaderModel(Triple &T) {
3738
if (Version.getSubminor())
3839
return false;
3940

41+
// DXIL Version should be set as SubArch
42+
if (T.getSubArch() == Triple::NoSubArch) {
43+
return false;
44+
}
45+
4046
auto Kind = T.getEnvironment();
4147

4248
switch (Kind) {
@@ -136,9 +142,8 @@ std::optional<std::string> tryParseProfile(StringRef Profile) {
136142
break;
137143
}
138144
if (SubArch == llvm::Triple::NoSubArch) {
139-
report_fatal_error(
140-
"No DXIL version found for specified Shader Model version",
141-
/*gen_crash_diag*/ false);
145+
// No DXIL Version corresponding to specified Shader Model version found
146+
return std::nullopt;
142147
}
143148
T.setArch(Triple::ArchType::dxil, SubArch);
144149
T.setOSName(Triple::getOSTypeName(Triple::OSType::ShaderModel).str() +

clang/test/Driver/hlsl-lang-targets.hlsl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
// Invaliddxil target with no version number
4040
// RUN: not %clang -target dxil--shadermodel6.2-msvc %s -S -o /dev/null 2>&1 | FileCheck --check-prefix=CHECK-BAD-TARGET %s
4141

42+
// Invalid target profile
43+
// RUN: not %clang_dxc -Tlib_6_9 -fcgl -Fo - %s 2>&1 | FileCheck %s --check-prefix=CHECK-INVALID-PROFILE
44+
4245
// Non-dxil targets
4346
//
4447
// RUN: not %clang -target x86_64-unknown-unknown %s -S -o /dev/null 2>&1 | FileCheck --check-prefix=CHECK-BAD-TARGET %s
@@ -52,6 +55,7 @@
5255
// CHECK-BAD-ENV: error: shader stage '{{.*}}' in target '{{.*}}' is invalid for HLSL code generation
5356
// CHECK-BAD-ENV-DRV: error: version '{{.*}}' in target triple '{{.*}}' is invalid
5457
// CHECK-BAD-TARGET: error: HLSL code generation is unsupported for target '{{.*}}'
58+
// CHECK-INVALID-PROFILE: error: invalid profile : {{.*}}
5559

5660
[shader("pixel")]
5761
void main() {}

0 commit comments

Comments
 (0)