Commit 540b52931a
Changed files (3)
doc/langref.html.in
@@ -6262,7 +6262,7 @@ pub fn printValue(self: *Writer, value: anytype) !void {
<p>
And now, what happens if we give too many arguments to {#syntax#}printf{#endsyntax#}?
</p>
- {#code_begin|test_err|Unused arguments#}
+ {#code_begin|test_err|Unused argument in "here is a string: '{s}' here is a number: {}#}
const print = @import("std").debug.print;
const a_number: i32 = 1234;
lib/std/fmt.zig
@@ -359,7 +359,12 @@ pub fn format(
}
if (comptime arg_state.hasUnusedArgs()) {
- @compileError("Unused arguments");
+ const missing_count = arg_state.args_len - @popCount(ArgSetType, arg_state.used_args);
+ switch (missing_count) {
+ 0 => unreachable,
+ 1 => @compileError("Unused argument in \"" ++ fmt ++ "\""),
+ else => @compileError((comptime comptimePrint("{d}", .{missing_count})) ++ " unused arguments in \"" ++ fmt ++ "\""),
+ }
}
}
test/compile_errors.zig
@@ -2,6 +2,14 @@ const tests = @import("tests.zig");
const std = @import("std");
pub fn addCases(cases: *tests.CompileErrorContext) void {
+ cases.add("std.fmt error for unused arguments",
+ \\pub fn main() !void {
+ \\ @import("std").debug.print("{d} {d} {d} {d} {d}", .{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15});
+ \\}
+ , &.{
+ \\error: 10 unused arguments in "{d} {d} {d} {d} {d}"
+ });
+
cases.add("lazy pointer with undefined element type",
\\export fn foo() void {
\\ comptime var T: type = undefined;