llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Steven Perron (s-perron)

<details>
<summary>Changes</summary>

HLSL vector and matrix types were previously printed with their closing
syntax (', N&gt;') in 'printAfter', causing them to interleave with function
parameters when used as return types (e.g., 'vector&lt;float (args), 4&gt;').

This change moves the HLSL vector and matrix closing syntax into
'printBefore' when 'UseHLSLTypes' is enabled, ensuring the type is
printed completely before the parameter list.

Note that address space qualifiers are now printed after the type
(e.g., 'vector&lt;float, 4&gt;hlsl_device'). This is because
'canPrefixQualifiers' in 'TypePrinter.cpp' returns false for these types.
We cannot easily change this to check 'UseHLSLTypes' because
'canPrefixQualifiers' is a static method and does not have access to the
PrintingPolicy at that point.

Fixes interleaved output in HLSL AST tests.

Assisted-by: Gemini


&lt;!-- branch-stack-start --&gt;

&lt;!-- branch-stack-end --&gt;


---

Patch is 49.57 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/184888.diff


10 Files Affected:

- (modified) clang/lib/AST/TypePrinter.cpp (+60-40) 
- (modified) clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl (+30-30) 
- (modified) clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl (+16-16) 
- (modified) clang/test/AST/HLSL/Texture2D-vector-AST.hlsl (+27-27) 
- (modified) clang/test/AST/HLSL/pch_with_matrix_element_accessor.hlsl (+5-5) 
- (modified) clang/test/AST/HLSL/pch_with_matrix_single_subscript.hlsl (+1-1) 
- (modified) clang/test/AST/HLSL/resource_binding_attr.hlsl (+1-1) 
- (modified) clang/test/SemaHLSL/BuiltIns/Buffers.hlsl (+1-1) 
- (modified) clang/test/SemaHLSL/BuiltIns/StructuredBuffers.hlsl (+1-1) 
- (modified) clang/test/SemaHLSL/BuiltIns/matrix-errors.hlsl (+2-2) 


