From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id D89D83858D28; Sat, 23 Oct 2021 15:27:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D89D83858D28 From: "mytbk920423 at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c/102909] New: Missing -Wunused-but-set-variable warning Date: Sat, 23 Oct 2021 15:27:19 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c X-Bugzilla-Version: 11.2.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: mytbk920423 at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Oct 2021 15:27:20 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D102909 Bug ID: 102909 Summary: Missing -Wunused-but-set-variable warning Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: mytbk920423 at gmail dot com Target Milestone: --- GCC misses the -Wunused-but-set-variable in the some code (GCC and Clang ou= tput can be seen in https://godbolt.org/z/7658M4qra). I first found a bug caused by the following code, in which no compilers war= n: void ioapic_set_max_vectors(void *ioapic_base, int mre_count) { u32 reg; u8 count; reg =3D io_apic_read(ioapic_base, 0x01); count =3D reg >> 16; if (mre_count > 0) count =3D mre_count - 1; // reg is defined but not used after this reg &=3D ~(0xff << 16); reg |=3D count << 16; // ``count`` should be ``reg`` in the following line io_apic_write(ioapic_base, 0x01, count); } I think that's because the variable ``reg`` is only unused in part of the control flow, so I change the code as following. However, GCC doesn't warn = on this either. void ioapic_set_max_vectors(void *ioapic_base, int mre_count) { u32 reg; u32 new_reg; u8 count; reg =3D io_apic_read(ioapic_base, 0x01); count =3D reg >> 16; if (mre_count > 0) count =3D mre_count - 1; // new_reg is defined but not used new_reg =3D reg & (~(0xff << 16)); new_reg |=3D count << 16; // ``count`` should be ``new_reg`` in the following io_apic_write(ioapic_base, 0x01, count); }=