Skip to content

Commit dfc07bd

Browse files
committed
Remove handle constructor, update create methods body and expected AST structure
1 parent 1e6f4de commit dfc07bd

File tree

7 files changed

+107
-115
lines changed

7 files changed

+107
-115
lines changed

clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp

Lines changed: 59 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,13 @@ struct BuiltinTypeMethodBuilder {
168168
template <typename... Ts>
169169
BuiltinTypeMethodBuilder &callBuiltin(StringRef BuiltinName,
170170
QualType ReturnType, Ts... ArgSpecs);
171-
template <typename T> BuiltinTypeMethodBuilder &callHandleCtor(T HandleExpr);
172171
template <typename TLHS, typename TRHS>
173172
BuiltinTypeMethodBuilder &assign(TLHS LHS, TRHS RHS);
174173
template <typename T> BuiltinTypeMethodBuilder &dereference(T Ptr);
174+
template <typename T> BuiltinTypeMethodBuilder &getResourceHandle(T ResourceRecord);
175+
template <typename TResource, typename TValue>
176+
BuiltinTypeMethodBuilder &setHandleFieldOnResource(TResource ResourceRecord, TValue HandleValue);
177+
template <typename T> BuiltinTypeMethodBuilder &returnValue(T ReturnValue);
175178
BuiltinTypeDeclBuilder &finalize(CXXMethodDecl **OutMethod = nullptr);
176179
Expr *getResourceHandleExpr();
177180

@@ -503,25 +506,6 @@ BuiltinTypeMethodBuilder::callBuiltin(StringRef BuiltinName,
503506
return *this;
504507
}
505508

506-
template <typename T>
507-
BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::callHandleCtor(T Handle) {
508-
ensureCompleteDecl();
509-
510-
Expr *HandleExpr = convertPlaceholder(Handle);
511-
512-
ASTContext &AST = DeclBuilder.SemaRef.getASTContext();
513-
QualType RecordType = AST.getTypeDeclType(cast<TypeDecl>(DeclBuilder.Record));
514-
CXXConstructorDecl *Ctor = DeclBuilder.HandleCtor;
515-
assert(Ctor && "Handle constructor not created");
516-
517-
CXXConstructExpr *CtorExpr = CXXConstructExpr::Create(
518-
AST, RecordType, SourceLocation(), Ctor, false, {HandleExpr}, false,
519-
false, false, false, CXXConstructionKind::Complete, SourceRange());
520-
521-
StmtsList.push_back(CtorExpr);
522-
return *this;
523-
}
524-
525509
template <typename TLHS, typename TRHS>
526510
BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::assign(TLHS LHS, TRHS RHS) {
527511
Expr *LHSExpr = convertPlaceholder(LHS);
@@ -546,6 +530,51 @@ BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::dereference(T Ptr) {
546530
return *this;
547531
}
548532

533+
template <typename T>
534+
BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::getResourceHandle(T ResourceRecord) {
535+
ensureCompleteDecl();
536+
537+
Expr *ResourceExpr = convertPlaceholder(ResourceRecord);
538+
539+
ASTContext &AST = DeclBuilder.SemaRef.getASTContext();
540+
FieldDecl *HandleField = DeclBuilder.getResourceHandleField();
541+
MemberExpr *HandleExpr = MemberExpr::CreateImplicit(
542+
AST, ResourceExpr, false, HandleField, HandleField->getType(), VK_LValue,
543+
OK_Ordinary);
544+
StmtsList.push_back(HandleExpr);
545+
return *this;
546+
}
547+
548+
template <typename TResource, typename TValue>
549+
BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::setHandleFieldOnResource(TResource ResourceRecord, TValue HandleValue) {
550+
ensureCompleteDecl();
551+
552+
Expr *ResourceExpr = convertPlaceholder(ResourceRecord);
553+
Expr *HandleValueExpr = convertPlaceholder(HandleValue);
554+
555+
ASTContext &AST = DeclBuilder.SemaRef.getASTContext();
556+
FieldDecl *HandleField = DeclBuilder.getResourceHandleField();
557+
MemberExpr *HandleMemberExpr = MemberExpr::CreateImplicit(
558+
AST, ResourceExpr, false, HandleField, HandleField->getType(), VK_LValue,
559+
OK_Ordinary);
560+
Stmt *AssignStmt = BinaryOperator::Create(
561+
DeclBuilder.SemaRef.getASTContext(), HandleMemberExpr, HandleValueExpr, BO_Assign,
562+
HandleMemberExpr->getType(), ExprValueKind::VK_PRValue,
563+
ExprObjectKind::OK_Ordinary, SourceLocation(), FPOptionsOverride());
564+
StmtsList.push_back(AssignStmt);
565+
return *this;
566+
}
567+
568+
template <typename T>
569+
BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::returnValue(T ReturnValue) {
570+
ensureCompleteDecl();
571+
572+
Expr *ReturnValueExpr = convertPlaceholder(ReturnValue);
573+
ASTContext &AST = DeclBuilder.SemaRef.getASTContext();
574+
StmtsList.push_back(ReturnStmt::Create(AST, SourceLocation(), ReturnValueExpr, nullptr));
575+
return *this;
576+
}
577+
549578
BuiltinTypeDeclBuilder &
550579
BuiltinTypeMethodBuilder::finalize(CXXMethodDecl **OutMethod) {
551580
assert(!DeclBuilder.Record->isCompleteDefinition() &&
@@ -699,23 +728,6 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addDefaultConstructor() {
699728
.finalize();
700729
}
701730

702-
BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addHandleConstructor() {
703-
if (Record->isCompleteDefinition())
704-
return *this;
705-
706-
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
707-
ASTContext &AST = SemaRef.getASTContext();
708-
QualType HandleType = getResourceHandleField()->getType();
709-
CXXMethodDecl *OutMethod = nullptr;
710-
711-
BuiltinTypeMethodBuilder(*this, "", AST.VoidTy, false, true, AS_public)
712-
.addParam("handle", HandleType)
713-
.assign(PH::Handle, PH::_0)
714-
.finalize(&OutMethod);
715-
HandleCtor = cast<CXXConstructorDecl>(OutMethod);
716-
return *this;
717-
}
718-
719731
BuiltinTypeDeclBuilder &
720732
BuiltinTypeDeclBuilder::addHandleConstructorFromBinding() {
721733
if (Record->isCompleteDefinition())
@@ -775,10 +787,12 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addCreateFromBinding() {
775787
.addParam("range", AST.IntTy)
776788
.addParam("index", AST.UnsignedIntTy)
777789
.addParam("name", AST.getPointerType(AST.CharTy.withConst()))
778-
.createLocalVar("tmp", HandleType)
790+
.createLocalVar("tmp", RecordType)
791+
.getResourceHandle(PH::LocalVar_0)
779792
.callBuiltin("__builtin_hlsl_resource_handlefrombinding", HandleType,
780-
PH::LocalVar_0, PH::_0, PH::_1, PH::_2, PH::_3, PH::_4)
781-
.callHandleCtor(PH::LastStmt)
793+
PH::LastStmt, PH::_0, PH::_1, PH::_2, PH::_3, PH::_4)
794+
.setHandleFieldOnResource(PH::LocalVar_0, PH::LastStmt)
795+
.returnValue(PH::LocalVar_0)
782796
.finalize();
783797
}
784798

@@ -799,11 +813,13 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addCreateFromImplicitBinding() {
799813
.addParam("range", AST.IntTy)
800814
.addParam("index", AST.UnsignedIntTy)
801815
.addParam("name", AST.getPointerType(AST.CharTy.withConst()))
802-
.createLocalVar("tmp", HandleType)
816+
.createLocalVar("tmp", RecordType)
817+
.getResourceHandle(PH::LocalVar_0)
803818
.callBuiltin("__builtin_hlsl_resource_handlefromimplicitbinding",
804-
HandleType, PH::LocalVar_0, PH::_0, PH::_1, PH::_2, PH::_3,
819+
HandleType, PH::LastStmt, PH::_0, PH::_1, PH::_2, PH::_3,
805820
PH::_4)
806-
.callHandleCtor(PH::LastStmt)
821+
.setHandleFieldOnResource(PH::LocalVar_0, PH::LastStmt)
822+
.returnValue(PH::LocalVar_0)
807823
.finalize();
808824
}
809825

clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ class BuiltinTypeDeclBuilder {
8080

8181
// Builtin types constructors
8282
BuiltinTypeDeclBuilder &addDefaultConstructor();
83-
BuiltinTypeDeclBuilder &addHandleConstructor();
8483
BuiltinTypeDeclBuilder &addHandleConstructorFromBinding();
8584
BuiltinTypeDeclBuilder &addHandleConstructorFromImplicitBinding();
8685

clang/lib/Sema/HLSLExternalSemaSource.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ static BuiltinTypeDeclBuilder setupBufferType(CXXRecordDecl *Decl, Sema &S,
132132
return BuiltinTypeDeclBuilder(S, Decl)
133133
.addHandleMember(RC, IsROV, RawBuffer)
134134
.addDefaultConstructor()
135-
.addHandleConstructor()
136135
.addCreateFromBinding()
137136
.addCreateFromImplicitBinding()
138137
.addHandleConstructorFromBinding()

clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,6 @@ RESOURCE Buffer;
5656
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this
5757
// CHECK-NEXT: AlwaysInlineAttr
5858

59-
// Constructor from handle
60-
61-
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]] 'void (__hlsl_resource_t
62-
// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]
63-
// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
64-
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(char8_t)]]
65-
// CHECK-SAME: )' inline
66-
// CHECK-NEXT: ParmVarDecl {{.*}} handle '__hlsl_resource_t
67-
// CHECK-NEXT: CompoundStmt {{.*}}
68-
// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}} '='
69-
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}} lvalue .__handle
70-
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this
71-
// CHECK-NEXT: DeclRefExpr {{.*}} '__hlsl_resource_t {{.*}}' ParmVar {{.*}} 'handle' '__hlsl_resource_t {{.*}}
72-
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
73-
7459
// Static __createFromBinding method
7560

