Throw unsupported when reduction constraining dynamic subarray (#8111)
Signed-off-by: Kornel Uriasz <kuriasz@antmicro.com>
This commit is contained in:
parent
abf199cf0e
commit
2957939d4b
|
|
@ -2740,6 +2740,12 @@ class ConstraintExprVisitor final : public VNVisitor {
|
||||||
nodep->v3fatalSrc("Method not handled in constraints? " << nodep);
|
nodep->v3fatalSrc("Method not handled in constraints? " << nodep);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!VN_IS(nodep->fromp(), VarRef)) {
|
||||||
|
// Non-dynamic subarrays and member arrays are handled in other parts of code
|
||||||
|
nodep->v3warn(CONSTRAINTIGN, "Unsupported: Array reduction constraint on dynamic "
|
||||||
|
"array inside array or struct");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Create loop variable and header
|
// Create loop variable and header
|
||||||
AstVar* const loopVarp
|
AstVar* const loopVarp
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:25:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
25 | a + arr[0].sum() == 10;
|
||||||
|
| ^~~
|
||||||
|
... For warning description see https://verilator.org/warn/CONSTRAINTIGN?v=latest
|
||||||
|
... Use "/* verilator lint_off CONSTRAINTIGN */" and lint_on around source to disable this message.
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:26:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
26 | a + arr[1].product() == 10;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:27:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
27 | a + arr[2].xor() == 10;
|
||||||
|
| ^~~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:28:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
28 | a + arr[3].or() == 10;
|
||||||
|
| ^~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:29:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
29 | a + arr[4].and() == 10;
|
||||||
|
| ^~~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:33:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
33 | a + sc.arr.sum() == 10;
|
||||||
|
| ^~~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:34:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
34 | a + sc.arr.product() == 10;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:35:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
35 | a + sc.arr.xor() == 10;
|
||||||
|
| ^~~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:36:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
36 | a + sc.arr.or() == 10;
|
||||||
|
| ^~
|
||||||
|
%Warning-CONSTRAINTIGN: t/t_constraint_red_arr_unsup.v:37:16: Unsupported: Array reduction constraint on dynamic array inside array or struct
|
||||||
|
37 | a + sc.arr.and() == 10;
|
||||||
|
| ^~~
|
||||||
|
%Error: Exiting due to
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of either the GNU Lesser General Public License Version 3
|
||||||
|
# or the Perl Artistic License Version 2.0.
|
||||||
|
# SPDX-FileCopyrightText: 2026 Wilson Snyder
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('linter')
|
||||||
|
|
||||||
|
test.lint(fails=test.vlt_all, expect_filename=test.golden_filename)
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain
|
||||||
|
// SPDX-FileCopyrightText: 2026 Antmicro
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
class ReductionDynSubArr;
|
||||||
|
rand int arr[5][];
|
||||||
|
rand int a;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
rand int arr[];
|
||||||
|
} Subcls;
|
||||||
|
|
||||||
|
rand Subcls sc;
|
||||||
|
|
||||||
|
function new();
|
||||||
|
sc.arr = new[5];
|
||||||
|
foreach (arr[i]) begin
|
||||||
|
arr[i] = new [5];
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
constraint red_a {
|
||||||
|
a + arr[0].sum() == 10;
|
||||||
|
a + arr[1].product() == 10;
|
||||||
|
a + arr[2].xor() == 10;
|
||||||
|
a + arr[3].or() == 10;
|
||||||
|
a + arr[4].and() == 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
constraint red_b {
|
||||||
|
a + sc.arr.sum() == 10;
|
||||||
|
a + sc.arr.product() == 10;
|
||||||
|
a + sc.arr.xor() == 10;
|
||||||
|
a + sc.arr.or() == 10;
|
||||||
|
a + sc.arr.and() == 10;
|
||||||
|
}
|
||||||
|
endclass : ReductionDynSubArr
|
||||||
|
|
||||||
|
module t;
|
||||||
|
initial begin
|
||||||
|
automatic ReductionDynSubArr sub = new();
|
||||||
|
void'(sub.randomize());
|
||||||
|
end
|
||||||
|
endmodule : t
|
||||||
Loading…
Reference in New Issue