Nested generate regions are illegal
This commit is contained in:
parent
d484cb63d6
commit
788a94b310
|
|
@ -0,0 +1 @@
|
||||||
|
./ivltests/br_gh1117.v:10: error: generate/endgenerate regions cannot nest.
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
module top;
|
||||||
|
wire x, y, z;
|
||||||
|
reg in;
|
||||||
|
genvar i;
|
||||||
|
|
||||||
|
generate
|
||||||
|
for (i=0; i<1; i=i+1) begin
|
||||||
|
assign x = in;
|
||||||
|
end
|
||||||
|
generate // This should be an error
|
||||||
|
for (i=0; i<1; i=i+1) begin
|
||||||
|
assign y = in;
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
generate // This is ok
|
||||||
|
for (i=0; i<1; i=i+1) begin
|
||||||
|
assign z = in;
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
initial $display("Failed: should be a compile error!");
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
@ -353,6 +353,7 @@ br_gh788 normal,-gno-io-range-error,-Wno-anachronisms ivltests gold=br_gh788.go
|
||||||
br_gh793 normal ivltests
|
br_gh793 normal ivltests
|
||||||
br_gh827 normal ivltests gold=br_gh827.gold
|
br_gh827 normal ivltests gold=br_gh827.gold
|
||||||
br_gh889 normal,-gspecify ivltests gold=br_gh889.gold
|
br_gh889 normal,-gspecify ivltests gold=br_gh889.gold
|
||||||
|
br_gh1117 CE ivltests gold=br_gh1117.gold
|
||||||
br_gh1175a CE ivltests gold=br_gh1175a.gold
|
br_gh1175a CE ivltests gold=br_gh1175a.gold
|
||||||
br_gh1175b CE ivltests gold=br_gh1175b.gold
|
br_gh1175b CE ivltests gold=br_gh1175b.gold
|
||||||
br_gh1175c CE ivltests gold=br_gh1175c.gold
|
br_gh1175c CE ivltests gold=br_gh1175c.gold
|
||||||
|
|
|
||||||
20
parse.y
20
parse.y
|
|
@ -45,6 +45,7 @@ extern void lex_end_table();
|
||||||
static data_type_t* param_data_type = 0;
|
static data_type_t* param_data_type = 0;
|
||||||
static bool param_is_local = false;
|
static bool param_is_local = false;
|
||||||
static bool param_is_type = false;
|
static bool param_is_type = false;
|
||||||
|
static bool in_gen_region = false;
|
||||||
static std::list<pform_range_t>* specparam_active_range = 0;
|
static std::list<pform_range_t>* specparam_active_range = 0;
|
||||||
|
|
||||||
/* Port declaration lists use this structure for context. */
|
/* Port declaration lists use this structure for context. */
|
||||||
|
|
@ -74,6 +75,15 @@ static stack<PBlock*> current_block_stack;
|
||||||
specified. */
|
specified. */
|
||||||
static LexicalScope::lifetime_t var_lifetime;
|
static LexicalScope::lifetime_t var_lifetime;
|
||||||
|
|
||||||
|
static void check_in_gen_region(const struct vlltype &loc)
|
||||||
|
{
|
||||||
|
if (in_gen_region) {
|
||||||
|
cerr << loc << ": error: generate/endgenerate regions cannot nest." << endl;
|
||||||
|
error_count += 1;
|
||||||
|
}
|
||||||
|
in_gen_region = true;
|
||||||
|
}
|
||||||
|
|
||||||
static pform_name_t* pform_create_this(void)
|
static pform_name_t* pform_create_this(void)
|
||||||
{
|
{
|
||||||
name_component_t name (perm_string::literal(THIS_TOKEN));
|
name_component_t name (perm_string::literal(THIS_TOKEN));
|
||||||
|
|
@ -5208,15 +5218,7 @@ module_item
|
||||||
generate/endgenerate regions do not nest. Generate schemes nest,
|
generate/endgenerate regions do not nest. Generate schemes nest,
|
||||||
but generate regions do not. */
|
but generate regions do not. */
|
||||||
|
|
||||||
| K_generate generate_item_list_opt K_endgenerate
|
| K_generate { check_in_gen_region(@1); } generate_item_list_opt K_endgenerate { in_gen_region = false; }
|
||||||
{ // Test for bad nesting. I understand it, but it is illegal.
|
|
||||||
if (pform_parent_generate()) {
|
|
||||||
cerr << @1 << ": error: Generate/endgenerate regions cannot nest." << endl;
|
|
||||||
cerr << @1 << ": : Try removing optional generate/endgenerate keywords," << endl;
|
|
||||||
cerr << @1 << ": : or move them to surround the parent generate scheme." << endl;
|
|
||||||
error_count += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
| K_genvar list_of_identifiers ';'
|
| K_genvar list_of_identifiers ';'
|
||||||
{ pform_genvars(@1, $2); }
|
{ pform_genvars(@1, $2); }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue