Skip to content

Commit

Permalink
fix merge error
Browse files Browse the repository at this point in the history
  • Loading branch information
ArielG-NV committed Sep 5, 2024
1 parent 997d1f0 commit 6d40ddc
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 85 deletions.
66 changes: 0 additions & 66 deletions source/slang/slang-check-decl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1944,72 +1944,6 @@ namespace Slang
return true;
}

bool isDefaultInitializable(VarDeclBase* varDecl)
{
if (!DiagnoseIsAllowedInitExpr(varDecl, nullptr))
return false;

// Find struct and modifiers associated with varDecl
StructDecl* structDecl = as<StructDecl>(varDecl);
if (auto declRefType = as<DeclRefType>(varDecl->getType()))
{
if (auto genericAppRefDecl = as<GenericAppDeclRef>(declRefType->getDeclRefBase()))
{
auto baseGenericRefType = genericAppRefDecl->getBase()->getDecl();
if (auto baseTypeStruct = as<StructDecl>(baseGenericRefType))
{
structDecl = baseTypeStruct;
}
else if (auto genericDecl = as<GenericDecl>(baseGenericRefType))
{
if(auto innerTypeStruct = as<StructDecl>(genericDecl->inner))
structDecl = innerTypeStruct;
}
}
}
if (structDecl)
{
// find if a type is non-copyable
if (structDecl->findModifier<NonCopyableTypeAttribute>())
return false;
}

return true;
}

static Expr* constructDefaultInitExprForVar(SemanticsVisitor* visitor, VarDeclBase* varDecl)
{
if (!varDecl->type || !varDecl->type.type)
return nullptr;

if (!isDefaultInitializable(varDecl))
return nullptr;

ConstructorDecl* defaultCtor = nullptr;
auto declRefType = as<DeclRefType>(varDecl->type.type);
if (declRefType)
{
if (auto structDecl = as<StructDecl>(declRefType->getDeclRef().getDecl()))
{
defaultCtor = _getDefaultCtor(structDecl);
}
}

if (defaultCtor)
{
auto* invoke = visitor->getASTBuilder()->create<InvokeExpr>();
auto member = visitor->getASTBuilder()->getMemberDeclRef(declRefType->getDeclRef(), defaultCtor);
invoke->functionExpr = visitor->ConstructDeclRefExpr(member, nullptr, defaultCtor->getName(), defaultCtor->loc, nullptr);
return invoke;
}
else
{
auto* defaultCall = visitor->getASTBuilder()->create<DefaultConstructExpr>();
defaultCall->type = QualType(varDecl->type);
return defaultCall;
}
}

void SemanticsDeclBodyVisitor::checkVarDeclCommon(VarDeclBase* varDecl)
{
DiagnoseIsAllowedInitExpr(varDecl, getSink());
Expand Down
22 changes: 3 additions & 19 deletions source/slang/slang-constructor-utility.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,22 +71,6 @@ namespace Slang
return ctorList;
}

bool DiagnoseIsAllowedInitExpr(VarDeclBase* varDecl, DiagnosticSink* sink)
{
if (!varDecl)
return true;

// find groupshared modifier
if (varDecl->findModifier<HLSLGroupSharedModifier>())
{
if (sink && varDecl->initExpr)
sink->diagnose(varDecl, Diagnostics::cannotHaveInitializer, varDecl, "groupshared");
return false;
}

return true;
}

bool isDefaultInitializable(Type* varDeclType, VarDeclBase* associatedDecl)
{
if (!DiagnoseIsAllowedInitExpr(associatedDecl, nullptr))
Expand Down Expand Up @@ -146,7 +130,7 @@ namespace Slang
{
auto* invoke = visitor->getASTBuilder()->create<InvokeExpr>();
auto member = visitor->getASTBuilder()->getMemberDeclRef(declRefType->getDeclRef(), defaultCtor);
invoke->functionExpr = visitor->ConstructDeclRefExpr(member, nullptr, defaultCtor->loc, nullptr);
invoke->functionExpr = visitor->ConstructDeclRefExpr(member, nullptr, defaultCtor->getName(), defaultCtor->loc, nullptr);
invoke->type = varDeclType.type;
return invoke;
}
Expand All @@ -171,7 +155,7 @@ namespace Slang
{
auto* invoke = visitor->getASTBuilder()->create<InvokeExpr>();
auto member = visitor->getASTBuilder()->getMemberDeclRef(structDecl->getDefaultDeclRef(), defaultCtor);
invoke->functionExpr = visitor->ConstructDeclRefExpr(member, nullptr, defaultCtor->loc, nullptr);
invoke->functionExpr = visitor->ConstructDeclRefExpr(member, nullptr, defaultCtor->getName(), defaultCtor->loc, nullptr);
invoke->type = structDeclType;
return invoke;
}
Expand Down Expand Up @@ -222,7 +206,7 @@ namespace Slang
else
member = visitor->getASTBuilder()->getMemberDeclRef(structDecl, zeroInitListFunc);

invoke->functionExpr = visitor->ConstructDeclRefExpr(member, nullptr, zeroInitListFunc->loc, nullptr);
invoke->functionExpr = visitor->ConstructDeclRefExpr(member, nullptr, zeroInitListFunc->getName(), zeroInitListFunc->loc, nullptr);
invoke->type = structDeclType;
return invoke;
}
Expand Down

0 comments on commit 6d40ddc

Please sign in to comment.