From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19067 invoked by alias); 4 Jan 2012 14:18:29 -0000 Received: (qmail 19056 invoked by uid 22791); 4 Jan 2012 14:18:26 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 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; Wed, 04 Jan 2012 14:18:09 +0000 From: "torvald at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/51752] New: trans-mem: publication safety violated Date: Wed, 04 Jan 2012 14:18:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: torvald at gcc dot gnu.org 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: 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-01/txt/msg00398.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51752 Bug #: 51752 Summary: trans-mem: publication safety violated Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned@gcc.gnu.org ReportedBy: torvald@gcc.gnu.org Created attachment 26238 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26238 publication safety test Publication safety refers to transactions being able to safely publish data by setting something like a shared flag (e.g., "data=23; __transaction_atomic { flag = 1; }"). For that to work, programmers must access the data only if the flag is true. Second, the compiler must preserve program order in this case and is not allowed to reorder the two loads (i.e., load data before loading the flag). Otherwise, there will be a race condition and the data load can return an inconsistent value. The attached test shows that this isn't working currently (e.g., look at 149t.optimized, the load of data is moved to out of the loop and before the "flag" loads).