From 71235f9b4859ff9c166101bf796eda6040077031 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= Date: Thu, 8 Feb 2024 14:57:28 +0100 Subject: [PATCH] fmt: Catch `$time` argument with mismatched specifier --- kernel/fmt.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/fmt.cc b/kernel/fmt.cc index 18eb7cb71..92a26191e 100644 --- a/kernel/fmt.cc +++ b/kernel/fmt.cc @@ -431,9 +431,10 @@ void Fmt::parse_verilog(const std::vector &args, bool sformat_lik } break; } - if (i == fmt.size()) { + if (i == fmt.size()) log_file_error(fmtarg->filename, fmtarg->first_line, "System task `%s' called with incomplete format specifier in argument %zu.\n", task_name.c_str(), fmtarg - args.begin() + 1); - } + if (arg->type == VerilogFmtArg::TIME && part.type != FmtPart::VLOG_TIME) + log_file_error(fmtarg->filename, fmtarg->first_line, "System task `%s' called with format character `%c' in argument %zu, but the argument is $time or $realtime.\n", task_name.c_str(), fmt[i], fmtarg - args.begin() + 1); if (part.padding == '\0') part.padding = (has_leading_zero && part.justify == FmtPart::RIGHT) ? '0' : ' ';