<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jun 17, 2013 at 5:34 PM, Jeffrey Walton <span dir="ltr"><<a href="mailto:noloader@gmail.com" target="_blank">noloader@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">On Mon, Jun 17, 2013 at 8:23 PM, Jeffrey Walton <<a href="mailto:noloader@gmail.com">noloader@gmail.com</a>> wrote:<br>

> On Mon, Jun 17, 2013 at 7:19 PM, Joshua Cranmer 🐧 <<a href="mailto:Pidgeot18@gmail.com">Pidgeot18@gmail.com</a>> wrote:<br>
>> On 6/17/2013 5:32 PM, Jeffrey Walton wrote:<br>
>>> On Mon, Jun 17, 2013 at 6:23 PM, Sean Silva <<a href="mailto:silvas@purdue.edu">silvas@purdue.edu</a>> wrote:<br>
>>>><br>
</div>>>>> ...<br>
<div class="im">>>><br>
>>> That brings up a good point. As I understand it, volatile is<br>
>>> essentially implementation defined. What is Clang/LLVM's<br>
>>> interpretation?<br>
>><br>
>> Volatile has an explicit definition in C99/C11/C++03/C++11, and it's roughly<br>
>> the same in all of them. Volatile objects "may be modified in ways unknown<br>
>> to the<br>
>> implementation or have other unknown side effects" (to quote C99), and the<br>
>> implementation must therefore preserve the accesses and their order even<br>
>> when optimizing.<br>
> OK, thanks. I must have been quoted something else on another list.<br>
> I'll try and locate the email.<br>
</div>Here's what I found. It was from Andrew Haley, who I beleve is one of<br>
the GCC devs.<br>
<br>
GCC List >>> A good discussion on the subject can be found at<br>
GCC List >>> <a href="http://gcc.gnu.org/ml/gcc-help/2012-03/msg00239.html" target="_blank">http://gcc.gnu.org/ml/gcc-help/2012-03/msg00239.html</a>.<br>
GCC List >>><br>
GCC List >> The thread includes a discussion of Microsoft's and GCC's<br>
GCC List >> interpretation of the keyword. The interpretations were so<br>
different I<br>
GCC List >> wondered if it was 'implementation defined' in the standard.<br>
GCC List ><br>
GCC List > Yes: 6.7.3 Type qualifiers, "What constitutes an access to an object<br>
GCC List > that has volatile-qualified type is implementation-defined."<br>
<br>
I'm pretty sure that's where I latched onto 'volatile' being<br>
implementation defined. I tend to trust the opinions of Ian Lance<br>
Taylor, Jonathan Wakely, and Andrew Haley when it comes to GCC. Andrew<br>
cited the standard above.<br></blockquote><div><br></div><div style>For GCC, I usually just look at what Linux does to coerce the compiler into submission, since if it breaks, the GCC devs will catch a lot of heat from the Linux developers. For example, one macro they have is the ACCESS_ONCE macro <<a href="https://lwn.net/Articles/508991/">https://lwn.net/Articles/508991/</a>> which is literally just a cast to a volatile-qualified type.</div>
<div style><br></div><div style>-- Sean Silva </div></div></div></div>