fix typeof incorrectly propagating implicit types

This commit is contained in:
Zachary Snow 2021-01-23 17:39:29 -07:00
parent 8eb3a251f7
commit 58e5bfa6d3
3 changed files with 27 additions and 3 deletions

View File

@ -41,9 +41,10 @@ traverseDeclM decl = do
item <- traverseModuleItemM (MIPackageItem $ Decl decl)
let MIPackageItem (Decl decl') = item
case decl' of
Variable Local UnknownType ident [] Nil -> do
-- functions with no return type implicitly return a single bit
insertElem ident UnitType
Variable Local (Implicit sg rs) ident [] Nil -> do
-- implicit types, which are commonly found in function return
-- types, are recast as logics to avoid outputting bare ranges
insertElem ident $ IntegerVector TLogic sg rs
return decl'
Variable d t ident a e -> do
let t' = injectRanges t a

View File

@ -0,0 +1,17 @@
module top;
typedef logic [1:0] T;
function automatic [1:0] flip;
input [1:0] inp;
flip = ~inp;
endfunction
initial begin
case (flip(2'b00)) inside
2'b11: $display("good");
default: $display("default");
endcase
case (T'(flip(2'b00))) inside
2'b11: $display("good");
default: $display("default");
endcase
end
endmodule

View File

@ -0,0 +1,6 @@
module top;
initial begin
$display("good");
$display("good");
end
endmodule