From: Akim Demaille Date: Sun, 9 Dec 2012 11:06:21 +0000 (+0100) Subject: error: use better locations for unused midrule values X-Git-Tag: v2.7~8 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/235892350f6547e5c6a350b85561eda14409a0b5?ds=inline error: use better locations for unused midrule values On %% exp: {;} {$$;} { $$ = $1; } instead of reporting (with -fcaret -Wmidrule-value) midrule.y:2.6-8: warning: unset value: $$ [-Wmidrule-values] exp: {;} {$$;} { $$ = $1; } ^^^ midrule.y:2.6-27: warning: unused value: $2 [-Wmidrule-values] exp: {;} {$$;} { $$ = $1; } ^^^^^^^^^^^^^^^^^^^^^^ report midrule.y:2.6-8: warning: unset value: $$ exp: {;} {$$;} { $$ = $1; } ^^^ midrule.y:2.10-14: warning: unused value: $2 exp: {;} {$$;} { $$ = $1; } ^^^^^ * src/reader.c (grammar_rule_check): When warning about the value of a midrule action, use the location of the midrule action instead of the location of the rule. the location of the part of the rule. * tests/actions.at (Default %printer and %destructor for mid-rule values): Adjust expectations * tests/input.at (Unused values with default %destructor): Ditto. (AT_CHECK_UNUSED_VALUES): Ditto. And use -fcaret. --- diff --git a/src/reader.c b/src/reader.c index 86fde7b2..735e700d 100644 --- a/src/reader.c +++ b/src/reader.c @@ -325,9 +325,9 @@ grammar_rule_check (const symbol_list *r) void (*warn_at_ptr)(location, char const*, ...) = midrule_warning ? midrule_value_at : warn_at; if (n) - warn_at_ptr (r->location, _("unused value: $%d"), n); + warn_at_ptr (l->location, _("unused value: $%d"), n); else - warn_at_ptr (r->location, _("unset value: $$")); + warn_at_ptr (l->location, _("unset value: $$")); } } } diff --git a/tests/actions.at b/tests/actions.at index ba46fe36..17d9193f 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -1301,16 +1301,16 @@ AT_BISON_OPTION_POPDEFS AT_BISON_CHECK([-o input.c input.y], 0,, [[input.y:33.3-23: warning: unset value: $$ -input.y:30.3-35.37: warning: unused value: $3 +input.y:32.3-23: warning: unused value: $3 ]]) AT_BISON_CHECK([-fcaret -o input.c input.y], 0,, [[input.y:33.3-23: warning: unset value: $$ { @$ = 4; } // Only used. ^^^^^^^^^^^^^^^^^^^^^ -input.y:30.3-35.37: warning: unused value: $3 - { @$ = 1; } // Not set or used. - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +input.y:32.3-23: warning: unused value: $3 + { USE ($$); @$ = 3; } // Only set. + ^^^^^^^^^^^^^^^^^^^^^ ]]) AT_COMPILE([input]) diff --git a/tests/input.at b/tests/input.at index cd0dd6ac..6b876334 100644 --- a/tests/input.at +++ b/tests/input.at @@ -174,42 +174,109 @@ l: INT | INT { $$ = $1; } INT { $$ = $2 + $< _AT_UNUSED_VALUES_DECLARATIONS]) ) -AT_BISON_CHECK(m4_ifval($2, [ --warnings=midrule-values ])[ input.y], [0], [], -[[input.y:11.10-32: warning: unset value: $]$[ -input.y:11.10-32: warning: unused value: $]1[ -input.y:11.10-32: warning: unused value: $]3[ -input.y:11.10-32: warning: unused value: $]5[ +AT_BISON_CHECK(m4_ifval($2, [--warnings=midrule-values ])[-fcaret input.y], + [0], [], +[[input.y:11.10-32: warning: unset value: $][$ + a: INT | INT { } INT { } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^ +input.y:11.10-12: warning: unused value: $][1 + a: INT | INT { } INT { } INT { }; + ^^^ +input.y:11.18-20: warning: unused value: $][3 + a: INT | INT { } INT { } INT { }; + ^^^ +input.y:11.26-28: warning: unused value: $][5 + a: INT | INT { } INT { } INT { }; + ^^^ input.y:12.9: warning: empty rule for typed nonterminal, and no action -]]m4_ifval($2, [[[input.y:13.14-20: warning: unset value: $$ -input.y:13.26-41: warning: unset value: $$ -]]])[[input.y:13.10-62: warning: unset value: $]$[ -input.y:13.10-62: warning: unused value: $]3[ -input.y:13.10-62: warning: unused value: $]5[ -]]m4_ifval($2, [[[input.y:14.14-16: warning: unset value: $$ -]]])[[input.y:14.10-49: warning: unset value: $]$[ -input.y:14.10-49: warning: unused value: $]3[ -input.y:14.10-49: warning: unused value: $]5[ -input.y:15.10-37: warning: unset value: $]$[ -input.y:15.10-37: warning: unused value: $]3[ -input.y:15.10-37: warning: unused value: $]5[ -input.y:17.10-58: warning: unset value: $]$[ -input.y:17.10-58: warning: unused value: $]1[ -]]m4_ifval($2, [[[input.y:17.10-58: warning: unused value: $]2[ -]]])[[input.y:17.10-58: warning: unused value: $]3[ -]]m4_ifval($2, [[[input.y:17.10-58: warning: unused value: $]4[ -]]])[[input.y:17.10-58: warning: unused value: $]5[ -input.y:18.10-72: warning: unset value: $]$[ -input.y:18.10-72: warning: unused value: $]1[ -input.y:18.10-72: warning: unused value: $]3[ -]]m4_ifval($2, [[[input.y:18.10-72: warning: unused value: $]4[ -]]])[[input.y:18.10-72: warning: unused value: $]5[ -]]m4_ifval($2, [[[input.y:20.10-55: warning: unused value: $]3[ -]]])[[input.y:21.10-68: warning: unset value: $]$[ -input.y:21.10-68: warning: unused value: $]1[ -input.y:21.10-68: warning: unused value: $]2[ -]]m4_ifval($2, [[[input.y:21.10-68: warning: unused value: $]4[ -]]]))]) - + b: INT | /* empty */; + ^ +]]m4_ifval($2, [[[input.y:13.14-20: warning: unset value: $][$ + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^^^^^ +input.y:13.26-41: warning: unset value: $][$ + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^^^^^^^^^^^^^^ +]]])[[input.y:13.10-62: warning: unset value: $][$ + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +input.y:13.22-24: warning: unused value: $][3 + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^ +input.y:13.43-45: warning: unused value: $][5 + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^ +]]m4_ifval($2, [[[input.y:14.14-16: warning: unset value: $][$ + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^ +]]])[[input.y:14.10-49: warning: unset value: $][$ + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +input.y:14.18-20: warning: unused value: $][3 + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^ +input.y:14.30-32: warning: unused value: $][5 + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^ +input.y:15.10-37: warning: unset value: $][$ + e: INT | INT { } INT { } INT { $][1; }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +input.y:15.18-20: warning: unused value: $][3 + e: INT | INT { } INT { } INT { $][1; }; + ^^^ +input.y:15.27-29: warning: unused value: $][5 + e: INT | INT { } INT { } INT { $][1; }; + ^^^ +input.y:17.10-58: warning: unset value: $][$ + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +input.y:17.10-12: warning: unused value: $][1 + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^ +]]m4_ifval($2, [[[input.y:17.14-29: warning: unused value: $][2 + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^^^^^^^^^^^^^^ +]]])[[input.y:17.31-33: warning: unused value: $][3 + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^ +]]m4_ifval($2, [[[input.y:17.35-50: warning: unused value: $][4 + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^^^^^^^^^^^^^^ +]]])[[input.y:17.52-54: warning: unused value: $][5 + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^ +input.y:18.10-72: warning: unset value: $][$ + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +input.y:18.10-12: warning: unused value: $][1 + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^ +input.y:18.31-33: warning: unused value: $][3 + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^ +]]m4_ifval($2, [[[input.y:18.35-64: warning: unused value: $][4 + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +]]])[[input.y:18.66-68: warning: unused value: $][5 + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^ +]]m4_ifval($2, [[[input.y:20.18-37: warning: unused value: $][3 + j: INT | INT INT { $$ = 1; } { $][$ = $][1 + $][2; }; + ^^^^^^^^^^^^^^^^^^^^ +]]])[[input.y:21.10-68: warning: unset value: $][$ + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +input.y:21.10-12: warning: unused value: $][1 + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^ +input.y:21.14-16: warning: unused value: $][2 + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^ +]]m4_ifval($2, [[[input.y:21.35-64: warning: unused value: $][4 + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +]]])) +]) ## --------------- ## ## Unused values. ## @@ -353,7 +420,7 @@ tagged: { } ; AT_BISON_CHECK([input.y], [0], [], [[input.y:6.8-45: warning: unset value: $$ -input.y:6.8-45: warning: unused value: $2 +input.y:6.12-14: warning: unused value: $2 input.y:7.6-8: warning: unset value: $$ ]]) @@ -369,7 +436,7 @@ tagged: { } ; ]]) AT_BISON_CHECK([input.y], [0], [], -[[input.y:6.8-45: warning: unused value: $4 +[[input.y:6.23-28: warning: unused value: $4 input.y:8.9-11: warning: unset value: $$ ]]) @@ -394,7 +461,7 @@ end: { } ; AT_BISON_CHECK([input.y], [0], [], [[input.y:6.8-22: warning: unset value: $$ -input.y:6.8-22: warning: unused value: $2 +input.y:6.12-14: warning: unused value: $2 input.y:7.6-8: warning: unset value: $$ ]])