7661
// CHECK: CXXMethodDecl {{.*}} __createFromBinding 'hlsl::[[RESOURCE]] (unsigned int, unsigned int, int, unsigned int, const char *)' static
@@ -81,18 +66,22 @@ RESOURCE Buffer;
8166
// CHECK-NEXT: ParmVarDecl {{.*}} name 'const char *'
8267
// CHECK-NEXT: CompoundStmt
8368
// CHECK-NEXT: DeclStmt
84-
// CHECK-NEXT: VarDecl {{.*}} tmp '__hlsl_resource_t {{.*}}'
85-
// CHECK-NEXT: ReturnStmt {{.*}}
86-
// CHECK-NEXT: CXXConstructExpr {{.*}} 'hlsl::[[RESOURCE]]' 'void (__hlsl_resource_t {{.*}})'
69+
// CHECK-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]'
70+
// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
71+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
72+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'
8773
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'
8874
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' <BuiltinFnToFnPtr>
8975
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept'
90-
// CHECK-NEXT: DeclRefExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue Var {{.*}} 'tmp' '__hlsl_resource_t {{.*}}'
76+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
77+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'
9178
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'
9279
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
9380
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
9481
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
9582
// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'
83+
// CHECK-NEXT: ReturnStmt
84+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'
9685
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
9786

