diff --git a/kernel/driver.cc b/kernel/driver.cc index 240083fe3..de4b8aac2 100644 --- a/kernel/driver.cc +++ b/kernel/driver.cc @@ -604,7 +604,12 @@ int main(int argc, char **argv) yosys_xtrace = 0; log_spacer(); - logger().report_warning_stats(mode_v && !mode_q); + logger().set_log_forced(mode_v && !mode_q); + if (logger().get_warnings_total()) + log("Warnings: %d unique messages, %d total\n", logger().get_warnings_unique(), logger().get_warnings_total()); + + if (logger().get_experimentals_num() != 0) + log("Warnings: %d experimental features used (not excluded with -x).\n", logger().get_experimentals_num()); #ifdef _WIN32 log("End of script. Logfile hash: %s\n", hash); diff --git a/kernel/log.cc b/kernel/log.cc index 514af7297..1ed4ccf82 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -101,7 +101,7 @@ bool StderrLogSink::should_log(const LogMessage &msg) const { return msg.severity == LogSeverity::LOG_ERROR || (msg.severity == LogSeverity::LOG_WARNING && !quiet_warnings) || - logger().get_stderr_force(); + logger().get_log_forced(); } void StderrLogSink::log(const LogMessage &msg) @@ -248,7 +248,7 @@ void LogManager::log_formatted_header(RTLIL::Design *design, std::string_view fo header_count.back()++; if (int(header_count.size()) <= log_verbose_level) { - log_stderr_force = true; + log_forced = true; } std::string header_id; @@ -271,7 +271,7 @@ void LogManager::log_formatted_header(RTLIL::Design *design, std::string_view fo if (yosys_xtrace) log("#X# -- end of dump --\n"); } - log_stderr_force = false; + log_forced = false; } void LogManager::log_formatted_warning(std::string_view prefix, std::string_view format, std::string message) @@ -369,6 +369,8 @@ void LogManager::log_error_with_prefix(std::string_view prefix, std::string_view if (std::regex_search(string(prefix) + message, item.pattern)) item.current_count++; + log_errors_count++; + check_expected(); if (log_error_atexit) @@ -672,17 +674,6 @@ void LogManager::report_unexpected_error() log_warnings_count, log_warnings_count - log_warnings_count_noexpect); } - -void LogManager::report_warning_stats(bool stderr_force) -{ - log_stderr_force = stderr_force; - if (log_warnings_count) - log("Warnings: %d unique messages, %d total\n", GetSize(log_warnings), log_warnings_count); - - if (!log_experimentals.empty()) - log("Warnings: %d experimental features used (not excluded with -x).\n", GetSize(log_experimentals)); -} - void LogManager::add_expect(std::string type, std::string pattern, int count) { if (type == "error") diff --git a/kernel/log.h b/kernel/log.h index 8fe826e13..913ac9d12 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -371,7 +371,6 @@ public: void set_force_debug(bool enabled) { log_force_debug = enabled ? 1 : 0; } void report_unexpected_error(); - void report_warning_stats(bool stderr_force); void add_experimental_ignore(std::string name) { log_experimentals_ignored.insert(name); } void add_warn(std::string pattern) { log_warn_regexes.push_back(YS_REGEX_COMPILE(pattern)); } @@ -385,9 +384,14 @@ public: void set_log_time(bool value) { log_time = value; } void set_cmd_error_throw(bool value) { log_cmd_error_throw = value; } void set_hdump_all(bool value) { log_hdump_all = value; } + void set_log_forced(bool value) { log_forced = value; } int get_verbose_level() const { return log_verbose_level; } bool get_log_time() const { return log_time; } - bool get_stderr_force() const { return log_stderr_force; } + bool get_log_forced() const { return log_forced; } + int get_warnings_unique() const { return GetSize(log_warnings); } + int get_warnings_total() const { return log_warnings_count; } + int get_errors_total() const { return log_errors_count; } + int get_experimentals_num() const { return GetSize(log_experimentals); } std::chrono::steady_clock::time_point get_initial_time() const; void add_hdump(std::string name, std::string value) { log_hdump[name].insert(value); } @@ -426,6 +430,7 @@ private: int log_verbose_level = 0; int log_newline_count = 0; vector header_count; + int log_errors_count = 0; int log_warnings_count = 0; int log_warnings_count_noexpect = 0; std::set log_warnings, log_experimentals, log_experimentals_ignored; @@ -436,7 +441,7 @@ private: bool log_expect_no_warnings = false; bool log_time = false; bool log_cmd_error_throw = false; - bool log_stderr_force = false; + bool log_forced = false; std::map> log_hdump; bool log_hdump_all = false;