Add regression tests for package scope identifiers

Check that it is possible to reference a package scoped identifier that has
the same name as a local identifier, but is a different kind of identifier.

 * A variable or function identifier from a package scope if it is a
   type identifier in the current scope
 * A type identifier from a package scope if it is a non-type identifier
   in the current scope

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2022-10-01 11:21:44 +02:00
parent 8d7e7b6283
commit 159345ca96
4 changed files with 86 additions and 0 deletions

View File

@ -0,0 +1,30 @@
// Check that it is possible to reference a package scoped function, even if
// there is a type identifier of the same name in the current scope.
bit failed = 1'b0;
`define check(expr, val) \
if (expr !== val) begin \
$display("FAILED: %s, expected %0d, got %0d", `"expr`", val, expr); \
failed = 1'b1; \
end
package P;
function integer T(integer x);
return x + 1;
endfunction
endpackage
module test;
typedef integer T;
initial begin
integer x;
x = P::T(10);
`check(x, 11)
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -0,0 +1,26 @@
// Check that it is possible to reference a package scoped type identifier, even if
// there is a identifier of the same name in the current scope.
bit failed = 1'b0;
`define check(expr, val) \
if (expr !== val) begin \
$display("FAILED: %s, expected %0d, got %0d", `"expr`", val, expr); \
failed = 1'b1; \
end
package P;
typedef logic [31:0] T;
endpackage
module test;
logic T;
initial begin
P::T x;
`check($bits(x), 32)
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -0,0 +1,27 @@
// Check that it is possible to reference a package scoped identifier, even if
// there is a type identifier of the same name in the current scope.
bit failed = 1'b0;
`define check(expr, val) \
if (expr !== val) begin \
$display("FAILED: %s, expected %0d, got %0d", `"expr`", val, expr); \
failed = 1'b1; \
end
package P;
integer T = 10;
endpackage
module test;
typedef integer T;
integer x;
initial begin
x = P::T;
`check(x, 10)
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -618,6 +618,9 @@ sv_port_default14 CE,-g2009 ivltests
sv_ps_function1 normal,-g2009 ivltests
sv_ps_function2 normal,-g2009 ivltests
sv_ps_function3 normal,-g2009 ivltests
sv_ps_function4 normal,-g2009 ivltests
sv_ps_type1 normal,-g2009 ivltests
sv_ps_var1 normal,-g2009 ivltests
sv_queue1 normal,-g2009 ivltests
sv_queue2 normal,-g2009 ivltests
sv_queue3 normal,-g2009 ivltests