with: void foo(void) { const int ID = 1; switch (0) { case ID: break; } } # gcc-7 -Wall -c foo.cpp # gcc-8 -Wall -c foo.cpp foo.cpp: In function 'void foo()': foo.cpp:2:13: warning: variable 'ID' set but not used [-Wunused-but-set-variable] const int ID = 1; ^~
Started with r253266: commit 4cedc476c94a41551d965bc57fbbe0186983c3c4 Author: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Thu Sep 28 19:39:45 2017 +0000 PR c++/56973, DR 696 - capture constant variables only as needed.
Testcase from another PR for similar issue: enum a { b }; struct c { template < a > int d() { const bool is_ident = 0; const int ret = is_ident ? 7 : 9; return ret; } void e() { d < b > (); } };
*** Bug 82799 has been marked as a duplicate of this bug. ***
Author: jason Date: Thu Jan 11 19:08:41 2018 New Revision: 256550 URL: https://gcc.gnu.org/viewcvs?rev=256550&root=gcc&view=rev Log: PR c++/82728 - wrong -Wunused-but-set-variable PR c++/82799 PR c++/83690 * call.c (perform_implicit_conversion_flags): Call mark_rvalue_use. * decl.c (case_conversion): Likewise. * semantics.c (finish_static_assert): Call perform_implicit_conversion_flags. Added: trunk/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch2.C trunk/gcc/testsuite/g++.dg/warn/Wunused-var-27.C trunk/gcc/testsuite/g++.dg/warn/Wunused-var-28.C trunk/gcc/testsuite/g++.dg/warn/Wunused-var-29.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/call.c trunk/gcc/cp/decl.c trunk/gcc/cp/semantics.c
Fixed.
(In reply to Jason Merrill from comment #5) > Fixed. It seems to be broken again on gcc 8.1: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85963