3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-06-07 06:33:24 +00:00

verilog: handle empty generate statement by removing gen_stmt_or_null...

... rule which causes a s/r conflict. Now we get an empty genblock,
which should be okay.
This commit is contained in:
Eddie Hung 2020-05-11 10:20:33 -07:00
parent d21a07c7b5
commit 88bddb37c9

View file

@ -2440,7 +2440,7 @@ gen_case_item:
} case_select { } case_select {
case_type_stack.push_back(0); case_type_stack.push_back(0);
SET_AST_NODE_LOC(ast_stack.back(), @2, @2); SET_AST_NODE_LOC(ast_stack.back(), @2, @2);
} gen_stmt_or_null { } gen_stmt_block {
case_type_stack.pop_back(); case_type_stack.pop_back();
ast_stack.pop_back(); ast_stack.pop_back();
}; };
@ -2532,7 +2532,11 @@ module_gen_body:
/* empty */; /* empty */;
gen_stmt_or_module_body_stmt: gen_stmt_or_module_body_stmt:
gen_stmt | module_body_stmt; gen_stmt | module_body_stmt |
attr ';' {
log_file_warning(current_filename, get_line_num(), "Attribute(s) attached to null statement. Ignoring.\n");
free_attr($1);
};
// this production creates the obligatory if-else shift/reduce conflict // this production creates the obligatory if-else shift/reduce conflict
gen_stmt: gen_stmt:
@ -2554,7 +2558,7 @@ gen_stmt:
AstNode *block = new AstNode(AST_GENBLOCK); AstNode *block = new AstNode(AST_GENBLOCK);
ast_stack.back()->children.push_back(block); ast_stack.back()->children.push_back(block);
ast_stack.push_back(block); ast_stack.push_back(block);
} gen_stmt_or_null { } gen_stmt_block {
ast_stack.pop_back(); ast_stack.pop_back();
} opt_gen_else { } opt_gen_else {
SET_AST_NODE_LOC(ast_stack.back(), @1, @7); SET_AST_NODE_LOC(ast_stack.back(), @1, @7);
@ -2604,11 +2608,8 @@ gen_stmt_block:
ast_stack.pop_back(); ast_stack.pop_back();
}; };
gen_stmt_or_null:
gen_stmt_block | ';';
opt_gen_else: opt_gen_else:
TOK_ELSE gen_stmt_or_null | /* empty */ %prec FAKE_THEN; TOK_ELSE gen_stmt_block | /* empty */ %prec FAKE_THEN;
expr: expr:
basic_expr { basic_expr {