diff --git a/elab_scope.cc b/elab_scope.cc index 37f186e93..36cf94a96 100644 --- a/elab_scope.cc +++ b/elab_scope.cc @@ -475,7 +475,12 @@ bool PGenerate::generate_scope_loop_(Design*des, NetScope*container) container->genvar_tmp_val = genvar; NetExpr*test_ex = elab_and_eval(des, container, loop_test, -1); NetEConst*test = dynamic_cast(test_ex); - assert(test); + if (test == 0) { + cerr << get_fileline() << ": error: Cannot evaluate genvar" + << " conditional expression: " << *loop_test << endl; + des->errors += 1; + return false; + } while (test->value().as_long()) { // The actual name of the scope includes the genvar so @@ -522,7 +527,12 @@ bool PGenerate::generate_scope_loop_(Design*des, NetScope*container) // Calculate the step for the loop variable. NetExpr*step_ex = elab_and_eval(des, container, loop_step, -1); NetEConst*step = dynamic_cast(step_ex); - assert(step); + if (step == 0) { + cerr << get_fileline() << ": error: Cannot evaluate genvar" + << " step expression: " << *loop_step << endl; + des->errors += 1; + return false; + } if (debug_scopes) cerr << get_fileline() << ": debug: genvar step from " << genvar << " to " << step->value().as_long() << endl; @@ -547,7 +557,12 @@ bool PGenerate::generate_scope_condit_(Design*des, NetScope*container, bool else { NetExpr*test_ex = elab_and_eval(des, container, loop_test, -1); NetEConst*test = dynamic_cast (test_ex); - assert(test); + if (test == 0) { + cerr << get_fileline() << ": error: Cannot evaluate genvar" + << " conditional expression: " << *loop_test << endl; + des->errors += 1; + return false; + } // If the condition evaluates as false, then do not create the // scope. @@ -589,7 +604,12 @@ bool PGenerate::generate_scope_case_(Design*des, NetScope*container) { NetExpr*case_value_ex = elab_and_eval(des, container, loop_test, -1); NetEConst*case_value_co = dynamic_cast(case_value_ex); - assert(case_value_co); + if (case_value_co == 0) { + cerr << get_fileline() << ": error: Cannot evaluate genvar case" + << " expression: " << *loop_test << endl; + des->errors += 1; + return false; + } // The name of the scope to generate, whatever that item is. hname_t use_name (scope_name);