``````````diff
diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp
index 07a0c39bd93f1..b5d36214696bf 100644
--- a/clang/lib/AST/TypePrinter.cpp
+++ b/clang/lib/AST/TypePrinter.cpp
@@ -638,28 +638,30 @@ void TypePrinter::printDependentAddressSpaceAfter(
 }
 
 void TypePrinter::printDependentSizedExtVectorBefore(
-                                          const DependentSizedExtVectorType *T,
-                                          raw_ostream &OS) {
-  if (Policy.UseHLSLTypes)
-    OS << "vector<";
-  printBefore(T->getElementType(), OS);
-}
-
-void TypePrinter::printDependentSizedExtVectorAfter(
-                                          const DependentSizedExtVectorType *T,
-                                          raw_ostream &OS) {
+    const DependentSizedExtVectorType *T, raw_ostream &OS) {
   if (Policy.UseHLSLTypes) {
+    OS << "vector<";
+    print(T->getElementType(), OS, StringRef());
     OS << ", ";
     if (T->getSizeExpr())
       T->getSizeExpr()->printPretty(OS, nullptr, Policy);
     OS << ">";
+    spaceBeforePlaceHolder(OS);
   } else {
-    OS << " __attribute__((ext_vector_type(";
-    if (T->getSizeExpr())
-      T->getSizeExpr()->printPretty(OS, nullptr, Policy);
-    OS << ")))";
+    printBefore(T->getElementType(), OS);
   }
+}
+
+void TypePrinter::printDependentSizedExtVectorAfter(
+    const DependentSizedExtVectorType *T, raw_ostream &OS) {
+  if (Policy.UseHLSLTypes)
+    return;
+
   printAfter(T->getElementType(), OS);
+  OS << " __attribute__((ext_vector_type(";
+  if (T->getSizeExpr())
+    T->getSizeExpr()->printPretty(OS, nullptr, Policy);
+  OS << ")))";
 }
 
 void TypePrinter::printVectorBefore(const VectorType *T, raw_ostream &OS) {
@@ -826,23 +828,24 @@ void TypePrinter::printDependentVectorAfter(
 
 void TypePrinter::printExtVectorBefore(const ExtVectorType *T,
                                        raw_ostream &OS) {
-  if (Policy.UseHLSLTypes)
+  if (Policy.UseHLSLTypes) {
     OS << "vector<";
-  printBefore(T->getElementType(), OS);
+    print(T->getElementType(), OS, StringRef());
+    OS << ", " << T->getNumElements() << ">";
+    spaceBeforePlaceHolder(OS);
+  } else {
+    printBefore(T->getElementType(), OS);
+  }
 }
 
 void TypePrinter::printExtVectorAfter(const ExtVectorType *T, raw_ostream &OS) 
{
-  printAfter(T->getElementType(), OS);
+  if (Policy.UseHLSLTypes)
+    return;
 
-  if (Policy.UseHLSLTypes) {
-    OS << ", ";
-    OS << T->getNumElements();
-    OS << ">";
-  } else {
-    OS << " __attribute__((ext_vector_type(";
-    OS << T->getNumElements();
-    OS << ")))";
-  }
+  printAfter(T->getElementType(), OS);
+  OS << " __attribute__((ext_vector_type(";
+  OS << T->getNumElements();
+  OS << ")))";
 }
 
 static void printDims(const ConstantMatrixType *T, raw_ostream &OS) {
@@ -852,13 +855,14 @@ static void printDims(const ConstantMatrixType *T, 
raw_ostream &OS) {
 static void printHLSLMatrixBefore(TypePrinter &TP, const ConstantMatrixType *T,
                                   raw_ostream &OS) {
   OS << "matrix<";
-  TP.printBefore(T->getElementType(), OS);
-}
-
-static void printHLSLMatrixAfter(const ConstantMatrixType *T, raw_ostream &OS) 
{
+  TP.print(T->getElementType(), OS, StringRef());
   OS << ", ";
   printDims(T, OS);
   OS << ">";
+  TP.spaceBeforePlaceHolder(OS);
+}
+
+static void printHLSLMatrixAfter(const ConstantMatrixType *T, raw_ostream &OS) 
{
 }
 
 static void printClangMatrixBefore(TypePrinter &TP, const ConstantMatrixType 
*T,
@@ -889,21 +893,37 @@ void TypePrinter::printConstantMatrixAfter(const 
ConstantMatrixType *T,
 
 void TypePrinter::printDependentSizedMatrixBefore(
     const DependentSizedMatrixType *T, raw_ostream &OS) {
-  printBefore(T->getElementType(), OS);
-  OS << " __attribute__((matrix_type(";
-  if (T->getRowExpr()) {
-    T->getRowExpr()->printPretty(OS, nullptr, Policy);
-  }
-  OS << ", ";
-  if (T->getColumnExpr()) {
-    T->getColumnExpr()->printPretty(OS, nullptr, Policy);
+  if (Policy.UseHLSLTypes) {
+    OS << "matrix<";
+    print(T->getElementType(), OS, StringRef());
+    OS << ", ";
+    if (T->getRowExpr()) {
+      T->getRowExpr()->printPretty(OS, nullptr, Policy);
+    }
+    OS << ", ";
+    if (T->getColumnExpr()) {
+      T->getColumnExpr()->printPretty(OS, nullptr, Policy);
+    }
+    OS << ">";
+    spaceBeforePlaceHolder(OS);
+  } else {
+    printBefore(T->getElementType(), OS);
+    OS << " __attribute__((matrix_type(";
+    if (T->getRowExpr()) {
+      T->getRowExpr()->printPretty(OS, nullptr, Policy);
+    }
+    OS << ", ";
+    if (T->getColumnExpr()) {
+      T->getColumnExpr()->printPretty(OS, nullptr, Policy);
+    }
+    OS << ")))";
   }
-  OS << ")))";
 }
 
 void TypePrinter::printDependentSizedMatrixAfter(
     const DependentSizedMatrixType *T, raw_ostream &OS) {
-  printAfter(T->getElementType(), OS);
+  if (!Policy.UseHLSLTypes)
+    printAfter(T->getElementType(), OS);
 }
 
 void
diff --git a/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl 
b/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl
index e9e7cd76167a5..16ce8ab0e7400 100644
--- a/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl
+++ b/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl
@@ -189,12 +189,12 @@ RESOURCE Buffer;
 // CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'unsigned int *'
 // CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
-// CHECK-LOAD: CXXMethodDecl {{.*}} Load2 'vector<unsigned int (unsigned int), 
2>'
+// CHECK-LOAD: CXXMethodDecl {{.*}} Load2 'vector<unsigned int, 2> (unsigned 
int)'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-LOAD-NEXT: CompoundStmt
 // CHECK-LOAD-NEXT: ReturnStmt
-// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'vector<unsigned int hlsl_device, 2>' 
lvalue prefix '*' cannot overflow
-// CHECK-LOAD-NEXT: CallExpr {{.*}} 'vector<unsigned int hlsl_device *, 2>'
+// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'vector<unsigned int, 2> hlsl_device' 
lvalue prefix '*' cannot overflow
+// CHECK-LOAD-NEXT: CallExpr {{.*}} 'vector<unsigned int, 2> hlsl_device *'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' 
<BuiltinFnToFnPtr>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} 
'__builtin_hlsl_resource_getpointer_typed' 'void (...) noexcept'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t {{.*}}' 
<LValueToRValue>
@@ -202,10 +202,10 @@ RESOURCE Buffer;
 // CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit 
this
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
-// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 2>'
+// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 2> *'
 // CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
-// CHECK-LOAD: CXXMethodDecl {{.*}} Load2 'vector<unsigned int (unsigned int, 
out unsigned int), 2>'
+// CHECK-LOAD: CXXMethodDecl {{.*}} Load2 'vector<unsigned int, 2> (unsigned 
int, out unsigned int)'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &__restrict'
 // CHECK-LOAD-NEXT: HLSLParamModifierAttr {{.*}} out
@@ -221,15 +221,15 @@ RESOURCE Buffer;
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Status' 'unsigned int &__restrict'
-// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 2>'
+// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 2> *'
 // CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
-// CHECK-LOAD: CXXMethodDecl {{.*}} Load3 'vector<unsigned int (unsigned int), 
3>'
+// CHECK-LOAD: CXXMethodDecl {{.*}} Load3 'vector<unsigned int, 3> (unsigned 
int)'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-LOAD-NEXT: CompoundStmt
 // CHECK-LOAD-NEXT: ReturnStmt
-// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'vector<unsigned int hlsl_device, 3>' 
lvalue prefix '*' cannot overflow
-// CHECK-LOAD-NEXT: CallExpr {{.*}} 'vector<unsigned int hlsl_device *, 3>'
+// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'vector<unsigned int, 3> hlsl_device' 
lvalue prefix '*' cannot overflow
+// CHECK-LOAD-NEXT: CallExpr {{.*}} 'vector<unsigned int, 3> hlsl_device *'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' 
<BuiltinFnToFnPtr>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} 
'__builtin_hlsl_resource_getpointer_typed' 'void (...) noexcept'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t {{.*}}' 
<LValueToRValue>
@@ -237,10 +237,10 @@ RESOURCE Buffer;
 // CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit 
this
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
-// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 3>'
+// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 3> *'
 // CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
-// CHECK-LOAD: CXXMethodDecl {{.*}} Load3 'vector<unsigned int (unsigned int, 
out unsigned int), 3>'
+// CHECK-LOAD: CXXMethodDecl {{.*}} Load3 'vector<unsigned int, 3> (unsigned 
int, out unsigned int)'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &__restrict'
 // CHECK-LOAD-NEXT: HLSLParamModifierAttr {{.*}} out
