Author: Sarah Spall Date: 2025-03-10T11:19:45-07:00 New Revision: 431eaa8deb4ea1cbe079a29126f9559e4716f00d
URL: https://github.com/llvm/llvm-project/commit/431eaa8deb4ea1cbe079a29126f9559e4716f00d DIFF: https://github.com/llvm/llvm-project/commit/431eaa8deb4ea1cbe079a29126f9559e4716f00d.diff LOG: [HLSL] make semantic matching case insensitive (#129773) Make semantic matching case insensitive update tests to reflect semantic printed as all lower case in error messages add new tests to show case insensitivity Closes #128063 Added: clang/test/TableGen/HLSLAttribute-errors.td Modified: clang/include/clang/Basic/Attr.td clang/lib/Basic/Attributes.cpp clang/lib/Sema/SemaHLSL.cpp clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl clang/utils/TableGen/ClangAttrEmitter.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 4b4337cf460f3..4d34346460561 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -4717,21 +4717,21 @@ def HLSLNumThreads: InheritableAttr { } def HLSLSV_GroupThreadID: HLSLAnnotationAttr { - let Spellings = [HLSLAnnotation<"SV_GroupThreadID">]; + let Spellings = [HLSLAnnotation<"sv_groupthreadid">]; let Subjects = SubjectList<[ParmVar, Field]>; let LangOpts = [HLSL]; let Documentation = [HLSLSV_GroupThreadIDDocs]; } def HLSLSV_GroupID: HLSLAnnotationAttr { - let Spellings = [HLSLAnnotation<"SV_GroupID">]; + let Spellings = [HLSLAnnotation<"sv_groupid">]; let Subjects = SubjectList<[ParmVar, Field]>; let LangOpts = [HLSL]; let Documentation = [HLSLSV_GroupIDDocs]; } def HLSLSV_GroupIndex: HLSLAnnotationAttr { - let Spellings = [HLSLAnnotation<"SV_GroupIndex">]; + let Spellings = [HLSLAnnotation<"sv_groupindex">]; let Subjects = SubjectList<[ParmVar, GlobalVar]>; let LangOpts = [HLSL]; let Documentation = [HLSLSV_GroupIndexDocs]; @@ -4783,7 +4783,7 @@ def HLSLPackOffset: HLSLAnnotationAttr { } def HLSLSV_DispatchThreadID: HLSLAnnotationAttr { - let Spellings = [HLSLAnnotation<"SV_DispatchThreadID">]; + let Spellings = [HLSLAnnotation<"sv_dispatchthreadid">]; let Subjects = SubjectList<[ParmVar, Field]>; let LangOpts = [HLSL]; let Documentation = [HLSLSV_DispatchThreadIDDocs]; diff --git a/clang/lib/Basic/Attributes.cpp b/clang/lib/Basic/Attributes.cpp index 2035d4c0a5768..6a070a99c8d96 100644 --- a/clang/lib/Basic/Attributes.cpp +++ b/clang/lib/Basic/Attributes.cpp @@ -143,13 +143,17 @@ static SmallString<64> normalizeName(const IdentifierInfo *Name, StringRef ScopeName = normalizeAttrScopeName(Scope, SyntaxUsed); StringRef AttrName = normalizeAttrName(Name, ScopeName, SyntaxUsed); + std::string StrAttrName = AttrName.str(); + if (SyntaxUsed == AttributeCommonInfo::AS_HLSLAnnotation) + StrAttrName = AttrName.lower(); + SmallString<64> FullName = ScopeName; if (!ScopeName.empty()) { assert(SyntaxUsed == AttributeCommonInfo::AS_CXX11 || SyntaxUsed == AttributeCommonInfo::AS_C23); FullName += "::"; } - FullName += AttrName; + FullName += StrAttrName; return FullName; } diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp index 2e6a333f3d768..124dbc2771f94 100644 --- a/clang/lib/Sema/SemaHLSL.cpp +++ b/clang/lib/Sema/SemaHLSL.cpp @@ -752,7 +752,7 @@ void SemaHLSL::DiagnoseAttrStageMismatch( HLSLShaderAttr::ConvertEnvironmentTypeToStr(ST)); }); Diag(A->getLoc(), diag::err_hlsl_attr_unsupported_in_stage) - << A << llvm::Triple::getEnvironmentTypeName(Stage) + << A->getAttrName() << llvm::Triple::getEnvironmentTypeName(Stage) << (AllowedStages.size() != 1) << join(StageStrings, ", "); } diff --git a/clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl b/clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl index 6781f9241df24..a2203692b582b 100644 --- a/clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl +++ b/clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl @@ -24,6 +24,12 @@ void CSMain3(uint3 : SV_DispatchThreadID) { // CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 'uint3' // CHECK-NEXT: HLSLSV_DispatchThreadIDAttr } +[numthreads(8,8,1)] +void CSMain4(uint3 : SV_DispatchThreadId) { +// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain4 'void (uint3)' +// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 'uint3' +// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr +} [numthreads(8,8,1)] void CSMain_GID(uint ID : SV_GroupID) { @@ -49,6 +55,12 @@ void CSMain3_GID(uint3 : SV_GroupID) { // CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:24 'uint3' // CHECK-NEXT: HLSLSV_GroupIDAttr } +[numthreads(8,8,1)] +void CSMain4_GID(uint3 : Sv_GroupId) { +// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain4_GID 'void (uint3)' +// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:24 'uint3' +// CHECK-NEXT: HLSLSV_GroupIDAttr +} [numthreads(8,8,1)] void CSMain_GThreadID(uint ID : SV_GroupThreadID) { @@ -74,3 +86,9 @@ void CSMain3_GThreadID(uint3 : SV_GroupThreadID) { // CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:30 'uint3' // CHECK-NEXT: HLSLSV_GroupThreadIDAttr } +[numthreads(8,8,1)] +void CSMain4_GThreadID(uint3 : sv_GroupThreadid) { +// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain4_GThreadID 'void (uint3)' +// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:30 'uint3' +// CHECK-NEXT: HLSLSV_GroupThreadIDAttr +} diff --git a/clang/test/TableGen/HLSLAttribute-errors.td b/clang/test/TableGen/HLSLAttribute-errors.td new file mode 100644 index 0000000000000..fc9473dcc1fb4 --- /dev/null +++ b/clang/test/TableGen/HLSLAttribute-errors.td @@ -0,0 +1,11 @@ +// RUN: not clang-tblgen -gen-clang-attr-parsed-attr-kinds -I%p/../../include %s -o - 2>&1 | FileCheck %s + +include "clang/Basic/Attr.td" + +// CHECK: error: HLSLAnnotation Attribute must be lower case. +def HLSLSV_FAKE: HLSLAnnotationAttr { + let Spellings = [HLSLAnnotation<"SV_Fake">]; + let Subjects = SubjectList<[ParmVar, Field]>; + let LangOpts = [HLSL]; + let Documentation = [HLSLSV_GroupThreadIDDocs]; +} diff --git a/clang/utils/TableGen/ClangAttrEmitter.cpp b/clang/utils/TableGen/ClangAttrEmitter.cpp index af7478b7986f9..3d90bfbc75b32 100644 --- a/clang/utils/TableGen/ClangAttrEmitter.cpp +++ b/clang/utils/TableGen/ClangAttrEmitter.cpp @@ -4932,6 +4932,9 @@ void EmitClangAttrParsedAttrKinds(const RecordKeeper &Records, Matches = &Pragma; } else if (Variety == "HLSLAnnotation") { Matches = &HLSLAnnotation; + if (RawSpelling.compare(RawSpelling.lower()) != 0) + PrintError(S.getSpellingRecord().getLoc(), + "HLSLAnnotation Attribute must be lower case."); } assert(Matches && "Unsupported spelling variety found"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits