<p dir="ltr">On Aug 2, 2015 9:43 AM, "Jeffrey Walton" <<a href="mailto:noloader@gmail.com">noloader@gmail.com</a>> wrote:<br>
><br>
> On Sun, Aug 2, 2015 at 11:49 AM, Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<br>
> > That construct is just a memory barrier that applies to escaped objects.<br>
> > Dead stores to unescaped locals for example will be removed during SSA<br>
> > conversion.<br>
> ><br>
> OK, thanks. That should probably be documented because its different<br>
> behavior from GCC.</p>
<p dir="ltr">GCC's behavior is the same: <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__goo.gl_R5AMDG&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=CnzuN65ENJ1H9py9XLiRvC_UQz6u3oG6GUNn7_wosSM&m=w--YqrGVocpeHYdQPTndIXrMwJRuMW5ABMVQqGO5jpM&s=nF--HZLoh7j40L0CJuB96kDFcPl3luPMv0jr_aR_M-s&e=">https://goo.gl/R5AMDG</a></p>
<p dir="ltr">> Its important information for someone writing a zeroizer for<br>
> compliance reasons, like FIPS 140. (it might even cause a security<br>
> related defect).<br>
><br>
> Jeff<br>
><br>
> > On Aug 1, 2015 9:29 PM, "Jeffrey Walton" <<a href="mailto:noloader@gmail.com">noloader@gmail.com</a>> wrote:<br>
> >><br>
> >> GCC disables optimizations in a function if it encounters inline<br>
> >> assembly. That means we can use a memory barrier to ensure dead stores<br>
> >> are not optimized out:<br>
> >><br>
> >>     delete m_ptr;<br>
> >>     m_ptr = NULL:<br>
> >><br>
> >>     __asm__ __volatile__ ("" ::: "memory");<br>
> >><br>
> >> Clang defines __GNUC__, but its not clear to me if the same behavior<br>
> >> is present. Looking at Language Compatibility at<br>
> >> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_compatibility.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=CnzuN65ENJ1H9py9XLiRvC_UQz6u3oG6GUNn7_wosSM&m=w--YqrGVocpeHYdQPTndIXrMwJRuMW5ABMVQqGO5jpM&s=agPRRnkGTuH_XByhokYkXVFDtISyWU1kmZgRQpovBwU&e=">http://clang.llvm.org/compatibility.html</a>, there is no discussion of<br>
> >> the behavior.<br>
> >><br>
> >> Does inline assembly or a memory barrier tame the optimizer in a<br>
> >> function so that dead stores are not removed?<br>
> >><br>
> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</p>