<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.26.0">
</HEAD>
<BODY>
On Thu, 2010-02-25 at 16:55 -0800, Keith Packard wrote:
<BLOCKQUOTE TYPE=CITE>
<PRE>
On Thu, 25 Feb 2010 18:16:21 -0500, Gaetan Nadon &lt;<A HREF="mailto:memsize@videotron.ca">memsize@videotron.ca</A>&gt; wrote:

&gt; Drivers and apps excluded? (or case by case)

Drivers are part of the server. I'd hope that we would have noticed if
any of the apps are broken by now though.

&gt; It's easy to add a variable, say $(PROJECT_CFLAGS) that is added in each
&gt; makefile. Ideally it would be empty, meaning there is no problem to
&gt; solve. If a new feature is implemented which causes several bugs, we can
&gt; turn it off by adding the appropriate option until it stabilizes and
&gt; then remove it.

Yeah, a global PROJECT_CFLAGS might be nice, just in case.
&gt; Macros:
&gt; XORG_PROJECT_CFLAGS which defines $(PROJECT_CFLAGS) variable
&gt; XORG_WARNING_CFLAGS which defines $(WARNING_CFLAGS) variable set to -W*
&gt; XORG_OPTIMIZATION_CFLAGS which defines $(OPTIMIZATION_CFLAGS) variable
&gt; set to -fno-strict-aliasing

Yeah, that should work; if someone has a better idea for names, please
speak up though.

&gt; Proposed content for makefiles where -fno-strict-aliasing is needed:
&gt; AM_CFLAGS = \
&gt;      $(PROJECT_CFLAGS) \
&gt;      $(WARNING_CFLAGS) \
&gt;      $(OPTIMIZATION_CFLAGS)
&gt; 
&gt; Proposed content for makefiles where -fno-strict-aliasing is *not*
&gt; needed:
&gt; AM_CFLAGS = \
&gt;      $(PROJECT_CFLAGS) \
&gt;      $(WARNING_CFLAGS)

I'm tempted to suggest that we just use $(OPTIMIZATION_CFLAGS)
everywhere, or give it a name which reflects where it should be used
instead of making people guess.

</PRE>
</BLOCKQUOTE>
Let's put it everywhere. It simplifies usage, we may need to add another option in the future. If it ever gets fixable in a large portion of the system, we can remove it from the macro and add it locally to a few makefiles.
<BLOCKQUOTE TYPE=CITE>
<PRE>
&gt; Let's rewrite history using these macros:
&gt; 
&gt; ~2005: gnu changes optimization that breaks a fair amount of code. The
&gt; -fno-strict-aliasing is added in XORG_PROJECT_CFLAGS which returns the
&gt; system to the previous state. Further investigation shows that it may
&gt; never be possible to change all the code, so a new
&gt; XORG_OPTIMIZATION_CFLAGS macro is created and becomes a permanent
&gt; solution for a large part of the system. The -fno-strict-aliasing option
&gt; is then removed from XORG_PROJECT_CFLAGS and ready for the next problem.
&gt; 
&gt; The word &quot;WARNING&quot; and OPTIMIZATION&quot; are taken from the compiler options
&gt; category. There are many other categories like Debugging or Linker. By
&gt; naming the macro according to the category, we would never be in a
&gt; situation where we stick an optimization option in a warning macro. If
&gt; another optimization goes bad, it would go in XORG_OPTIMIZATION_CFLAGS
&gt; as well.

Ok, these descriptions make sense, but again, if we're doing this, we
should use the flag everywhere. It's hard to imagine what code in X
would actually benefit from the GCC 'improvements'.
</PRE>
</BLOCKQUOTE>
<BR>
LLVM release notes:<BR>
<BR>
<BLOCKQUOTE>
<PRE>
The C back-end produces code that violates the ANSI C Type-Based Alias Analysis rules. 
As such, special options may be necessary to compile the code 
(for example, GCC requires the <TT>-fno-strict-aliasing</TT> option). 
This problem probably cannot be fixed.
</PRE>
</BLOCKQUOTE>
<BR>
GNOME patch:<BR>
<BR>
<BLOCKQUOTE>
<PRE>
commit 53e0b83f80172a779e4972067c5e9a9c6b9c94c2
Author: Matthew Barnes &lt;mbarnes@xxxxxxxxxx&gt;
Date: Tue Feb 2 12:27:38 2010 -0500

Disable strict aliasing optimization.

[...]

GCC 4.4 got more aggressive in it's aliasing optimizations, changing
behavior that -- according to the C99 standard -- is supposed to be
undefined. We may still have aliasing abuses lying around that rely
on GCC's previous &quot;undefined&quot; behavior but are hidden by type casts,
so disable the strict-aliasing optimzation until GCC (or even LLVM)
learns how to detect them and warn us about it.
</PRE>
</BLOCKQUOTE>
<BR>
Comments on performance:<BR>
<A HREF="http://stackoverflow.com/questions/1225741/performance-impact-of-fno-strict-aliasing">http://stackoverflow.com/questions/1225741/performance-impact-of-fno-strict-aliasing</A><BR>
<BR>
&quot;Understanding Strict Aliasing&quot; by Mike Acton:<BR>
<A HREF="http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html">http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html</A><BR>
<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
<PRE>

&gt; The legacy CWARNFLAGS would be left alone to handle previous versions of
&gt; xserver/libs...

Yeah, probably forever too.
</PRE>
</BLOCKQUOTE>
<PRE>
Indeed
</PRE>
<BR>
I'll submit a patch for the new macro definitions. Comments are welcome at anytime.<BR>
<BR>
Thanks<BR>
<BR>
</BODY>
</HTML>