From 64c660f213c42e876ebe58b387933a38d18f8eda Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 22 Jul 2025 03:14:15 +0000 Subject: [PATCH] Make log_warning()/log_warning_noprefix() use variadic templates. --- kernel/log.cc | 38 +++++--------------------------------- kernel/log.h | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/kernel/log.cc b/kernel/log.cc index 7ddf9cfe1..cb4648f43 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -255,10 +255,8 @@ void log_formatted_header(RTLIL::Design *design, std::string_view format, std::s log_files.pop_back(); } -static void logv_warning_with_prefix(const char *prefix, - const char *format, va_list ap) +void log_formatted_warning(std::string_view prefix, std::string message) { - std::string message = vstringf(format, ap); bool suppressed = false; for (auto &re : log_nowarn_regexes) @@ -267,7 +265,7 @@ static void logv_warning_with_prefix(const char *prefix, if (suppressed) { - log("Suppressed %s%s", prefix, message.c_str()); + log("Suppressed %s%s", prefix, message); } else { @@ -287,7 +285,7 @@ static void logv_warning_with_prefix(const char *prefix, if (log_warnings.count(message)) { - log("%s%s", prefix, message.c_str()); + log("%s%s", prefix, message); log_flush(); } else @@ -295,7 +293,7 @@ static void logv_warning_with_prefix(const char *prefix, if (log_errfile != NULL && !log_quiet_warnings) log_files.push_back(log_errfile); - log("%s%s", prefix, message.c_str()); + log("%s%s", prefix, message); log_flush(); if (log_errfile != NULL && !log_quiet_warnings) @@ -311,16 +309,6 @@ static void logv_warning_with_prefix(const char *prefix, } } -static void logv_warning(const char *format, va_list ap) -{ - logv_warning_with_prefix("Warning: ", format, ap); -} - -static void logv_warning_noprefix(const char *format, va_list ap) -{ - logv_warning_with_prefix("", format, ap); -} - void log_file_warning(const std::string &filename, int lineno, const char *format, ...) { @@ -328,7 +316,7 @@ void log_file_warning(const std::string &filename, int lineno, va_start(ap, format); std::string prefix = stringf("%s:%d: Warning: ", filename.c_str(), lineno); - logv_warning_with_prefix(prefix.c_str(), format, ap); + log_formatted_warning(prefix, vstringf(format, ap)); va_end(ap); } @@ -414,14 +402,6 @@ void log_file_error(const string &filename, int lineno, logv_file_error(filename, lineno, format, ap); } -void log_warning(const char *format, ...) -{ - va_list ap; - va_start(ap, format); - logv_warning(format, ap); - va_end(ap); -} - void log_experimental(const char *format, ...) { va_list ap; @@ -435,14 +415,6 @@ void log_experimental(const char *format, ...) } } -void log_warning_noprefix(const char *format, ...) -{ - va_list ap; - va_start(ap, format); - logv_warning_noprefix(format, ap); - va_end(ap); -} - void log_error(const char *format, ...) { va_list ap; diff --git a/kernel/log.h b/kernel/log.h index 9cdc00181..1ca60f7a5 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -122,7 +122,6 @@ extern int log_debug_suppressed; [[noreturn]] void logv_file_error(const string &filename, int lineno, const char *format, va_list ap); -void log_warning(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); void log_experimental(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); void set_verific_logging(void (*cb)(int msg_type, const char *message_id, const char* file_path, unsigned int left_line, unsigned int left_col, unsigned int right_line, unsigned int right_col, const char *msg)); @@ -132,7 +131,6 @@ extern void (*log_verific_callback)(int msg_type, const char *message_id, const void log_file_warning(const std::string &filename, int lineno, const char *format, ...) YS_ATTRIBUTE(format(printf, 3, 4)); void log_file_info(const std::string &filename, int lineno, const char *format, ...) YS_ATTRIBUTE(format(printf, 3, 4)); -void log_warning_noprefix(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); [[noreturn]] void log_error(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); [[noreturn]] void log_file_error(const string &filename, int lineno, const char *format, ...) YS_ATTRIBUTE(format(printf, 3, 4)); [[noreturn]] void log_cmd_error(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); @@ -160,6 +158,18 @@ inline void log_header(RTLIL::Design *design, FmtString...> f log_formatted_header(design, fmt.format_string(), fmt.format(args...)); } +void log_formatted_warning(std::string_view prefix, std::string str); +template +inline void log_warning(FmtString...> fmt, Args... args) +{ + log_formatted_warning("Warning: ", fmt.format(args...)); +} +template +inline void log_warning_noprefix(FmtString...> fmt, Args... args) +{ + log_formatted_warning("", fmt.format(args...)); +} + static inline void log_suppressed() { if (log_debug_suppressed && !log_make_debug) { log("\n", log_debug_suppressed);