aboutsummaryrefslogtreecommitdiffstats
path: root/frontends/ast/ast.cc
diff options
context:
space:
mode:
authorDag Lem <dag@nimrod.no>2023-02-28 18:45:55 +0100
committerDag Lem <dag@nimrod.no>2023-03-05 14:54:17 +0100
commit0d3423ddea1c24aea74206d64e6dc5196959ad5e (patch)
tree54d372ef0ca8357c95f4dd38dfabb9e4a586cbbc /frontends/ast/ast.cc
parent79043cb849e01b494e1ab432dc52f5f99d5ff4af (diff)
downloadyosys-0d3423ddea1c24aea74206d64e6dc5196959ad5e.tar.gz
yosys-0d3423ddea1c24aea74206d64e6dc5196959ad5e.tar.bz2
yosys-0d3423ddea1c24aea74206d64e6dc5196959ad5e.zip
Index struct/union members within corresponding wire chunks
This guards against access to bits outside of struct/union members via dynamic indexing.
Diffstat (limited to 'frontends/ast/ast.cc')
-rw-r--r--frontends/ast/ast.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/frontends/ast/ast.cc b/frontends/ast/ast.cc
index 982943d1b..5a2ade04a 100644
--- a/frontends/ast/ast.cc
+++ b/frontends/ast/ast.cc
@@ -524,7 +524,13 @@ void AstNode::dumpVlog(FILE *f, std::string indent) const
break;
case AST_IDENTIFIER:
- fprintf(f, "%s", id2vl(str).c_str());
+ {
+ AST::AstNode *member_node = AST::get_struct_member(this);
+ if (member_node)
+ fprintf(f, "%s[%d:%d]", id2vl(str).c_str(), member_node->range_left, member_node->range_right);
+ else
+ fprintf(f, "%s", id2vl(str).c_str());
+ }
for (auto child : children)
child->dumpVlog(f, "");
break;