9887
// Static __createFromImplicitBinding method
@@ -105,18 +94,22 @@ RESOURCE Buffer;
10594
// CHECK-NEXT: ParmVarDecl {{.*}} name 'const char *'
10695
// CHECK-NEXT: CompoundStmt {{.*}}
10796
// CHECK-NEXT: DeclStmt {{.*}}
108-
// CHECK-NEXT: VarDecl {{.*}} tmp '__hlsl_resource_t {{.*}}'
109-
// CHECK-NEXT: ReturnStmt {{.*}}
110-
// CHECK-NEXT: CXXConstructExpr {{.*}} 'hlsl::[[RESOURCE]]' 'void (__hlsl_resource_t {{.*}})'
97+
// CHECK-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]'
98+
// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
99+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
100+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'
111101
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'
112102
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' <BuiltinFnToFnPtr>
113103
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept'
114-
// CHECK-NEXT: DeclRefExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue Var {{.*}} 'tmp' '__hlsl_resource_t {{.*}}'
104+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
105+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'
115106
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
116107
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
117108
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
118109
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
119110
// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'
111+
// CHECK-NEXT: ReturnStmt
112+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]'
120113
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
121114

122115
// Constructor from binding

clang/test/AST/HLSL/StructuredBuffers-AST.hlsl

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,6 @@ RESOURCE<float> Buffer;
103103
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
104104
// CHECK-NEXT: AlwaysInlineAttr
105105

