From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id E12C43858C66; Tue, 12 Sep 2023 20:31:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E12C43858C66 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1694550696; bh=o6SwBp2Y7vUVmiCVw3WfdD6Ku5dD5I+vIKh9tby+QKQ=; h=From:To:Subject:Date:From; b=DHQWtLn5WuA1s/mM66IlgvbmlHni4K34JFrrSS60+5jLp4QKd6W1RxnesK+HdgRkt X6xdjXp6Wade7t2217JJx3SwQ6S0WPwI0t5fT7W7ACLRdaltpF6aHn4EhmyEovK7nw DXcZ+q1Q3NaJjXeY1PuY1Zy3dLtwSGGqCmuKFKlA= From: "skiminki at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/111397] New: Spurious warning "'({anonymous})' is used uninitialized" when calling a __returns_twice__ function (-Wuninitialized -O2) Date: Tue, 12 Sep 2023 20:31:36 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 13.2.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: skiminki 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 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D111397 Bug ID: 111397 Summary: Spurious warning "'({anonymous})' is used uninitialized" when calling a __returns_twice__ function (-Wuninitialized -O2) Product: gcc Version: 13.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: skiminki at gmail dot com Target Milestone: --- The following piece of code triggers a spurious warning when calling test_setjmpex() on GCC 12.3 and GCC 13.2 using -O2 or -O3. test.c: # compile with: gcc -c -O2 -Wuninitialized test.c int globalVar =3D 1; int __attribute__ ((__returns_twice__)) test_setjmpex(void *context); void testfn() { int localVar =3D globalVar; while (!localVar) { // The below triggers: // warning: '({anonymous})' is used uninitialized [-Wuninitialize= d] test_setjmpex(__builtin_frame_address (0)); if (globalVar) break; } } No includes needed, so I omitted the .i file. Initially setting tree-optimization as the component based on a guess. This was found when compiling Weiss (chess engine) for mingw, but the reduc= ed test case triggers the warning on regular Linux, too. (Link to the original issue: https://github.com/TerjeKir/weiss/issues/680 ) Godbolt link: https://godbolt.org/z/ec1dKsx4q Experimentation with godbolt: - Affected GCC versions: 12.1 - 12.3; 13.1 - 13.2 ; multiple targets (at le= ast: x86-64, aarch64, risc-v) - No warning on 11.x - No warning on trunk - No warning on -O1 Full repro: ----------- # Ubuntu 23.04 / x86_64-linux-gnu docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp gcc:13.2 gcc -v = -c -O2 -Wuninitialized test.c Repro output: ------------- Using built-in specs. COLLECT_GCC=3Dgcc Target: x86_64-linux-gnu Configured with: /usr/src/gcc/configure --build=3Dx86_64-linux-gnu --disable-multilib --enable-languages=3Dc,c++,fortran,go Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 12.3.0 (GCC)=20 COLLECT_GCC_OPTIONS=3D'-v' '-c' '-O2' '-Wuninitialized' '-mtune=3Dgeneric' '-march=3Dx86-64' /usr/local/libexec/gcc/x86_64-linux-gnu/12.3.0/cc1 -quiet -v -imultiarch x86_64-linux-gnu test.c -quiet -dumpbase test.c -dumpbase-ext .c -mtune=3Dg= eneric -march=3Dx86-64 -O2 -Wuninitialized -version -o /tmp/ccZm0Pke.s GNU C17 (GCC) version 12.3.0 (x86_64-linux-gnu) compiled by GNU C version 12.3.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=3D100 --param ggc-min-heapsize=3D131= 072 ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/local/lib/gcc/x86_64-linux-gnu/12.3.0/../../../../x86_64-linux-gnu/in= clude" #include "..." search starts here: #include <...> search starts here: /usr/local/lib/gcc/x86_64-linux-gnu/12.3.0/include /usr/local/include /usr/local/lib/gcc/x86_64-linux-gnu/12.3.0/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. GNU C17 (GCC) version 12.3.0 (x86_64-linux-gnu) compiled by GNU C version 12.3.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=3D100 --param ggc-min-heapsize=3D131= 072 Compiler executable checksum: 1e1b4098557fa4aa478a5470075c20a5 test.c: In function 'testfn': test.c:12:11: warning: '({anonymous})' is used uninitialized [-Wuninitializ= ed] 12 | test_setjmpex(__builtin_frame_address (0)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ COLLECT_GCC_OPTIONS=3D'-v' '-c' '-O2' '-Wuninitialized' '-mtune=3Dgeneric' '-march=3Dx86-64' as -v --64 -o test.o /tmp/ccZm0Pke.s GNU assembler version 2.40 (x86_64-linux-gnu) using BFD version (GNU Binuti= ls for Debian) 2.40 COMPILER_PATH=3D/usr/local/libexec/gcc/x86_64-linux-gnu/12.3.0/:/usr/local/= libexec/gcc/x86_64-linux-gnu/12.3.0/:/usr/local/libexec/gcc/x86_64-linux-gn= u/:/usr/local/lib/gcc/x86_64-linux-gnu/12.3.0/:/usr/local/lib/gcc/x86_64-li= nux-gnu/ LIBRARY_PATH=3D/usr/local/lib/gcc/x86_64-linux-gnu/12.3.0/:/usr/local/lib/g= cc/x86_64-linux-gnu/12.3.0/../../../../lib64/:/lib/x86_64-linux-gnu/:/lib/.= ./lib64/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/usr/local/lib/gcc/x= 86_64-linux-gnu/12.3.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS=3D'-v' '-c' '-O2' '-Wuninitialized' '-mtune=3Dgeneric' '-march=3Dx86-64'=