From 7ee7a483103e85cc69eea7eebca6dbe530f9d8e7 Mon Sep 17 00:00:00 2001 From: Martin Whitaker Date: Wed, 4 Aug 2021 14:35:38 +0100 Subject: [PATCH] Check that a genvar is not shadowed when used in a generate loop construct. This also ensures the same genvar cannot be used in two nested loops (issue #533), because the implicit localparam with the same name shadows the genvar declaration. --- elab_scope.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/elab_scope.cc b/elab_scope.cc index d410e1d43..45fdcc697 100644 --- a/elab_scope.cc +++ b/elab_scope.cc @@ -950,8 +950,16 @@ bool PGenerate::generate_scope_loop_(Design*des, NetScope*container) // Check that the loop_index variable was declared in a // genvar statement. NetScope*cscope = container; - while (cscope && !cscope->find_genvar(loop_index)) + while (cscope && !cscope->find_genvar(loop_index)) { + if (cscope->symbol_exists(loop_index)) { + cerr << get_fileline() << ": error: " + << "generate loop variable '" << loop_index + << "' is not a genvar in this scope." << endl; + des->errors += 1; + return false; + } cscope = cscope->parent(); + } if (!cscope) { cerr << get_fileline() << ": error: genvar is missing for " "generate \"loop\" variable '" << loop_index << "'."