@@ -256,15 +256,15 @@ RESOURCE Buffer;
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Status' 'unsigned int &__restrict'
-// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 3>'
+// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 3> *'
 // CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
-// CHECK-LOAD: CXXMethodDecl {{.*}} Load4 'vector<unsigned int (unsigned int), 
4>'
+// CHECK-LOAD: CXXMethodDecl {{.*}} Load4 'vector<unsigned int, 4> (unsigned 
int)'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-LOAD-NEXT: CompoundStmt
 // CHECK-LOAD-NEXT: ReturnStmt
-// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'vector<unsigned int hlsl_device, 4>' 
lvalue prefix '*' cannot overflow
-// CHECK-LOAD-NEXT: CallExpr {{.*}} 'vector<unsigned int hlsl_device *, 4>'
+// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'vector<unsigned int, 4> hlsl_device' 
lvalue prefix '*' cannot overflow
+// CHECK-LOAD-NEXT: CallExpr {{.*}} 'vector<unsigned int, 4> hlsl_device *'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' 
<BuiltinFnToFnPtr>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} 
'__builtin_hlsl_resource_getpointer_typed' 'void (...) noexcept'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t {{.*}}' 
<LValueToRValue>
@@ -272,10 +272,10 @@ RESOURCE Buffer;
 // CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit 
