https://github.com/inbelic created https://github.com/llvm/llvm-project/pull/132967
>From the corrections to the Root Signature specification here: >https://github.com/llvm/wg-hlsl/issues/192. It was denoted that keywords are >also case-insensitive in DXC. This pr adjusts the lexer to adhere to the updated spec. We also have a NFC to add a missing license to a file while in the area. >From d41aefdbd13ca430cd9c1f64406b5615c662dcce Mon Sep 17 00:00:00 2001 From: Finn Plummer <finnplum...@microsoft.com> Date: Tue, 25 Mar 2025 16:23:25 +0000 Subject: [PATCH 1/2] [NFC] add missing liscence to file --- clang/lib/Lex/LexHLSLRootSignature.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/clang/lib/Lex/LexHLSLRootSignature.cpp b/clang/lib/Lex/LexHLSLRootSignature.cpp index 8344aad15a9bc..81a8c74ce1be3 100644 --- a/clang/lib/Lex/LexHLSLRootSignature.cpp +++ b/clang/lib/Lex/LexHLSLRootSignature.cpp @@ -1,3 +1,11 @@ +//=== LexHLSLRootSignature.cpp - Lex Root Signature -----------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + #include "clang/Lex/LexHLSLRootSignature.h" namespace clang { >From cfe69b115871dc1a3d9de6d4c62b3c963597acc0 Mon Sep 17 00:00:00 2001 From: Finn Plummer <finnplum...@microsoft.com> Date: Tue, 25 Mar 2025 16:24:50 +0000 Subject: [PATCH 2/2] [HLSL][RootSignature] Make keywords case-insensitive - from dxc testing, it was shown that keywords could be specified in a case-insensitive manner. the current implementation was case sensitive --- clang/lib/Lex/LexHLSLRootSignature.cpp | 2 +- .../Lex/LexHLSLRootSignatureTest.cpp | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/clang/lib/Lex/LexHLSLRootSignature.cpp b/clang/lib/Lex/LexHLSLRootSignature.cpp index 81a8c74ce1be3..fb4aab20c7275 100644 --- a/clang/lib/Lex/LexHLSLRootSignature.cpp +++ b/clang/lib/Lex/LexHLSLRootSignature.cpp @@ -95,7 +95,7 @@ RootSignatureToken RootSignatureLexer::LexToken() { // Define a large string switch statement for all the keywords and enums auto Switch = llvm::StringSwitch<TokenKind>(TokSpelling); -#define KEYWORD(NAME) Switch.Case(#NAME, TokenKind::kw_##NAME); +#define KEYWORD(NAME) Switch.CaseLower(#NAME, TokenKind::kw_##NAME); #define ENUM(NAME, LIT) Switch.CaseLower(LIT, TokenKind::en_##NAME); #include "clang/Lex/HLSLRootSignatureTokenKinds.def" diff --git a/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp b/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp index 0576f08c4c276..d72a842922f98 100644 --- a/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp +++ b/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp @@ -120,6 +120,36 @@ TEST_F(LexHLSLRootSignatureTest, ValidLexAllTokensTest) { CheckTokens(Lexer, Tokens, Expected); } +TEST_F(LexHLSLRootSignatureTest, ValidCaseInsensitiveKeywordsTest) { + // This test will check that we can lex keywords in an case-insensitive + // manner + const llvm::StringLiteral Source = R"cc( + DeScRiPtOrTaBlE + + CBV srv UAV sampler + SPACE visibility FLAGS + numDescriptors OFFSET + )cc"; + auto TokLoc = SourceLocation(); + hlsl::RootSignatureLexer Lexer(Source, TokLoc); + + SmallVector<hlsl::RootSignatureToken> Tokens; + SmallVector<hlsl::TokenKind> Expected = { + hlsl::TokenKind::kw_DescriptorTable, + hlsl::TokenKind::kw_CBV, + hlsl::TokenKind::kw_SRV, + hlsl::TokenKind::kw_UAV, + hlsl::TokenKind::kw_Sampler, + hlsl::TokenKind::kw_space, + hlsl::TokenKind::kw_visibility, + hlsl::TokenKind::kw_flags, + hlsl::TokenKind::kw_numDescriptors, + hlsl::TokenKind::kw_offset, + }; + + CheckTokens(Lexer, Tokens, Expected); +} + TEST_F(LexHLSLRootSignatureTest, ValidLexPeekTest) { // This test will check that we the peek api is correctly used const llvm::StringLiteral Source = R"cc( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits