Add a regression test for functions with queue return type
Check that a queue type is supported for the return type of a function. Make sure that the queue is not cleared in between invocations for non-automatic functions. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
parent
27f3fcc5f1
commit
393c7a3b49
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Check that a queue return type is supported for functions
|
||||||
|
|
||||||
|
module test;
|
||||||
|
|
||||||
|
typedef int Q[$];
|
||||||
|
|
||||||
|
// Since this is not an automatic function calling this repeatetly will
|
||||||
|
// append to the same queue.
|
||||||
|
function Q f1(int x);
|
||||||
|
f1.push_back(1 + x);
|
||||||
|
f1.push_back(2 + x);
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
// Since this function is automatic a new queue will be created each time it
|
||||||
|
// is called.
|
||||||
|
function automatic Q f2(int x);
|
||||||
|
f2.push_back(1 + x);
|
||||||
|
f2.push_back(2 + x);
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
Q a, b, c, d;
|
||||||
|
|
||||||
|
a = f1(0);
|
||||||
|
// `a` should be a copy and not affected by the second call
|
||||||
|
b = f1(2);
|
||||||
|
|
||||||
|
c = f2(0);
|
||||||
|
d = f2(2);
|
||||||
|
|
||||||
|
if (a.size() == 2 && a[0] == 1 && a[1] == 2 &&
|
||||||
|
b.size() == 4 && b[0] == 1 && b[1] == 2 && b[2] == 3 && b[3] == 4 &&
|
||||||
|
c.size() == 2 && c[0] == 1 && c[1] == 2 &&
|
||||||
|
d.size() == 2 && d[0] == 3 && d[1] == 4) begin
|
||||||
|
$display("PASSED");
|
||||||
|
end else begin
|
||||||
|
$display("FAILED");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
@ -575,6 +575,7 @@ sv_port_default14 CE,-g2009 ivltests
|
||||||
sv_queue1 normal,-g2009 ivltests
|
sv_queue1 normal,-g2009 ivltests
|
||||||
sv_queue2 normal,-g2009 ivltests
|
sv_queue2 normal,-g2009 ivltests
|
||||||
sv_queue3 normal,-g2009 ivltests
|
sv_queue3 normal,-g2009 ivltests
|
||||||
|
sv_queue_function normal,-g2009 ivltests
|
||||||
sv_queue_parray normal,-g2009,-pfileline=1 ivltests gold=sv_queue_parray.gold
|
sv_queue_parray normal,-g2009,-pfileline=1 ivltests gold=sv_queue_parray.gold
|
||||||
sv_queue_parray_bounded normal,-g2009,-pfileline=1 ivltests gold=sv_queue_parray_bounded.gold
|
sv_queue_parray_bounded normal,-g2009,-pfileline=1 ivltests gold=sv_queue_parray_bounded.gold
|
||||||
sv_queue_parray_fail CE,-g2009 ivltests gold=sv_queue_parray_fail.gold
|
sv_queue_parray_fail CE,-g2009 ivltests gold=sv_queue_parray_fail.gold
|
||||||
|
|
|
||||||
|
|
@ -463,6 +463,7 @@ pr3390385b CE,-g2009 ivltests # ++
|
||||||
pr3390385c CE,-g2009 ivltests # ++
|
pr3390385c CE,-g2009 ivltests # ++
|
||||||
pr3390385d CE,-g2009 ivltests # ++
|
pr3390385d CE,-g2009 ivltests # ++
|
||||||
pr3462145 CE,-g2009 ivltests # ++
|
pr3462145 CE,-g2009 ivltests # ++
|
||||||
|
sv_queue_function CE,-g2009,-pallowsigned=1 ivltests # queue
|
||||||
sv_typedef_darray_base1 CE,-g2009 ivltests # Dyanmic array
|
sv_typedef_darray_base1 CE,-g2009 ivltests # Dyanmic array
|
||||||
sv_typedef_darray_base2 CE,-g2009 ivltests # Dyanmic array
|
sv_typedef_darray_base2 CE,-g2009 ivltests # Dyanmic array
|
||||||
sv_typedef_darray_base3 CE,-g2009 ivltests # Dyanmic array
|
sv_typedef_darray_base3 CE,-g2009 ivltests # Dyanmic array
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue