161 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \2// RUN: -DRESOURCE=ByteAddressBuffer %s | FileCheck -DRESOURCE=ByteAddressBuffer \3// RUN: -check-prefix=EMPTY %s4//5// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \6// RUN: -DRESOURCE=ByteAddressBuffer %s | FileCheck -DRESOURCE=ByteAddressBuffer \7// RUN: -check-prefixes=CHECK,CHECK-SRV,CHECK-NOSUBSCRIPT %s8//9// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \10// RUN: -DRESOURCE=RWByteAddressBuffer %s | FileCheck -DRESOURCE=RWByteAddressBuffer \11// RUN: -check-prefix=EMPTY %s12//13// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \14// RUN: -DRESOURCE=RWByteAddressBuffer %s | FileCheck -DRESOURCE=RWByteAddressBuffer \15// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-NOSUBSCRIPT %s16//17// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \18// RUN: -DRESOURCE=RasterizerOrderedByteAddressBuffer %s | FileCheck -DRESOURCE=RasterizerOrderedByteAddressBuffer \19// RUN: -check-prefix=EMPTY %s20//21// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \22// RUN: -DRESOURCE=RasterizerOrderedByteAddressBuffer %s | FileCheck -DRESOURCE=RasterizerOrderedByteAddressBuffer \23// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-NOSUBSCRIPT %s24 25// EMPTY: CXXRecordDecl {{.*}} implicit <undeserialized declarations> class [[RESOURCE]]26// EMPTY-NEXT: FinalAttr {{.*}} Implicit final27 28// There should be no more occurrences of RESOURCE29// EMPTY-NOT: {{[^[:alnum:]]}}[[RESOURCE]]30 31#ifndef EMPTY32 33RESOURCE Buffer;34 35#endif36 37// CHECK: CXXRecordDecl {{.*}} implicit referenced class [[RESOURCE]] definition38// CHECK: FinalAttr {{.*}} Implicit final39// CHECK-NEXT: FieldDecl {{.*}} implicit __handle '__hlsl_resource_t40// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]41// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]42// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]43// CHECK-SAME{LITERAL}: [[hlsl::contained_type(char8_t)]]44 45// Default constructor46 47// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]] 'void ()' inline48// CHECK-NEXT: CompoundStmt49// CHECK-NEXT: BinaryOperator {{.*}} '='50// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle51// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this52// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t53// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' <BuiltinFnToFnPtr>54// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept'55// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle56// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this57// CHECK-NEXT: AlwaysInlineAttr58 59// Copy constructor60 61// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]] 'void (const hlsl::[[RESOURCE]] &)' inline62// CHECK-NEXT: ParmVarDecl {{.*}} other 'const hlsl::[[RESOURCE]] &'63// CHECK-NEXT: CompoundStmt64// CHECK-NEXT: BinaryOperator {{.*}} '='65// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle66// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this67// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle68// CHECK-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]' ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]] &'69// CHECK-NEXT: AlwaysInlineAttr70 71// operator=72 73// CHECK: CXXMethodDecl {{.*}} operator= 'hlsl::[[RESOURCE]] &(const hlsl::[[RESOURCE]] &)'74// CHECK-NEXT: ParmVarDecl {{.*}} other 'const hlsl::[[RESOURCE]] &'75// CHECK-NEXT: CompoundStmt76// CHECK-NEXT: BinaryOperator {{.*}} '='77// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle78// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this79// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle80// CHECK-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]' ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]] &'81// CHECK-NEXT: ReturnStmt82// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this83// CHECK-NEXT: AlwaysInlineAttr84 85// Static __createFromBinding method86 87// CHECK: CXXMethodDecl {{.*}} __createFromBinding 'hlsl::[[RESOURCE]] (unsigned int, unsigned int, int, unsigned int, const char *)' static88// CHECK-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'89// CHECK-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'90// CHECK-NEXT: ParmVarDecl {{.*}} range 'int'91// CHECK-NEXT: ParmVarDecl {{.*}} index 'unsigned int'92// CHECK-NEXT: ParmVarDecl {{.*}} name 'const char *'93// CHECK-NEXT: CompoundStmt94// CHECK-NEXT: DeclStmt95// CHECK-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]'96// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='97// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle98// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'99// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'100// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' <BuiltinFnToFnPtr>101// CHECK-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'102// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle103// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'104// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'105// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'106// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'107// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'108// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'109// CHECK-NEXT: ReturnStmt110// CHECK-NEXT: CXXConstructExpr {{.*}} 'hlsl::[[RESOURCE]]' 'void (const hlsl::[[RESOURCE]] &)'111// CHECK-NEXT: ImplicitCastExpr {{.*}} 'const hlsl::[[RESOURCE]]' xvalue <NoOp>112// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'113// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline114 115// Static __createFromImplicitBinding method116 117// CHECK: CXXMethodDecl {{.*}} __createFromImplicitBinding 'hlsl::[[RESOURCE]] (unsigned int, unsigned int, int, unsigned int, const char *)' static118// CHECK-NEXT: ParmVarDecl {{.*}} orderId 'unsigned int'119// CHECK-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'120// CHECK-NEXT: ParmVarDecl {{.*}} range 'int'121// CHECK-NEXT: ParmVarDecl {{.*}} index 'unsigned int'122// CHECK-NEXT: ParmVarDecl {{.*}} name 'const char *'123// CHECK-NEXT: CompoundStmt {{.*}}124// CHECK-NEXT: DeclStmt {{.*}}125// CHECK-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]'126// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='127// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle128// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'129// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'130// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' <BuiltinFnToFnPtr>131// CHECK-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'132// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle133// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'134// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'135// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'136// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'137// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'138// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'139// CHECK-NEXT: ReturnStmt140// CHECK-NEXT: CXXConstructExpr {{.*}} 'hlsl::[[RESOURCE]]' 'void (const hlsl::[[RESOURCE]] &)'141// CHECK-NEXT: ImplicitCastExpr {{.*}} 'const hlsl::[[RESOURCE]]' xvalue <NoOp>142// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'143// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline144 145// GetDimensions method146 147// CHECK-NEXT: CXXMethodDecl {{.*}} GetDimensions 'void (out unsigned int)'148// CHECK-NEXT: ParmVarDecl {{.*}} dim 'unsigned int &__restrict'149// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out150// CHECK-NEXT: CompoundStmt151// CHECK-NEXT: CallExpr {{.*}} 'void'152// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' <BuiltinFnToFnPtr>153// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept'154// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}}155// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this156// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'dim' 'unsigned int &__restrict'157// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline158 159// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'const char8_t &(unsigned int) const'160// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'char8_t &(unsigned int)'161