Throw errors if non-existing selection variables are used
authorClifford Wolf <clifford@clifford.at>
Tue, 4 Feb 2014 22:31:06 +0000 (23:31 +0100)
committerClifford Wolf <clifford@clifford.at>
Tue, 4 Feb 2014 22:31:06 +0000 (23:31 +0100)
passes/cmds/select.cc

index 253d8d68fb8294346a8b19994fc1f8703417b2b6..2561e8f64d92685857b9a974af25d99db792498e 100644 (file)
@@ -384,7 +384,8 @@ static void select_op_expand(RTLIL::Design *design, std::string arg, char mode)
                                                for (auto i1 : design->selection_vars.at(str).selected_members)
                                                for (auto i2 : i1.second)
                                                        limits.insert(i2);
-                                       }
+                                       } else
+                                               log_cmd_error("Selection %s is not defined!\n", RTLIL::id2cstr(str));
                                } else
                                        limits.insert(RTLIL::escape_id(str));
                        }
@@ -521,7 +522,7 @@ static void select_stmt(RTLIL::Design *design, std::string arg)
                if (design->selection_vars.count(set_name) > 0)
                        work_stack.push_back(design->selection_vars[set_name]);
                else
-                       work_stack.push_back(RTLIL::Selection(false));
+                       log_cmd_error("Selection @%s is not defined!\n", RTLIL::id2cstr(set_name));
                select_filter_active_mod(design, work_stack.back());
                return;
        }
@@ -1016,7 +1017,7 @@ struct SelectPass : public Pass {
                if (!set_name.empty())
                {
                        if (work_stack.size() == 0)
-                               design->selection_vars.erase(set_name);
+                               design->selection_vars[set_name] = RTLIL::Selection(false);
                        else
                                design->selection_vars[set_name] = work_stack.back();
                        return;