From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 5D27E3858403; Sat, 1 Jan 2022 05:48:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5D27E3858403 From: "pinskia at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/98364] [modules] unnneded global constructors are emitted for a module Date: Sat, 01 Jan 2022 05:48:24 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 11.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: enhancement X-Bugzilla-Who: pinskia at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: nathan at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_status short_desc bug_severity 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 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: Sat, 01 Jan 2022 05:48:24 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D98364 Andrew Pinski changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW Summary|[modules] global |[modules] unnneded global |constructor emission |constructors are emitted | |for a module Severity|normal |enhancement --- Comment #8 from Andrew Pinski --- Confirmed: ;; Function (static initializers for hello.cc) (_ZGIW5helloEv) ;; enabled by -tree-original { static bool __in_chrg; static bool __in_chrg; if (__in_chrg) { return; } <>>>>; } In main-hello.cc.005t.original. The code comes from start_objects in cp/decl2.c: if (module_init > 0) { // 'static bool __in_chrg =3D false; // if (__inchrg) return; // __inchrg =3D true tree var =3D build_lang_decl (VAR_DECL, in_charge_identifier, boolean_type_node); DECL_CONTEXT (var) =3D fndecl; DECL_ARTIFICIAL (var) =3D true; TREE_STATIC (var) =3D true; pushdecl (var); cp_finish_decl (var, NULL_TREE, false, NULL_TREE, 0); tree if_stmt =3D begin_if_stmt (); finish_if_stmt_cond (var, if_stmt); finish_return_stmt (NULL_TREE); finish_then_clause (if_stmt); finish_if_stmt (if_stmt); tree assign =3D build2 (MODIFY_EXPR, boolean_type_node, var, boolean_true_node); TREE_SIDE_EFFECTS (assign) =3D true; finish_expr_stmt (assign); } if (module_init) module_add_import_initializers (); Maybe if there are no initializers, maybe we should not create the global i= nit.=