Skip to content

Commit bd1dc99

Browse files
authored
Fix enum scope used inside template function. (#4859)
While enums were introduced in HLSL 2017, this code should only be reached on HLSL if we are HLSL 2021 or greater, so an additional language version check does not appear necessary here.
1 parent 7ad9c9c commit bd1dc99

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

tools/clang/lib/Sema/TreeTransform.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3276,7 +3276,7 @@ TreeTransform<Derived>::TransformNestedNameSpecifierLoc(
32763276
return NestedNameSpecifierLoc();
32773277

32783278
if (TL.getType()->isDependentType() || TL.getType()->isRecordType() ||
3279-
(SemaRef.getLangOpts().CPlusPlus11 &&
3279+
((SemaRef.getLangOpts().CPlusPlus11 || SemaRef.getLangOpts().HLSL) &&
32803280
TL.getType()->isEnumeralType())) {
32813281
assert(!TL.getType().hasLocalQualifiers() &&
32823282
"Can't get cv-qualifiers here");
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// RUN: %dxc -T vs_6_0 -HV 2021 -ast-dump %s | FileCheck %s
2+
3+
// CHECK-NOT: error
4+
5+
// CHECK: FunctionDecl {{.*}} used genericDoStuff 'void (Foo)'
6+
// CHECK-NEXT: TemplateArgument
7+
// CHECK-NEXT: ParmVarDecl
8+
// CHECK-NEXT: CompoundStmt
9+
// CHECK-NEXT: CallExpr
10+
// CHECK-NEXT: ImplicitCastExpr
11+
// CHECK-NEXT: DeclRefExpr
12+
// CHECK-NEXT: DeclRefExpr
13+
// CHECK-SAME: 'Food' EnumConstant
14+
// CHECK-SAME: 'Pizza' 'Food'
15+
16+
enum class Food { Pizza };
17+
18+
void write(Food f, uint val) {}
19+
20+
template <typename Generic>
21+
void genericDoStuff(Generic g)
22+
{
23+
write(Food::Pizza, g.get());
24+
}
25+
26+
class Foo {
27+
uint get() { return 0; }
28+
};
29+
30+
void main() {
31+
Foo foo;
32+
genericDoStuff(foo);
33+
}

0 commit comments

Comments
 (0)