From 4b7ed548a112b03e6f4307104c545ce12f79535f Mon Sep 17 00:00:00 2001 From: Chris Bieneman Date: Mon, 15 Nov 2021 18:40:44 -0600 Subject: [PATCH 1/2] [HLSL21] Use C++ for loop scoping rules #584 This should resolve #584 by adopting C++ for loop scoping rules for HLSL 2021. --- tools/clang/lib/Parse/ParseStmt.cpp | 2 +- .../HLSL/loop-induction-scoping-2021.hlsl | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 tools/clang/test/HLSL/loop-induction-scoping-2021.hlsl diff --git a/tools/clang/lib/Parse/ParseStmt.cpp b/tools/clang/lib/Parse/ParseStmt.cpp index 5fff92fa10..573a30eb10 100644 --- a/tools/clang/lib/Parse/ParseStmt.cpp +++ b/tools/clang/lib/Parse/ParseStmt.cpp @@ -1582,7 +1582,7 @@ StmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) { ScopeFlags = Scope::DeclScope | Scope::ControlScope; // HLSL Change Starts - leak declarations in for control parts into outer scope - if (getLangOpts().HLSL) { + if (getLangOpts().HLSLVersion < 2020) { ScopeFlags = Scope::ForDeclScope; } // HLSL Change Ends diff --git a/tools/clang/test/HLSL/loop-induction-scoping-2021.hlsl b/tools/clang/test/HLSL/loop-induction-scoping-2021.hlsl new file mode 100644 index 0000000000..22b4d82d54 --- /dev/null +++ b/tools/clang/test/HLSL/loop-induction-scoping-2021.hlsl @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only -ffreestanding -verify -HV 2021 %s + +uint g_count1; +uint g_count2; +Buffer Things; + +float4 main() : SV_Target +{ + float4 data=0; + for( uint i=0; i Date: Tue, 16 Nov 2021 09:29:07 -0600 Subject: [PATCH 2/2] Fix year... --- tools/clang/lib/Parse/ParseStmt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/clang/lib/Parse/ParseStmt.cpp b/tools/clang/lib/Parse/ParseStmt.cpp index 573a30eb10..b84acedbec 100644 --- a/tools/clang/lib/Parse/ParseStmt.cpp +++ b/tools/clang/lib/Parse/ParseStmt.cpp @@ -1582,7 +1582,7 @@ StmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) { ScopeFlags = Scope::DeclScope | Scope::ControlScope; // HLSL Change Starts - leak declarations in for control parts into outer scope - if (getLangOpts().HLSLVersion < 2020) { + if (getLangOpts().HLSLVersion < 2021) { ScopeFlags = Scope::ForDeclScope; } // HLSL Change Ends