468 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \2// RUN: -DRESOURCE=StructuredBuffer %s | FileCheck -DRESOURCE=StructuredBuffer \3// RUN: -check-prefix=EMPTY %s4//5// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \6// RUN: -DRESOURCE=StructuredBuffer %s | FileCheck -DRESOURCE=StructuredBuffer \7// RUN: -check-prefixes=CHECK,CHECK-SRV,CHECK-SUBSCRIPT,CHECK-LOAD,CHECK-BINDING %s8//9// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \10// RUN: -DRESOURCE=RWStructuredBuffer %s | FileCheck -DRESOURCE=RWStructuredBuffer \11// RUN: -check-prefix=EMPTY %s12//13// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \14// RUN: -DRESOURCE=RWStructuredBuffer %s | FileCheck -DRESOURCE=RWStructuredBuffer \15// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-SUBSCRIPT,CHECK-SUBSCRIPT-UAV,CHECK-COUNTER,CHECK-LOAD,CHECK-COUNTER-HANDLE %s16//17// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \18// RUN: -DRESOURCE=AppendStructuredBuffer %s | FileCheck -DRESOURCE=AppendStructuredBuffer \19// RUN: -check-prefix=EMPTY %s20//21// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \22// RUN: -DRESOURCE=AppendStructuredBuffer %s | FileCheck -DRESOURCE=AppendStructuredBuffer \23// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-NOSUBSCRIPT,CHECK-APPEND,CHECK-COUNTER-HANDLE %s24//25// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \26// RUN: -DRESOURCE=ConsumeStructuredBuffer %s | FileCheck -DRESOURCE=ConsumeStructuredBuffer \27// RUN: -check-prefix=EMPTY %s28//29// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \30// RUN: -DRESOURCE=ConsumeStructuredBuffer %s | FileCheck -DRESOURCE=ConsumeStructuredBuffer \31// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-NOSUBSCRIPT,CHECK-CONSUME,CHECK-COUNTER-HANDLE %s32//33// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \34// RUN: -DRESOURCE=RasterizerOrderedStructuredBuffer %s | FileCheck -DRESOURCE=RasterizerOrderedStructuredBuffer \35// RUN: -check-prefix=EMPTY %s36//37// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \38// RUN: -DRESOURCE=RasterizerOrderedStructuredBuffer %s | FileCheck -DRESOURCE=RasterizerOrderedStructuredBuffer \39// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-ROV,CHECK-SUBSCRIPT,CHECK-SUBSCRIPT-UAV,CHECK-LOAD,CHECK-COUNTER-HANDLE %s40 41// This test tests two different AST generations for each structured buffer.42// The "EMPTY" test mode verifies the AST generated by forward declaration43// of the HLSL types which happens on initializing the HLSL external AST with44// an AST Context.45 46// The non-empty mode has a use that requires the resource type be complete,47// which results in the AST being populated by the external AST source. That48// case covers the full implementation of the template declaration and the49// instantiated specialization.50 51// EMPTY: ClassTemplateDecl {{.*}} implicit [[RESOURCE]]52// EMPTY-NEXT: TemplateTypeParmDecl {{.*}} typename depth 0 index 0 element_type53// EMPTY-NEXT: ConceptSpecializationExpr {{.*}} 'bool' Concept {{.*}} '__is_structured_resource_element_compatible'54// EMPTY-NEXT: ImplicitConceptSpecializationDecl55// EMPTY-NEXT: TemplateArgument type 'type-parameter-0-0'56// EMPTY-NEXT: TemplateTypeParmType {{.*}} 'type-parameter-0-0' dependent depth 0 index 057// EMPTY-NEXT: TemplateTypeParm {{.*}} depth 0 index 058// EMPTY-NEXT: TemplateArgument type 'element_type':'type-parameter-0-0'59// EMPTY-NEXT: TemplateTypeParmType {{.*}} 'element_type' dependent depth 0 index 060// EMPTY-NEXT: TemplateTypeParm {{.*}} 'element_type'61// EMPTY-NEXT: CXXRecordDecl {{.*}} implicit <undeserialized declarations> class [[RESOURCE]]62// EMPTY-NEXT: FinalAttr {{.*}} Implicit final63 64// There should be no more occurrences of [[RESOURCE]]65// EMPTY-NOT: {{[^[:alnum:]]}}[[RESOURCE]]66 67#ifndef EMPTY68 69RESOURCE<float> Buffer;70 71#endif72 73// CHECK: ClassTemplateDecl {{.*}} implicit [[RESOURCE]]74// CHECK-NEXT: TemplateTypeParmDecl {{.*}} typename depth 0 index 0 element_type75// CHECK-NEXT: ConceptSpecializationExpr {{.*}} 'bool' Concept {{.*}} '__is_structured_resource_element_compatible'76// CHECK-NEXT: ImplicitConceptSpecializationDecl {{.*}}77// CHECK-NEXT: TemplateArgument type 'type-parameter-0-0'78// CHECK-NEXT: TemplateTypeParmType {{.*}} 'type-parameter-0-0' dependent depth 0 index 079// CHECK-NEXT: TemplateTypeParm {{.*}} depth 0 index 080// CHECK-NEXT: TemplateArgument type 'element_type':'type-parameter-0-0'81// CHECK-NEXT: TemplateTypeParmType {{.*}} 'element_type' dependent depth 0 index 082// CHECK-NEXT: TemplateTypeParm {{.*}} 'element_type'83// CHECK-NEXT: CXXRecordDecl {{.*}} implicit class [[RESOURCE]] definition84 85// CHECK: FinalAttr {{.*}} Implicit final86// CHECK-NEXT: FieldDecl {{.*}} implicit __handle '__hlsl_resource_t87// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]88// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]89// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]90// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]91 92// Default constructor93 94// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void ()' inline95// CHECK-NEXT: CompoundStmt96// CHECK-NEXT: BinaryOperator {{.*}} '='97// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle98// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this99// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t100// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' <BuiltinFnToFnPtr>101// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept'102// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle103// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this104// CHECK-NEXT: AlwaysInlineAttr105 106// Copy constructor107 108// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void (const hlsl::[[RESOURCE]]<element_type> &)' inline109// CHECK-NEXT: ParmVarDecl {{.*}} other 'const hlsl::[[RESOURCE]]<element_type> &'110// CHECK-NEXT: CompoundStmt111// CHECK-NEXT: BinaryOperator {{.*}} '='112// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle113// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this114// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle115// CHECK-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'116// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '='117// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} lvalue .__counter_handle118// CHECK-COUNTER-HANDLE-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this119// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} lvalue .__counter_handle120// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'121// CHECK-NEXT: AlwaysInlineAttr122 123// operator=124 125// CHECK: CXXMethodDecl {{.*}} operator= 'hlsl::[[RESOURCE]]<element_type> &(const hlsl::[[RESOURCE]]<element_type> &)'126// CHECK-NEXT: ParmVarDecl {{.*}} other 'const hlsl::[[RESOURCE]]<element_type> &'127// CHECK-NEXT: CompoundStmt128// CHECK-NEXT: BinaryOperator {{.*}} '='129// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle130// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this131// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle132// CHECK-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'133// CHECK-COUNTER-HANDLE: BinaryOperator {{.*}} '='134// CHECK-COUNTER-HANDLE: MemberExpr {{.*}} lvalue .__counter_handle135// CHECK-COUNTER-HANDLE: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this136// CHECK-COUNTER-HANDLE: MemberExpr {{.*}} lvalue .__counter_handle137// CHECK-COUNTER-HANDLE: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'138// CHECK-NEXT: ReturnStmt139// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this140// CHECK-NEXT: AlwaysInlineAttr141 142// Static __createFromBinding method143 144// CHECK-BINDING: CXXMethodDecl {{.*}} __createFromBinding 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *)' static145// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'146// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'147// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} range 'int'148// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} index 'unsigned int'149// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} name 'const char *'150// CHECK-BINDING-NEXT: CompoundStmt151// CHECK-BINDING-NEXT: DeclStmt152// CHECK-BINDING-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'153// CHECK-BINDING-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='154// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle155// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'156// CHECK-BINDING-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'157// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' <BuiltinFnToFnPtr>158// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'159// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle160// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'161// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'162// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'163// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'164// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'165// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'166// CHECK-BINDING-NEXT: ReturnStmt167// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'168// CHECK-BINDING-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline169 170// Static __createFromImplicitBinding method171 172// CHECK-BINDING: CXXMethodDecl {{.*}} __createFromImplicitBinding 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *)' static173// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} orderId 'unsigned int'174// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'175// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} range 'int'176// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} index 'unsigned int'177// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} name 'const char *'178// CHECK-BINDING-NEXT: CompoundStmt {{.*}}179// CHECK-BINDING-NEXT: DeclStmt {{.*}}180// CHECK-BINDING-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'181// CHECK-BINDING-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='182// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle183// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'184// CHECK-BINDING-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'185// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' <BuiltinFnToFnPtr>186// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'187// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle188// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'189// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'190// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'191// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'192// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'193// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'194// CHECK-BINDING-NEXT: ReturnStmt195// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'196// CHECK-BINDING-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline197 198// CHECK-COUNTER-HANDLE: CXXMethodDecl {{.*}} __createFromBindingWithImplicitCounter 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *, unsigned int)' static199// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'200// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'201// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} range 'int'202// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} index 'unsigned int'203// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} name 'const char *'204// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} counterOrderId 'unsigned int'205// CHECK-COUNTER-HANDLE-NEXT: CompoundStmt206// CHECK-COUNTER-HANDLE-NEXT: DeclStmt207// CHECK-COUNTER-HANDLE-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'208// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='209// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle210// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'211// CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'212// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' <BuiltinFnToFnPtr>213// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'214// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle215// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'216// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'217// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'218// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'219// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'220// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'221// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='222// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle223// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'224// CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'225// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int) noexcept' <BuiltinFnToFnPtr>226// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept'227// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle228// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'229// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'counterOrderId' 'unsigned int'230// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'231// CHECK-COUNTER-HANDLE-NEXT: ReturnStmt232// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'233// CHECK-COUNTER-HANDLE-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline234 235// CHECK-COUNTER-HANDLE: CXXMethodDecl {{.*}} __createFromImplicitBindingWithImplicitCounter 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *, unsigned int)' static236// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} orderId 'unsigned int'237// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'238// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} range 'int'239// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} index 'unsigned int'240// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} name 'const char *'241// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} counterOrderId 'unsigned int'242// CHECK-COUNTER-HANDLE-NEXT: CompoundStmt243// CHECK-COUNTER-HANDLE-NEXT: DeclStmt244// CHECK-COUNTER-HANDLE-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'245// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='246// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle247// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'248// CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'249// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' <BuiltinFnToFnPtr>250// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'251// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle252// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'253// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'254// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'255// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'256// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'257// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'258// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='259// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle260// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'261// CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'262// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int) noexcept' <BuiltinFnToFnPtr>263// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept'264// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle265// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'266// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'counterOrderId' 'unsigned int'267// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'268// CHECK-COUNTER-HANDLE-NEXT: ReturnStmt269// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'270// CHECK-COUNTER-HANDLE-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline271 272// Subscript operators273 274// CHECK-SUBSCRIPT: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(unsigned int) const'275// CHECK-SUBSCRIPT-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'276// CHECK-SUBSCRIPT-NEXT: CompoundStmt277// CHECK-SUBSCRIPT-NEXT: ReturnStmt278// CHECK-SUBSCRIPT-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow279// CHECK-SUBSCRIPT-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'280// CHECK-SUBSCRIPT-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>281// CHECK-SUBSCRIPT-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'282// CHECK-SUBSCRIPT-NEXT: MemberExpr {{.*}} '__hlsl_resource_t283// CHECK-SUBSCRIPT-SAME{LITERAL}: [[hlsl::resource_class(284// CHECK-SUBSCRIPT-SAME{LITERAL}: [[hlsl::raw_buffer]]285// CHECK-SUBSCRIPT-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]286// CHECK-SUBSCRIPT-SAME: ' lvalue .__handle {{.*}}287// CHECK-SUBSCRIPT-NEXT: CXXThisExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue implicit this288// CHECK-SUBSCRIPT-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Index' 'unsigned int'289// CHECK-SUBSCRIPT-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline290 291// CHECK-SUBSCRIPT-UAV-NEXT: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &(unsigned int)'292// CHECK-SUBSCRIPT-UAV-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'293// CHECK-SUBSCRIPT-UAV-NEXT: CompoundStmt294// CHECK-SUBSCRIPT-UAV-NEXT: ReturnStmt295// CHECK-SUBSCRIPT-UAV-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow296// CHECK-SUBSCRIPT-UAV-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'297// CHECK-SUBSCRIPT-UAV-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>298// CHECK-SUBSCRIPT-UAV-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'299// CHECK-SUBSCRIPT-UAV-NEXT: MemberExpr {{.*}} '__hlsl_resource_t300// CHECK-SUBSCRIPT-UAV-SAME{LITERAL}: [[hlsl::resource_class(301// CHECK-SUBSCRIPT-UAV-SAME{LITERAL}: [[hlsl::raw_buffer]]302// CHECK-SUBSCRIPT-UAV-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]303// CHECK-SUBSCRIPT-UAV-SAME: ' lvalue .__handle {{.*}}304// CHECK-SUBSCRIPT-UAV-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this305// CHECK-SUBSCRIPT-UAV-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Index' 'unsigned int'306// CHECK-SUBSCRIPT-UAV-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline307 308// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(unsigned int) const'309// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &(unsigned int)'310 311// Load method312 313// CHECK-LOAD: CXXMethodDecl {{.*}} Load 'element_type (unsigned int)'314// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'315// CHECK-LOAD-NEXT: CompoundStmt316// CHECK-LOAD-NEXT: ReturnStmt317// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow318// CHECK-LOAD-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'319// CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>320// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'321// CHECK-LOAD-NEXT: MemberExpr {{.*}} '__hlsl_resource_t322// CHECK-LOAD-SAME{LITERAL}: [[hlsl::resource_class(323// CHECK-LOAD-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]324// CHECK-LOAD-SAME: ' lvalue .__handle {{.*}}325// CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this326// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Index' 'unsigned int'327// CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline328 329// Load with status method330 331// CHECK-LOAD: CXXMethodDecl {{.*}} Load 'element_type (unsigned int, out unsigned int)'332// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'333// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &__restrict'334// CHECK-LOAD-NEXT: HLSLParamModifierAttr {{.*}} out335// CHECK-LOAD-NEXT: CompoundStmt336// CHECK-LOAD-NEXT: ReturnStmt337// CHECK-LOAD-NEXT: CallExpr {{.*}} 'element_type'338// CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>339// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_load_with_status' 'void (...) noexcept'340// CHECK-LOAD-NEXT: MemberExpr {{.*}} '__hlsl_resource_t341// CHECK-LOAD-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]342// CHECK-LOAD-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]343// CHECK-LOAD-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]344// CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this345// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Index' 'unsigned int'346// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Status' 'unsigned int &__restrict'347// CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline348 349// IncrementCounter method350 351// CHECK-COUNTER: CXXMethodDecl {{.*}} IncrementCounter 'unsigned int ()'352// CHECK-COUNTER-NEXT: CompoundStmt353// CHECK-COUNTER-NEXT: ReturnStmt354// CHECK-COUNTER-NEXT: CallExpr {{.*}} 'unsigned int'355// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' <BuiltinFnToFnPtr>356// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'357// CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t358// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]359// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]]360// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle361// CHECK-COUNTER-NEXT: CXXThisExpr {{.*}} 'hlsl::RWStructuredBuffer<element_type>' lvalue implicit this362// CHECK-COUNTER-NEXT: IntegerLiteral {{.*}} 'int' 1363// CHECK-COUNTER-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline364 365// DecrementCounter method366 367// CHECK-COUNTER-NEXT: CXXMethodDecl {{.*}} DecrementCounter 'unsigned int ()'368// CHECK-COUNTER-NEXT: CompoundStmt369// CHECK-COUNTER-NEXT: ReturnStmt370// CHECK-COUNTER-NEXT: CallExpr {{.*}} 'unsigned int'371// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' <BuiltinFnToFnPtr>372// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'373// CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t374// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]375// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]]376// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle377// CHECK-COUNTER-NEXT: CXXThisExpr {{.*}} 'hlsl::RWStructuredBuffer<element_type>' lvalue implicit this378// CHECK-COUNTER-NEXT: IntegerLiteral {{.*}} 'int' -1379// CHECK-COUNTER-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline380 381// Append method382 383// CHECK-APPEND: CXXMethodDecl {{.*}} Append 'void (element_type)'384// CHECK-APPEND-NEXT: ParmVarDecl {{.*}} value 'element_type'385// CHECK-APPEND-NEXT: CompoundStmt386// CHECK-APPEND-NEXT: BinaryOperator {{.*}} 'hlsl_device element_type' '='387// CHECK-APPEND-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow388// CHECK-APPEND-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'389// CHECK-APPEND-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>390// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'391// CHECK-APPEND-NEXT: MemberExpr {{.*}} '__hlsl_resource_t392// CHECK-APPEND-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]393// CHECK-APPEND-SAME{LITERAL}: [[hlsl::raw_buffer]]394// CHECK-APPEND-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle395// CHECK-APPEND-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this396// CHECK-APPEND-NEXT: CallExpr {{.*}} 'unsigned int'397// CHECK-APPEND-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' <BuiltinFnToFnPtr>398// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'399// CHECK-APPEND-NEXT: MemberExpr {{.*}} '__hlsl_resource_t400// CHECK-APPEND-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]401// CHECK-APPEND-SAME{LITERAL}: [[hlsl::raw_buffer]]402// CHECK-APPEND-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle403// CHECK-APPEND-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this404// CHECK-APPEND-NEXT: IntegerLiteral {{.*}} 'int' 1405// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} 'element_type' ParmVar {{.*}} 'value' 'element_type'406 407// Consume method408 409// CHECK-CONSUME: CXXMethodDecl {{.*}} Consume 'element_type ()'410// CHECK-CONSUME-NEXT: CompoundStmt411// CHECK-CONSUME-NEXT: ReturnStmt412// CHECK-CONSUME-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow413// CHECK-CONSUME-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'414// CHECK-CONSUME-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>415// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'416// CHECK-CONSUME-NEXT: MemberExpr {{.*}} '__hlsl_resource_t417// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]418// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::raw_buffer]]419// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle420// CHECK-CONSUME-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this421// CHECK-CONSUME-NEXT: CallExpr {{.*}} 'unsigned int'422// CHECK-CONSUME-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' <BuiltinFnToFnPtr>423// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'424// CHECK-CONSUME-NEXT: MemberExpr {{.*}} '__hlsl_resource_t425// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]426// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::raw_buffer]]427// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle428// CHECK-CONSUME-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this429// CHECK-CONSUME-NEXT: IntegerLiteral {{.*}} 'int' -1430 431// GetDimensions method432 433// CHECK: CXXMethodDecl {{.*}} GetDimensions 'void (out unsigned int, out unsigned int)'434// CHECK-NEXT: ParmVarDecl {{.*}} numStructs 'unsigned int &__restrict'435// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out436// CHECK-NEXT: ParmVarDecl {{.*}} stride 'unsigned int &__restrict'437// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out438// CHECK-NEXT: CompoundStmt439// CHECK-NEXT: CallExpr {{.*}} 'void'440// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' <BuiltinFnToFnPtr>441// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept'442// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}}443// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this444// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'numStructs' 'unsigned int &__restrict'445// CHECK-NEXT: CallExpr {{.*}} 'void'446// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' <BuiltinFnToFnPtr>447// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getstride' 'void (__hlsl_resource_t, unsigned int &) noexcept'448// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}}449// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this450// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'stride' 'unsigned int &__restrict'451// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline452 453// CHECK: ClassTemplateSpecializationDecl {{.*}} class [[RESOURCE]] definition454// CHECK: TemplateArgument type 'float'455// CHECK-NEXT: BuiltinType {{.*}} 'float'456// CHECK-NEXT: FinalAttr {{.*}} Implicit final457// CHECK-NEXT: FieldDecl {{.*}} implicit referenced __handle '__hlsl_resource_t458// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]459// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]460// CHECK-ROV-SAME{LITERAL}: [[hlsl::is_rov]]461// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]462// CHECK-SAME{LITERAL}: [[hlsl::contained_type(float)]]463// CHECK-COUNTER-HANDLE: FieldDecl {{.*}} implicit referenced __counter_handle '__hlsl_resource_t464// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]465// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::raw_buffer]]466// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::is_counter]]467// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::contained_type(float)]]468