From 5d99e5ecd493b6cec54cf870d77d61b2a8480131 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Tue, 26 Jul 2022 14:04:59 +0300 Subject: [PATCH] Sema: improve expression value ignored error Closes #4483 --- src/Sema.zig | 11 ++++++++++- .../ignored_assert-err-ok_return_value.zig | 4 +++- .../ignored_comptime_statement_value.zig | 4 +++- test/cases/compile_errors/ignored_comptime_value.zig | 4 +++- .../ignored_deferred_statement_value.zig | 4 +++- test/cases/compile_errors/ignored_return_value.zig | 4 +++- test/cases/compile_errors/ignored_statement_value.zig | 4 +++- 7 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index 52e4b4fac456918dc809ef5a8173a602a4142937..5189ad818cbe28c4cf8712b006dd37aaa62a359f 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -2869,7 +2869,16 @@ fn ensureResultUsed( }; return sema.failWithOwnedErrorMsg(block, msg); }, - else => return sema.fail(block, src, "expression value is ignored", .{}), + else => { + const msg = msg: { + const msg = try sema.errMsg(block, src, "value of type '{}' ignored", .{operand_ty.fmt(sema.mod)}); + errdefer msg.destroy(sema.gpa); + try sema.errNote(block, src, msg, "all non-void values must be used", .{}); + try sema.errNote(block, src, msg, "this error can be suppressed by assigning the value to '_'", .{}); + break :msg msg; + }; + return sema.failWithOwnedErrorMsg(block, msg); + }, } } diff --git a/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig b/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig index 04f6b3bd496ea8731c411caeaeb4c5b9e1ff8c0a..39657badd47933f0c1b2990bb8d3c6a78b79dea4 100644 --- a/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig +++ b/test/cases/compile_errors/ignored_assert-err-ok_return_value.zig @@ -7,4 +7,6 @@ fn bar() anyerror!i32 { return 0; } // backend=stage2 // target=native // -// :2:11: error: expression value is ignored +// :2:11: error: value of type 'i32' ignored +// :2:11: note: all non-void values must be used +// :2:11: note: this error can be suppressed by assigning the value to '_' diff --git a/test/cases/compile_errors/ignored_comptime_statement_value.zig b/test/cases/compile_errors/ignored_comptime_statement_value.zig index 7a5258fb1df05ce7f395e1a10a3444b75c8b5e4c..fc6cdfdd28fe7bb06e071d69cdf499f18d1d5eb0 100644 --- a/test/cases/compile_errors/ignored_comptime_statement_value.zig +++ b/test/cases/compile_errors/ignored_comptime_statement_value.zig @@ -6,4 +6,6 @@ export fn foo() void { // backend=stage2 // target=native // -// :2:15: error: expression value is ignored +// :2:15: error: value of type 'comptime_int' ignored +// :2:15: note: all non-void values must be used +// :2:15: note: this error can be suppressed by assigning the value to '_' diff --git a/test/cases/compile_errors/ignored_comptime_value.zig b/test/cases/compile_errors/ignored_comptime_value.zig index 6f207653d674cc07d200a39f2a1486a47987d69e..2f7c6edea3491528c2e43f3397b060a3fa3f455f 100644 --- a/test/cases/compile_errors/ignored_comptime_value.zig +++ b/test/cases/compile_errors/ignored_comptime_value.zig @@ -6,4 +6,6 @@ export fn foo() void { // backend=stage2 // target=native // -// :2:5: error: expression value is ignored +// :2:5: error: value of type 'comptime_int' ignored +// :2:5: note: all non-void values must be used +// :2:5: note: this error can be suppressed by assigning the value to '_' diff --git a/test/cases/compile_errors/ignored_deferred_statement_value.zig b/test/cases/compile_errors/ignored_deferred_statement_value.zig index 6af541236ace5452925b6274bfce904590169a36..9a270497afc9785bf5e744f503db5eaadc492d59 100644 --- a/test/cases/compile_errors/ignored_deferred_statement_value.zig +++ b/test/cases/compile_errors/ignored_deferred_statement_value.zig @@ -6,4 +6,6 @@ export fn foo() void { // backend=stage2 // target=native // -// :2:12: error: expression value is ignored +// :2:12: error: value of type 'comptime_int' ignored +// :2:12: note: all non-void values must be used +// :2:12: note: this error can be suppressed by assigning the value to '_' diff --git a/test/cases/compile_errors/ignored_return_value.zig b/test/cases/compile_errors/ignored_return_value.zig index ac3756acf5e1fd5ef081b1d51fbebba9d1c618d1..57f859e3d375a4293da56cd0ca8e30e5d0ff069c 100644 --- a/test/cases/compile_errors/ignored_return_value.zig +++ b/test/cases/compile_errors/ignored_return_value.zig @@ -7,4 +7,6 @@ fn bar() i32 { return 0; } // backend=stage2 // target=native // -// :2:8: error: expression value is ignored +// :2:8: error: value of type 'i32' ignored +// :2:8: note: all non-void values must be used +// :2:8: note: this error can be suppressed by assigning the value to '_' diff --git a/test/cases/compile_errors/ignored_statement_value.zig b/test/cases/compile_errors/ignored_statement_value.zig index 5c79d1f964541e271a164b2e0d11143dfff03fef..c73da84420abbe00d71478c58baff729214f912f 100644 --- a/test/cases/compile_errors/ignored_statement_value.zig +++ b/test/cases/compile_errors/ignored_statement_value.zig @@ -6,4 +6,6 @@ export fn foo() void { // backend=stage2 // target=native // -// :2:5: error: expression value is ignored +// :2:5: error: value of type 'comptime_int' ignored +// :2:5: note: all non-void values must be used +// :2:5: note: this error can be suppressed by assigning the value to '_' -- 2.54.0