From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id C1F7F3858D38; Sat, 18 Feb 2023 20:27:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C1F7F3858D38 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1676752035; bh=f8ftjaNVFromWiLjAABf4H42IVSVzOH7JDXapN0brwM=; h=From:To:Subject:Date:In-Reply-To:References:From; b=c0+h8lPZvs1XzvYM2UlwM144zq+3DwsA0WOkj2d2UgwagwNQvX+gpZC69g66JZsia MsX7dmEz9IRKsrv7+JIf1xF8Dd5nsiuMKqU01PM4JUMwT3zLBNNBrSbZmip+H/0rud GNfu5C0HLoUPR3EkGY5+cAada4iytSxGvjCpNxH4= From: "qrzhang at gatech dot edu" To: gcc-bugs@gcc.gnu.org Subject: [Bug sanitizer/108845] Unnecessary signed integer overflow checks Date: Sat, 18 Feb 2023 20:27:15 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: sanitizer X-Bugzilla-Version: unknown X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: qrzhang at gatech dot edu 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: Message-ID: In-Reply-To: References: 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 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D108845 --- Comment #3 from Qirun Zhang --- (In reply to Jakub Jelinek from comment #2) > I'm not convinced it is a good idea. > Sure, in the above case it is obvious it will never trigger, but if we say > use ranger to decide if the operation can or can't overflow, then VRP is = in > many cases based on assumptions which only hold for valid code, but > sanitizers actually want to diagnose invalid code. Thanks! Here is another (similar) example. Earlier versions of GCC will not inject UBSAN_CHECK_ADD. However, the latest version of GCC will. the code example: =3D=3D=3D=3D=3D=3D void main() { int a =3D 0; for (; a !=3D 2; a++) ; } =3D=3D=3D=3D=3D=3D Compile with "gcc-11 -fsanitize=3Dsigned-integer-overflow -O3=20 -fdump-tree-optimized", we got no UBSAN checks: =3D=3D=3D=3D=3D=3D void main () { int a; [local count: 118111600]: [local count: 955630225]: # a_6 =3D PHI <1(3), 0(2)> a_3 =3D a_6 + 1; if (a_3 !=3D 2) goto ; [87.64%] else goto ; [12.36%] [local count: 118111600]: return; } =3D=3D=3D=3D=3D=3D Compile with "gcc-trunk -fsanitize=3Dsigned-integer-overflow -O3=20 -fdump-tree-optimized", we got one: =3D=3D=3D=3D=3D=3D void main () { int a; [local count: 118111600]: [local count: 955630225]: # a_5 =3D PHI a_3 =3D .UBSAN_CHECK_ADD (a_5, 1); if (a_3 !=3D 2) goto ; [89.00%] else goto ; [11.00%] [local count: 118111600]: return; } =3D=3D=3D=3D=3D=3D $ gcc-trunk -v gcc version 13.0.1 20230218 (experimental) [master r13-6132-g32b5875c911] (= GCC)=