From f42ab248a4ad6ae77698fd35a6ef1ee15752162e Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sat, 16 Apr 2022 11:42:57 +0200 Subject: [PATCH] Add regression test for functions with bounded queue return type Check that the maximum size of a bounded queue is properly handled when being used as the return type for a function. Elements beyond the maximum size should be ignored. Signed-off-by: Lars-Peter Clausen --- ..._queue_function.v => sv_queue_function1.v} | 0 ivtest/ivltests/sv_queue_function2.v | 24 +++++++++++++++++++ ivtest/regress-sv.list | 3 ++- ivtest/regress-vlog95.list | 3 ++- 4 files changed, 28 insertions(+), 2 deletions(-) rename ivtest/ivltests/{sv_queue_function.v => sv_queue_function1.v} (100%) create mode 100644 ivtest/ivltests/sv_queue_function2.v diff --git a/ivtest/ivltests/sv_queue_function.v b/ivtest/ivltests/sv_queue_function1.v similarity index 100% rename from ivtest/ivltests/sv_queue_function.v rename to ivtest/ivltests/sv_queue_function1.v diff --git a/ivtest/ivltests/sv_queue_function2.v b/ivtest/ivltests/sv_queue_function2.v new file mode 100644 index 000000000..a9aec655b --- /dev/null +++ b/ivtest/ivltests/sv_queue_function2.v @@ -0,0 +1,24 @@ +// Check that bounded queues are supported as function return types. + +module test; + + typedef int Q[$:1]; + + function automatic Q f(); + // The last element should be discarded + return '{1, 2, 3}; + endfunction + + initial begin + int q[$]; + + q = f(); + + if (q.size() == 2 && q[0] == 1 && q[1] == 2) begin + $display("PASSED"); + end else begin + $display("FAILED"); + end + end + +endmodule diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index 5e10030ab..3561f1aa5 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -582,7 +582,8 @@ sv_port_default14 CE,-g2009 ivltests sv_queue1 normal,-g2009 ivltests sv_queue2 normal,-g2009 ivltests sv_queue3 normal,-g2009 ivltests -sv_queue_function normal,-g2009 ivltests +sv_queue_function1 normal,-g2009 ivltests +sv_queue_function2 normal,-g2009 ivltests 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_fail CE,-g2009 ivltests gold=sv_queue_parray_fail.gold diff --git a/ivtest/regress-vlog95.list b/ivtest/regress-vlog95.list index ddf6e57f6..c85adc362 100644 --- a/ivtest/regress-vlog95.list +++ b/ivtest/regress-vlog95.list @@ -470,7 +470,8 @@ pr3390385b CE,-g2009 ivltests # ++ pr3390385c CE,-g2009 ivltests # ++ pr3390385d CE,-g2009 ivltests # ++ pr3462145 CE,-g2009 ivltests # ++ -sv_queue_function CE,-g2009,-pallowsigned=1 ivltests # queue +sv_queue_function1 CE,-g2009,-pallowsigned=1 ivltests # queue +sv_queue_function2 CE,-g2009,-pallowsigned=1 ivltests # queue sv_typedef_darray_base1 CE,-g2009 ivltests # Dyanmic array sv_typedef_darray_base2 CE,-g2009 ivltests # Dyanmic array sv_typedef_darray_base3 CE,-g2009 ivltests # Dyanmic array