diff options
| -rw-r--r-- | frontends/ast/simplify.cc | 8 | ||||
| -rw-r--r-- | tests/simple/const_branch_finish.v | 39 | 
2 files changed, 43 insertions, 4 deletions
diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 66f22e113..fb23b0644 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -1807,7 +1807,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  			if (type == AST_GENFOR) {  				for (size_t i = 0; i < buf->children.size(); i++) { -					buf->children[i]->simplify(false, false, false, stage, -1, false, false); +					buf->children[i]->simplify(const_fold, false, false, stage, -1, false, false);  					current_ast_mod->children.push_back(buf->children[i]);  				}  			} else { @@ -1883,7 +1883,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  		}  		for (size_t i = 0; i < children.size(); i++) { -			children[i]->simplify(false, false, false, stage, -1, false, false); +			children[i]->simplify(const_fold, false, false, stage, -1, false, false);  			current_ast_mod->children.push_back(children[i]);  		} @@ -1920,7 +1920,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  			}  			for (size_t i = 0; i < buf->children.size(); i++) { -				buf->children[i]->simplify(false, false, false, stage, -1, false, false); +				buf->children[i]->simplify(const_fold, false, false, stage, -1, false, false);  				current_ast_mod->children.push_back(buf->children[i]);  			} @@ -1999,7 +1999,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  			}  			for (size_t i = 0; i < buf->children.size(); i++) { -				buf->children[i]->simplify(false, false, false, stage, -1, false, false); +				buf->children[i]->simplify(const_fold, false, false, stage, -1, false, false);  				current_ast_mod->children.push_back(buf->children[i]);  			} diff --git a/tests/simple/const_branch_finish.v b/tests/simple/const_branch_finish.v new file mode 100644 index 000000000..8166688e6 --- /dev/null +++ b/tests/simple/const_branch_finish.v @@ -0,0 +1,39 @@ +`define CONSTANT_CHECK \ +	if (WIDTH === 'bx) begin \ +		$display("FAIL"); \ +		$finish; \ +	end + +module top; +	parameter WIDTH = 32; +	integer j; +	initial begin +		`CONSTANT_CHECK +		if (WIDTH == 32) begin : procedural_conditional_block +			`CONSTANT_CHECK +		end +		case (WIDTH) +			32: `CONSTANT_CHECK +			default: ; +		endcase +		for (j = 0; j < 2; j = j + 1) begin : procedural_loop_block +			`CONSTANT_CHECK +		end +	end +	generate +		begin : unconditional_block +			initial `CONSTANT_CHECK +		end +		if (WIDTH == 32) begin : conditional_block +			initial `CONSTANT_CHECK +		end +		case (WIDTH) +			32: initial `CONSTANT_CHECK +			default: ; +		endcase +		genvar i; +		for (i = 0; i < 2; i = i + 1) begin : loop_block +			initial `CONSTANT_CHECK +		end +	endgenerate +endmodule  | 
