From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 29D9A3890410; Sun, 7 Mar 2021 20:50:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 29D9A3890410 From: "nathan at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/99456] New: [11 regression] ABI breakage with some static initialization Date: Sun, 07 Mar 2021 20:50:54 +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.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: nathan 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 attachments.created 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: Sun, 07 Mar 2021 20:50:55 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D99456 Bug ID: 99456 Summary: [11 regression] ABI breakage with some static initialization Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nathan at gcc dot gnu.org Target Milestone: --- Created attachment 50326 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=3D50326&action=3Dedit testcase I've noticed some poorer behaviour in trunk than gcc10 with emitting inline vars. The example when compiled with gcc-10 -std=3Dc++17 emits only those = vars that are reachable from the externally visible vars. I.e. Var1...Var4 are = NOT present. Further all vars are statically initialized with no global initializer function. (This is regardless of optimization level). With trunk, all the inline vars are emitted, even when not referenced.=20 Further, there is a gloabl initializer function emitted, that only tests and sets their respective guard variables, with two exceptions. Var3 and Var13 are dynamically initialized. This is an abi breakage. I attach the two assembly files generated (the source presumes LP32 or LP64 ABI)=