106-
// Constructor from handle
107-
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void (__hlsl_resource_t
108-
// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]
109-
// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
110-
// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]
111-
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
112-
// CHECK-SAME: )' inline
113-
// CHECK-NEXT: ParmVarDecl {{.*}} handle '__hlsl_resource_t
114-
// CHECK-NEXT: CompoundStmt {{.*}}
115-
// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}} '='
116-
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}} lvalue .__handle
117-
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
118-
// CHECK-NEXT: DeclRefExpr {{.*}} '__hlsl_resource_t {{.*}}' ParmVar {{.*}} 'handle' '__hlsl_resource_t {{.*}}
119-
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
120-
121106
// Static __createFromBinding method
122107

123108
// CHECK: CXXMethodDecl {{.*}} __createFromBinding 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *)' static
@@ -128,18 +113,22 @@ RESOURCE<float> Buffer;
128113
// CHECK-NEXT: ParmVarDecl {{.*}} name 'const char *'
129114
// CHECK-NEXT: CompoundStmt
130115
// CHECK-NEXT: DeclStmt
131-
// CHECK-NEXT: VarDecl {{.*}} tmp '__hlsl_resource_t {{.*}}'
132-
// CHECK-NEXT: ReturnStmt {{.*}}
133-
// CHECK-NEXT: CXXConstructExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' 'void (__hlsl_resource_t {{.*}})'
116+
// CHECK-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'
117+
// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
118+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
119+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
134120
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'
135121
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' <BuiltinFnToFnPtr>
136122
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept'
137-
// CHECK-NEXT: DeclRefExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue Var {{.*}} 'tmp' '__hlsl_resource_t {{.*}}'
123+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
124+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
138125
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'
139126
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
140127
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
141128
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
142129
// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'
130+
// CHECK-NEXT: ReturnStmt
131+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
143132
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
144133

145134
// Static __createFromImplicitBinding method
@@ -152,18 +141,22 @@ RESOURCE<float> Buffer;
152141
// CHECK-NEXT: ParmVarDecl {{.*}} name 'const char *'
153142
// CHECK-NEXT: CompoundStmt {{.*}}
154143
// CHECK-NEXT: DeclStmt {{.*}}
155-
// CHECK-NEXT: VarDecl {{.*}} tmp '__hlsl_resource_t {{.*}}'
156-
// CHECK-NEXT: ReturnStmt {{.*}}
157-
// CHECK-NEXT: CXXConstructExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' 'void (__hlsl_resource_t {{.*}})'
144+
// CHECK-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'
145+
// CHECK-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
146+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
147+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
158148
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}'
159149
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' <BuiltinFnToFnPtr>
160150
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept'
161-
// CHECK-NEXT: DeclRefExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue Var {{.*}} 'tmp' '__hlsl_resource_t {{.*}}'
151+
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
152+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
162153
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
163154
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
164155
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
165156
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
166157
// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'
158+
// CHECK-NEXT: ReturnStmt
159+
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
167160
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
168161

169162
// Constructor from binding

0 commit comments

Comments
 (0)