From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1176 invoked by alias); 28 Jun 2012 04:43:44 -0000 Received: (qmail 1166 invoked by uid 22791); 28 Jun 2012 04:43:42 -0000 X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00,KHOP_THREADED X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 28 Jun 2012 04:43:28 +0000 From: "vincenzo.innocente at cern dot ch" To: gcc-bugs@gcc.gnu.org Subject: [Bug rtl-optimization/53785] coalescing multiple static instances in function scope Date: Thu, 28 Jun 2012 04:43:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: rtl-optimization X-Bugzilla-Keywords: X-Bugzilla-Severity: enhancement X-Bugzilla-Who: vincenzo.innocente at cern dot ch X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2012-06/txt/msg01837.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53785 --- Comment #2 from vincenzo Innocente 2012-06-28 04:43:27 UTC --- I think that no one can rely on the way statics are initialized to tune side effects. The only things to guarantee are that is guarded and, I think, that the order is preserved (because of possible side effects). in case getId is inlined even the order can be optimized in my opinion... Now one can have race conditions, so getId could actually be called by different threads in a unpredictable way. With a single gard it will become a unique critical section (or a sort of transactional memory block). Maybe experts in initialization in multi-threaded environments shall comment further...