this
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
-// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 4>'
+// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 4> *'
 // CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
-// CHECK-LOAD: CXXMethodDecl {{.*}} Load4 'vector<unsigned int (unsigned int, 
out unsigned int), 4>'
+// CHECK-LOAD: CXXMethodDecl {{.*}} Load4 'vector<unsigned int, 4> (unsigned 
int, out unsigned int)'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &__restrict'
 // CHECK-LOAD-NEXT: HLSLParamModifierAttr {{.*}} out
@@ -291,7 +291,7 @@ RESOURCE Buffer;
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
 // CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Status' 'unsigned int &__restrict'
-// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 4>'
+// CHECK-LOAD-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 4> *'
 // CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
 // CHECK-LOAD: CXXMethodDecl {{.*}} Load 'element_type (unsigned int)'
@@ -347,9 +347,9 @@ RESOURCE Buffer;
 // CHECK-STORE-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-STORE-NEXT: ParmVarDecl {{.*}} Value 'vector<unsigned int, 2>'
 // CHECK-STORE-NEXT: CompoundStmt
-// CHECK-STORE-NEXT: BinaryOperator {{.*}} 'vector<unsigned int hlsl_device, 
2>' '='
-// CHECK-STORE-NEXT: UnaryOperator {{.*}} 'vector<unsigned int hlsl_device, 
2>' lvalue prefix '*' cannot overflow
-// CHECK-STORE-NEXT: CallExpr {{.*}} 'vector<unsigned int hlsl_device *, 2>'
+// CHECK-STORE-NEXT: BinaryOperator {{.*}} 'vector<unsigned int, 2> 
hlsl_device' '='
+// CHECK-STORE-NEXT: UnaryOperator {{.*}} 'vector<unsigned int, 2> 
hlsl_device' lvalue prefix '*' cannot overflow
+// CHECK-STORE-NEXT: CallExpr {{.*}} 'vector<unsigned int, 2> hlsl_device *'
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' 
<BuiltinFnToFnPtr>
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} 
'__builtin_hlsl_resource_getpointer_typed' 'void (...) noexcept'
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t {{.*}}' 
<LValueToRValue>
@@ -357,7 +357,7 @@ RESOURCE Buffer;
 // CHECK-STORE-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit 
this
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
-// CHECK-STORE-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 2>'
+// CHECK-STORE-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 2> *'
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} 'vector<unsigned int, 2>' lvalue 
ParmVar {{.*}} 'Value' 'vector<unsigned int, 2>'
 // CHECK-STORE-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
@@ -365,9 +365,9 @@ RESOURCE Buffer;
 // CHECK-STORE-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-STORE-NEXT: ParmVarDecl {{.*}} Value 'vector<unsigned int, 3>'
 // CHECK-STORE-NEXT: CompoundStmt
-// CHECK-STORE-NEXT: BinaryOperator {{.*}} 'vector<unsigned int hlsl_device, 
3>' '='
-// CHECK-STORE-NEXT: UnaryOperator {{.*}} 'vector<unsigned int hlsl_device, 
3>' lvalue prefix '*' cannot overflow
-// CHECK-STORE-NEXT: CallExpr {{.*}} 'vector<unsigned int hlsl_device *, 3>'
+// CHECK-STORE-NEXT: BinaryOperator {{.*}} 'vector<unsigned int, 3> 
hlsl_device' '='
+// CHECK-STORE-NEXT: UnaryOperator {{.*}} 'vector<unsigned int, 3> 
hlsl_device' lvalue prefix '*' cannot overflow
+// CHECK-STORE-NEXT: CallExpr {{.*}} 'vector<unsigned int, 3> hlsl_device *'
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' 
<BuiltinFnToFnPtr>
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} 
'__builtin_hlsl_resource_getpointer_typed' 'void (...) noexcept'
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t {{.*}}' 
<LValueToRValue>
@@ -375,7 +375,7 @@ RESOURCE Buffer;
 // CHECK-STORE-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit 
this
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
-// CHECK-STORE-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 3>'
+// CHECK-STORE-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 3> *'
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} 'vector<unsigned int, 3>' lvalue 
ParmVar {{.*}} 'Value' 'vector<unsigned int, 3>'
 // CHECK-STORE-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
