Fix `rand` dynamic arrays with null handles (#5594)

l
This commit is contained in:
Ryszard Rozak 2024-11-08 12:53:43 +01:00 committed by GitHub
parent 2e1128b417
commit 6083480abb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 1 deletions

View File

@ -1471,9 +1471,12 @@ class RandomizeVisitor final : public VNVisitor {
AstMethodCall* const callp = new AstMethodCall{fl, exprp, "randomize", nullptr};
callp->taskp(memberFuncp);
callp->dtypeFrom(memberFuncp);
return new AstAssign{
AstAssign* const assignp = new AstAssign{
fl, new AstVarRef{fl, outputVarp, VAccess::WRITE},
new AstAnd{fl, new AstVarRef{fl, outputVarp, VAccess::READ}, callp}};
return new AstIf{
fl, new AstNeq{fl, exprp->cloneTree(false), new AstConst{fl, AstConst::Null{}}},
assignp};
} else if (AstDynArrayDType* const dynarrayDtp = VN_CAST(memberDtp, DynArrayDType)) {
return createArrayForeachLoop(fl, dynarrayDtp, exprp, outputVarp);
} else if (AstQueueDType* const queueDtp = VN_CAST(memberDtp, QueueDType)) {

View File

@ -72,6 +72,7 @@ class unconstrained_dynamic_array_test;
rand int dynamic_array_1d[];
rand int dynamic_array_2d[][];
rand Cls class_dynamic_array[];
rand Cls class_dynamic_array_null[];
function new();
// Initialize 1D dynamic array
@ -94,6 +95,8 @@ class unconstrained_dynamic_array_test;
class_dynamic_array[i] = new;
end
class_dynamic_array_null = new[2];
endfunction
function void check_randomization();
@ -108,6 +111,9 @@ class unconstrained_dynamic_array_test;
foreach (class_dynamic_array[i]) begin
`check_rand(this, class_dynamic_array[i].x)
end
foreach (class_dynamic_array_null[i]) begin
if (class_dynamic_array_null[i] != null) $stop;
end
endfunction
endclass