diff --git a/src/Convert/TypeOf.hs b/src/Convert/TypeOf.hs index 551cd5c..98ea1c7 100644 --- a/src/Convert/TypeOf.hs +++ b/src/Convert/TypeOf.hs @@ -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 diff --git a/test/basic/case_inside_cast.sv b/test/basic/case_inside_cast.sv new file mode 100644 index 0000000..1507f93 --- /dev/null +++ b/test/basic/case_inside_cast.sv @@ -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 diff --git a/test/basic/case_inside_cast.v b/test/basic/case_inside_cast.v new file mode 100644 index 0000000..0b1b1c4 --- /dev/null +++ b/test/basic/case_inside_cast.v @@ -0,0 +1,6 @@ +module top; + initial begin + $display("good"); + $display("good"); + end +endmodule