From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 40F7F385E836; Wed, 8 May 2024 12:07:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 40F7F385E836 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1715170039; bh=SoDgrDySwnk8NS0dQdOdrS2mAZcFhjZESuBvJT+WSes=; h=From:To:Subject:Date:In-Reply-To:References:From; b=B/ctLmvsUhsJsZvq8rHOovW/gcG35S+/wT5o0W4dbDKHqwgQ/fRx26u2EWm1/XoOm BDgIyOX0lSl65xrOvDeSC56guvMbTWcO0pY8M6SvjRAWnyWVOIr4vcWj/LZ/H6siGk InXAg9/l+QPUq7Q8dJVlpqvhOhf3HZXNYSjg4XHk= From: "ro at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug analyzer/107750] [13/14/15 Regression] Many gcc.dg/analyzer/fd-*.c tests FAIL Date: Wed, 08 May 2024 12:07:18 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: analyzer X-Bugzilla-Version: 13.0 X-Bugzilla-Keywords: testsuite-fail X-Bugzilla-Severity: normal X-Bugzilla-Who: ro at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: dmalcolm at gcc dot gnu.org X-Bugzilla-Target-Milestone: 13.3 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=3D107750 --- Comment #6 from Rainer Orth --- David, after your amazing work on PR analyzer/111475, there are only a hand= ful of analyzer failures left on trunk: FAIL: gcc.dg/analyzer/fd-accept.c (test for excess errors) FAIL: gcc.dg/analyzer/fd-accept.c final event at line 58 (test for warnings, line 57) FAIL: gcc.dg/analyzer/fd-accept.c warning (test for warnings, line 57) FAIL: gcc.dg/analyzer/fd-access-mode-target-headers.c (test for warnings, = line 19) FAIL: gcc.dg/analyzer/fd-access-mode-target-headers.c (test for warnings, = line 27) FAIL: gcc.dg/analyzer/fd-access-mode-target-headers.c (test for warnings, = line 32) FAIL: gcc.dg/analyzer/fd-access-mode-target-headers.c (test for warnings, = line 39) FAIL: gcc.dg/analyzer/fd-access-mode-target-headers.c (test for warnings, = line 55) FAIL: gcc.dg/analyzer/fd-access-mode-target-headers.c (test for excess erro= rs) FAIL: gcc.dg/analyzer/fd-connect.c (test for warnings, line 35) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 13) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 32) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 38) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 50) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 72) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 83) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 86) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 94) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for warnings, line 98) FAIL: gcc.dg/analyzer/fd-datagram-socket.c (test for excess errors) FAIL: gcc.dg/analyzer/fd-datagram-socket.c final event at line 110 (test for warnings, line 109) FAIL: gcc.dg/analyzer/fd-datagram-socket.c final event at line 88 (test for warnings, line 87) FAIL: gcc.dg/analyzer/fd-datagram-socket.c warning (test for warnings, line 109) FAIL: gcc.dg/analyzer/fd-datagram-socket.c warning (test for warnings, line= 87) FAIL: gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c (test for ex= cess errors) FAIL: gcc.dg/analyzer/fd-listen.c (test for excess errors) FAIL: gcc.dg/analyzer/fd-listen.c final event at line 55 (test for warnings, line 54) FAIL: gcc.dg/analyzer/fd-listen.c warning (test for warnings, line 54) FAIL: gcc.dg/analyzer/fd-socket-misuse.c (test for warnings, line 18) FAIL: gcc.dg/analyzer/fd-socket-misuse.c (test for excess errors) FAIL: gcc.dg/analyzer/fd-socket-misuse.c final event at line 22 (test for warnings, line 21) FAIL: gcc.dg/analyzer/fd-socket-misuse.c warning (test for warnings, line 2= 1) FAIL: gcc.dg/analyzer/fd-stream-socket-active-open.c (test for warnings, l= ine 21) FAIL: gcc.dg/analyzer/fd-stream-socket-active-open.c (test for warnings, l= ine 32) FAIL: gcc.dg/analyzer/fd-stream-socket-active-open.c (test for warnings, l= ine 39) FAIL: gcc.dg/analyzer/fd-stream-socket-active-open.c (test for warnings, l= ine 47) FAIL: gcc.dg/analyzer/fd-stream-socket-active-open.c (test for excess error= s) FAIL: gcc.dg/analyzer/fd-stream-socket-passive-open.c (test for warnings, = line 27) FAIL: gcc.dg/analyzer/fd-stream-socket-passive-open.c (test for warnings, = line 35) FAIL: gcc.dg/analyzer/fd-stream-socket-passive-open.c (test for warnings, = line 41) FAIL: gcc.dg/analyzer/fd-stream-socket-passive-open.c (test for warnings, = line 46) FAIL: gcc.dg/analyzer/fd-stream-socket-passive-open.c (test for excess erro= rs) FAIL: gcc.dg/analyzer/fd-stream-socket.c (test for warnings, line 13) FAIL: gcc.dg/analyzer/fd-stream-socket.c (test for warnings, line 37) FAIL: gcc.dg/analyzer/fd-stream-socket.c (test for warnings, line 70) FAIL: gcc.dg/analyzer/fd-stream-socket.c (test for warnings, line 81) FAIL: gcc.dg/analyzer/fd-stream-socket.c (test for warnings, line 92) As an example, I looked into fd-accept.c, which shows those differences bet= ween Linux and Solaris output: --- /homes/ro/fd-accept.out.i.linux 2024-05-08 13:19:07.595246605 +0200 +++ fd-accept.out.i 2024-05-08 13:23:30.986283368 +0200 @@ -23,2 +23,2 @@ -/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/fd-accept.c:57:= 3: warning: =E2=80=98accept=E2=80=99 on datagram socket file descriptor =E2=80= =98fd=E2=80=99 [-Wanalyzer-fd-type-mismatch] -/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/fd-accept.c:54:= 12: note: (1) datagram socket created here +/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/fd-accept.c:57:= 3: warning: =E2=80=98accept=E2=80=99 on file descriptor =E2=80=98fd=E2=80=99 i= n wrong phase [CWE-666] [-Wanalyzer-fd-phase-mismatch] +/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/fd-accept.c:54:= 12: note: (1) socket created here @@ -28 +28 @@ -/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/fd-accept.c:57:= 3: note: (5) =E2=80=98accept=E2=80=99 expects a stream socket file descriptor = but =E2=80=98fd=E2=80=99 is a datagram socket +/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/analyzer/fd-accept.c:57:= 3: note: (5) =E2=80=98accept=E2=80=99 expects a listening stream socket file d= escriptor but =E2=80=98fd=E2=80=99 has not yet been bound Obviously the analyzer couldn't determine that fd is a datagram socket in test_accept_on_new_datagram_socket. However, if I compile the preprocessed Linux fd-accept.i on Solaris, I get the same output as on Linux. While Linux has enum __socket_type { SOCK_STREAM =3D 1, /* Sequenced, reliable, connection-based byte streams. */ #define SOCK_STREAM SOCK_STREAM SOCK_DGRAM =3D 2, /* Connectionless, unreliable datagrams of fixed maximum length. */ #define SOCK_DGRAM SOCK_DGRAM Solaris has plain #define's instead: #define SOCK_STREAM 2 /* stream socket */ #define SOCK_DGRAM 1 /* datagram socket */ As yo suspected in Comment #2, the analyzer seems unable to handle that yet. As an experiment, I hacked the SOCK_STREAM and SOCK_DGRAM definitions in fd-accept.i on Solaris to also use an enum instead, the test now produces the same output as on Li= nux. I also had a quick look into AIX 7.2 and found it also uses #define's for the SOCK_* constants, thus explaining that the tests FAIL the= re, too. FreeBSD 14.0 is the same, so this seems to be a common theme= .=