Skip to content

Commit 9f892c9

Browse files
authored
use memberExpr instead of varExpr (shader-slang#4008)
1 parent 484c1e6 commit 9f892c9

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

source/slang/slang-check-decl.cpp

+13-5
Original file line numberDiff line numberDiff line change
@@ -7464,6 +7464,10 @@ namespace Slang
74647464

74657465
for (auto ctor : structDeclInfo.ctorList)
74667466
{
7467+
ThisExpr* thisExpr = m_astBuilder->create<ThisExpr>();
7468+
thisExpr->scope = ctor->ownedScope;
7469+
thisExpr->type = ctor->returnType.type;
7470+
74677471
auto seqStmt = _ensureCtorBodyIsSeqStmt(m_astBuilder, ctor);
74687472
auto seqStmtChild = m_astBuilder->create<SeqStmt>();
74697473
seqStmtChild->stmts.reserve(structDecl->members.getCount());
@@ -7474,12 +7478,16 @@ namespace Slang
74747478
|| !varDeclBase->initExpr)
74757479
continue;
74767480

7477-
VarExpr* memberVarExpr = m_astBuilder->create<VarExpr>();
7478-
memberVarExpr->scope = ctor->ownedScope;
7479-
memberVarExpr->name = m->getName();
7481+
MemberExpr* memberExpr = m_astBuilder->create<MemberExpr>();
7482+
memberExpr->baseExpression = thisExpr;
7483+
memberExpr->declRef = m->getDefaultDeclRef();
7484+
memberExpr->scope = ctor->ownedScope;
7485+
memberExpr->loc = m->loc;
7486+
memberExpr->name = m->getName();
7487+
memberExpr->type = DeclRefType::create(getASTBuilder(), m->getDefaultDeclRef());
74807488

74817489
auto assign = m_astBuilder->create<AssignExpr>();
7482-
assign->left = memberVarExpr;
7490+
assign->left = memberExpr;
74837491
assign->right = varDeclBase->initExpr;
74847492
assign->loc = m->loc;
74857493

@@ -7492,7 +7500,7 @@ namespace Slang
74927500
checkedMemberVarExpr = cachedDeclToCheckedVar[m];
74937501
else
74947502
{
7495-
checkedMemberVarExpr = CheckTerm(memberVarExpr);
7503+
checkedMemberVarExpr = CheckTerm(memberExpr);
74967504
cachedDeclToCheckedVar.add({ m, checkedMemberVarExpr });
74977505
}
74987506
if (!checkedMemberVarExpr->type.isLeftValue)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain
2+
//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly
3+
//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain
4+
//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain
5+
6+
//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer
7+
RWStructuredBuffer<int> outputBuffer;
8+
9+
struct TextureHandle
10+
{
11+
uint32_t packedData = 0;
12+
__init(uint32_t packedData) { this.packedData = packedData; }
13+
};
14+
15+
[numthreads(1, 1, 1)]
16+
void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID)
17+
{
18+
TextureHandle texHandle = TextureHandle(1);
19+
// BUF: 1
20+
outputBuffer[0] = true
21+
&& texHandle.packedData == 1
22+
;
23+
}

0 commit comments

Comments
 (0)