From 2e43dfeeaa276288a048dbad4564580acb77e09f Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Sun, 23 Jan 2022 22:40:43 -0700 Subject: [PATCH] fix failed indirection of unassigned function results --- src/Convert/Scoper.hs | 6 +++++- test/core/func_no_asgn.sv | 8 ++++++++ test/core/func_no_asgn.v | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/core/func_no_asgn.sv create mode 100644 test/core/func_no_asgn.v diff --git a/src/Convert/Scoper.hs b/src/Convert/Scoper.hs index 299e300..d00fed4 100644 --- a/src/Convert/Scoper.hs +++ b/src/Convert/Scoper.hs @@ -520,7 +520,11 @@ scopeModuleItem declMapperRaw moduleItemMapper genItemMapper stmtMapperRaw = redirectTFDecl :: Type -> Identifier -> ScoperT a m (Type, Identifier) redirectTFDecl typ ident = do res <- declMapper $ Variable Local typ ident [] Nil - let Variable Local newType newName newRanges Nil = res + (newType, newName, newRanges) <- + return $ case res of + Variable Local t x r Nil -> (t, x, r) + Net Local TWire DefaultStrength t x r Nil -> (t, x, r) + _ -> error "redirectTFDecl invariant violated" return $ if null newRanges then (newType, newName) else diff --git a/test/core/func_no_asgn.sv b/test/core/func_no_asgn.sv new file mode 100644 index 0000000..20ee4dd --- /dev/null +++ b/test/core/func_no_asgn.sv @@ -0,0 +1,8 @@ +module top; + function automatic bit foo; + input integer x; + // no return + endfunction + bit x; + assign x = foo(0); +endmodule diff --git a/test/core/func_no_asgn.v b/test/core/func_no_asgn.v new file mode 100644 index 0000000..1b60726 --- /dev/null +++ b/test/core/func_no_asgn.v @@ -0,0 +1,4 @@ +module top; + wire x; + assign x = 1'bx; +endmodule