@@ -383,9 +383,9 @@ RESOURCE Buffer;
 // CHECK-STORE-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
 // CHECK-STORE-NEXT: ParmVarDecl {{.*}} Value 'vector<unsigned int, 4>'
 // CHECK-STORE-NEXT: CompoundStmt
-// CHECK-STORE-NEXT: BinaryOperator {{.*}} 'vector<unsigned int hlsl_device, 
4>' '='
-// CHECK-STORE-NEXT: UnaryOperator {{.*}} 'vector<unsigned int hlsl_device, 
4>' lvalue prefix '*' cannot overflow
-// CHECK-STORE-NEXT: CallExpr {{.*}} 'vector<unsigned int hlsl_device *, 4>'
+// CHECK-STORE-NEXT: BinaryOperator {{.*}} 'vector<unsigned int, 4> 
hlsl_device' '='
+// CHECK-STORE-NEXT: UnaryOperator {{.*}} 'vector<unsigned int, 4> 
hlsl_device' lvalue prefix '*' cannot overflow
+// CHECK-STORE-NEXT: CallExpr {{.*}} 'vector<unsigned int, 4> hlsl_device *'
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' 
<BuiltinFnToFnPtr>
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} 
'__builtin_hlsl_resource_getpointer_typed' 'void (...) noexcept'
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t {{.*}}' 
<LValueToRValue>
@@ -393,7 +393,7 @@ RESOURCE Buffer;
 // CHECK-STORE-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit 
this
 // CHECK-STORE-NEXT: ImplicitCastExpr {{.*}} 'unsigned int' <LValueToRValue>
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 
'Index' 'unsigned int'
-// CHECK-STORE-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int *, 4>'
+// CHECK-STORE-NEXT: CXXScalarValueInitExpr {{.*}} 'vector<unsigned int, 4> *'
 // CHECK-STORE-NEXT: DeclRefExpr {{.*}} 'vector<unsigned int, 4>' lvalue 
ParmVar {{.*}} 'Value' 'vector<unsigned int, 4>'
 // CHECK-STORE-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
 
diff --git a/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl 
b/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl
index 8725bcc05882a..921c92da5cb2b 100644
--- a/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl
+++ b/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl
@@ -415,7 +415,7 @@
 // CHECK-NEXT: DeclRefExpr {{.*}} 'vector<int, 2>' lvalue ParmVar {{.*}} 
'Offset' 'vector<int, 2>'
 // CHECK-NEXT: AlwaysInlineAttr
 
-// CHECK: CXXMethodDecl {{.*}} Gather 'vector<element_type 
(hlsl::SamplerState, vector<float, 2>), 4>' inline
+// CHECK: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> 
(hlsl::SamplerState, vector<float, 2>)' inline
 // CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
 // CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, 2>'
 // CHECK-NEXT: CompoundStmt
@@ -431,7 +431,7 @@
 // CHECK-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
 // CHECK-NEXT: AlwaysInlineAttr
 
-// CHECK: CXXMethodDecl {{.*}} Gather 'vector<element_type 
(hlsl::SamplerState, vector<float, 2>, vector<int, 2>), 4>' inline
+// CHECK: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> 
(hlsl::SamplerState, vector<float, 2>, vector<int, 2>)' inline
 // CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
 // CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, 2>'
 // CHECK-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, 2>'
@@ -449,7 +449,7 @@
 // CHECK-NEXT: DeclRefExpr {{.*}} 'vector<int, 2>' lvalue ParmVar {{.*}} 
'Offset' 'vector<int, 2>'
 // CHECK-NEXT: AlwaysInlineAttr
 
-// CHECK: CXXMethodDecl {{.*}} GatherRed 'vector<element_type 
(hlsl::SamplerState, vector<float, 2>), 4>' inline
+// CHECK: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> 
(hlsl::SamplerState, vector<float, 2>)' inline
 // CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
 // CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, 2>'
 // CHECK-NEXT: CompoundStmt
@@ -465,7 +465,7 @@
 // CHECK-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
 // CHECK-NEXT: AlwaysInlineAttr
 
-// CHECK: CXXMethodDecl {{.*}} GatherRed 'vector<element_type 
(hlsl::SamplerState, vector<float, 2>, vector<int, 2>), 4>' inline
+// CHECK: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> 
(hlsl::SamplerState, vector<float, 2>, vector<int, 2>)' inline
 // CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
 // CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, 2>'
 // CHECK-NEXT: ParmVarDecl {{.*}} ...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/184888
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to