From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 773 invoked by alias); 13 Oct 2011 08:43:33 -0000 Received: (qmail 759 invoked by uid 22791); 13 Oct 2011 08:43:32 -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; Thu, 13 Oct 2011 08:43:16 +0000 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/50364] Volatile miscompilation Date: Thu, 13 Oct 2011 08:43:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Status Resolution 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: 2011-10/txt/msg01212.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50364 Richard Guenther changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |INVALID --- Comment #2 from Richard Guenther 2011-10-13 08:43:10 UTC --- That works as designed. See the recent discussion about this very topic on the gcc mailinglist and 2010-08-19 Nathan Sidwell Richard Guenther * gimplify.c (gimplify_modify_expr): When assigning to volatiles, copy the src value and return a copy. * doc/extend.texi (Volatiles): Move from C++ to C and expand. (C++ Volatiles): Adjust to describe C++ semantics only. esp. "Assignments are also expressions and have an rvalue. However when assigning to a scalar volatile, the volatile object is not reread, regardless of whether the assignment expression's rvalue is used or not. If the assignment's rvalue is used, the value is that assigned to the volatile object. For instance, there is no read of @var{vobj} in all the following cases: @smallexample int obj; volatile int vobj; vobj = @var{something}; obj = vobj = @var{something}; obj ? vobj = @var{onething} : vobj = @var{anotherthing}; obj = (@var{something}, vobj = @var{anotherthing}); @end smallexample If you need to read the volatile object after an assignment has occurred, you must use a separate expression with an intervening sequence point."