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.
This commit is contained in:
Tex Riddell 2022-12-09 11:04:39 -08:00 коммит произвёл GitHub
Родитель 7ad9c9c032
Коммит bd1dc997f5
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 34 добавлений и 1 удалений

Просмотреть файл

@ -3276,7 +3276,7 @@ TreeTransform<Derived>::TransformNestedNameSpecifierLoc(
return NestedNameSpecifierLoc();
if (TL.getType()->isDependentType() || TL.getType()->isRecordType() ||
(SemaRef.getLangOpts().CPlusPlus11 &&
((SemaRef.getLangOpts().CPlusPlus11 || SemaRef.getLangOpts().HLSL) &&
TL.getType()->isEnumeralType())) {
assert(!TL.getType().hasLocalQualifiers() &&
"Can't get cv-qualifiers here");

Просмотреть файл

@ -0,0 +1,33 @@
// RUN: %dxc -T vs_6_0 -HV 2021 -ast-dump %s | FileCheck %s
// CHECK-NOT: error
// CHECK: FunctionDecl {{.*}} used genericDoStuff 'void (Foo)'
// CHECK-NEXT: TemplateArgument
// CHECK-NEXT: ParmVarDecl
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: CallExpr
// CHECK-NEXT: ImplicitCastExpr
// CHECK-NEXT: DeclRefExpr
// CHECK-NEXT: DeclRefExpr
// CHECK-SAME: 'Food' EnumConstant
// CHECK-SAME: 'Pizza' 'Food'
enum class Food { Pizza };
void write(Food f, uint val) {}
template <typename Generic>
void genericDoStuff(Generic g)
{
write(Food::Pizza, g.get());
}
class Foo {
uint get() { return 0; }
};
void main() {
Foo foo;
genericDoStuff(foo);
}