From afc3ea435bbd2e9baf2f3aa402e1fabe0a5a76a3 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Wed, 23 Jun 2021 21:39:15 -0400 Subject: [PATCH] fix interface conversion erroneously renaming colliding pattern names --- src/Convert/Interface.hs | 11 ++++++++++- test/basic/interface_struct_label.sv | 18 ++++++++++++++++++ test/basic/interface_struct_label.v | 3 +++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 test/basic/interface_struct_label.sv create mode 100644 test/basic/interface_struct_label.v diff --git a/src/Convert/Interface.hs b/src/Convert/Interface.hs index 0e16c3d..b629f14 100644 --- a/src/Convert/Interface.hs +++ b/src/Convert/Interface.hs @@ -468,7 +468,16 @@ inlineInstance global ranges modportBindings items partName case lookup (Bit expr Tag) exprReplacements of Just resolved -> replaceArrTag (replaceExpr' local elt) resolved Nothing -> Bit (replaceExpr' local expr) (replaceExpr' local elt) - replaceExpr' local expr = + replaceExpr' local (expr @ (Dot Ident{} _)) = + case lookup expr exprReplacements of + Just expr' -> expr' + Nothing -> checkExprResolution local expr $ + traverseSinglyNestedExprs (replaceExprAny local) expr + replaceExpr' local (Ident x) = + checkExprResolution local (Ident x) (Ident x) + replaceExpr' local expr = replaceExprAny local expr + replaceExprAny :: Scopes Expr -> Expr -> Expr + replaceExprAny local expr = case lookup expr exprReplacements of Just expr' -> expr' Nothing -> checkExprResolution local expr $ diff --git a/test/basic/interface_struct_label.sv b/test/basic/interface_struct_label.sv new file mode 100644 index 0000000..6f1d60e --- /dev/null +++ b/test/basic/interface_struct_label.sv @@ -0,0 +1,18 @@ +interface Interface; + logic x; +endinterface + +module Module ( + Interface p +); + typedef struct packed { + integer p; + } S; + S s = '{ p: 1 }; + initial $display("%0d %0d", s, s.p); +endmodule + +module top; + Interface intf(); + Module mod(intf); +endmodule diff --git a/test/basic/interface_struct_label.v b/test/basic/interface_struct_label.v new file mode 100644 index 0000000..99dec44 --- /dev/null +++ b/test/basic/interface_struct_label.v @@ -0,0 +1,3 @@ +module top; + initial $display("%0d %0d", 1, 1); +endmodule