Skip to content

Commit e97fa2a

Browse files
committed
Fix const on references.
1 parent 81c31fc commit e97fa2a

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -754,11 +754,18 @@ BuiltinTypeDeclBuilder::addHandleAccessFunction(DeclarationName &Name,
754754
QualType AddrSpaceElemTy =
755755
AST.getAddrSpaceQualType(ElemTy, LangAS::hlsl_device);
756756
QualType ElemPtrTy = AST.getPointerType(AddrSpaceElemTy);
757-
// QualType ReturnTy = (IsRef ? AST.getLValueReferenceType(ElemTy) : ElemTy);
758-
QualType ReturnTy =
759-
(IsRef ? AST.getLValueReferenceType(AddrSpaceElemTy) : ElemTy);
760-
if (IsConst)
761-
ReturnTy.addConst();
757+
QualType ReturnTy;
758+
759+
if (IsRef) {
760+
ReturnTy = AddrSpaceElemTy;
761+
if (IsConst)
762+
ReturnTy.addConst();
763+
ReturnTy = AST.getLValueReferenceType(ReturnTy);
764+
} else {
765+
ReturnTy = ElemTy;
766+
if (IsConst)
767+
ReturnTy.addConst();
768+
}
762769

763770
return BuiltinTypeMethodBuilder(*this, Name, ReturnTy, IsConst)
764771
.addParam("Index", AST.UnsignedIntTy)

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2379,10 +2379,10 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
23792379
auto *ResourceTy =
23802380
TheCall->getArg(0)->getType()->castAs<HLSLAttributedResourceType>();
23812381
QualType ContainedTy = ResourceTy->getContainedType();
2382-
auto returnType =
2382+
auto ReturnType =
23832383
SemaRef.Context.getAddrSpaceQualType(ContainedTy, LangAS::hlsl_device);
2384-
returnType = SemaRef.Context.getPointerType(returnType);
2385-
TheCall->setType(returnType);
2384+
ReturnType = SemaRef.Context.getPointerType(ReturnType);
2385+
TheCall->setType(ReturnType);
23862386
TheCall->setValueKind(VK_LValue);
23872387

23882388
break;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ RESOURCE<float> Buffer;
8989
// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]
9090
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
9191

92-
// CHECK-SUBSCRIPT: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &const (unsigned int) const'
92+
// CHECK-SUBSCRIPT: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(unsigned int) const'
9393
// CHECK-SUBSCRIPT-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
9494
// CHECK-SUBSCRIPT-NEXT: CompoundStmt
9595
// CHECK-SUBSCRIPT-NEXT: ReturnStmt
96-
// CHECK-SUBSCRIPT-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow
96+
// CHECK-SUBSCRIPT-NEXT: UnaryOperator {{.*}} {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow
9797
// CHECK-SUBSCRIPT-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'
9898
// CHECK-SUBSCRIPT-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'
9999
// CHECK-SUBSCRIPT-NEXT: MemberExpr {{.*}} '__hlsl_resource_t

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ RESOURCE<float> Buffer;
5656
// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
5757
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
5858

59-
// CHECK: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &const (unsigned int) const'
59+
// CHECK: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(unsigned int) const'
6060
// CHECK-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
6161
// CHECK-NEXT: CompoundStmt
6262
// CHECK-NEXT: ReturnStmt

0 commit comments

Comments
 (0)