From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id AA39D3857026; Wed, 7 Oct 2020 14:17:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AA39D3857026 From: "nsz at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c/97321] New: add warning for pointer casts that may lead to aliasing violation when dereferenced Date: Wed, 07 Oct 2020 14:17:35 +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: 10.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: nsz at gcc dot gnu.org 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: Wed, 07 Oct 2020 14:17:35 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D97321 Bug ID: 97321 Summary: add warning for pointer casts that may lead to aliasing violation when dereferenced Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: nsz at gcc dot gnu.org Target Milestone: --- consider: int f(unsigned char **); int g(char *p) { return f((unsigned char **)&p); } such code is almost surely wrong (if f dereferences its argument) this is a common mistake and it seems gcc-11 will optimize such code more aggressively which can lead to broken behavior, see bug 97264. so it would be useful to simply warn about casts between pointer types that cannot alias. e.g.: "warning: dangerous cast from `char **` to `unsigned char **` can lead to aliasing violation [-Wpointer-cast]" does not have to be in -Wall, but the current aliasing warnings are too weak to catch bugs like in the example.=