diff mbox

[wwwdocs] gcc-4.6/porting_to.html

Message ID alpine.LNX.2.00.1110121738020.6773@gerinyyl.fvgr
State New
Headers show

Commit Message

Gerald Pfeifer Oct. 12, 2011, 11:38 p.m. UTC
On Tue, 11 Oct 2011, Benjamin Kosnik wrote:
>> Many users still won't have GCC 4.6 deployed yet, so I think it's
>> still worth it.
> Ouch. I see this is not in, and I though I checked in the draft months 
> ago.
> 
> Please check this in immediately!!!

Done last evening, and made some further tweaks.

For reference hre is the full patch that's now live on the system.

Gerald
diff mbox

Patch

Index: porting_to.html
===================================================================
RCS file: porting_to.html
diff -N porting_to.html
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ porting_to.html	12 Oct 2011 16:16:54 -0000	1.3
@@ -0,0 +1,150 @@ 
+<html>
+
+<head>
+<title>Porting to GCC 4.6</title>
+</head>
+
+<body>
+<h1>Porting to GCC 4.6</h1>
+
+<p>
+The GCC 4.6 release series differs from previous GCC releases in more
+than the usual list of
+<a href="http://gcc.gnu.org/gcc-4.6/changes.html">changes</a>. Some of
+these are a result of bug fixing, and some old behaviors have been
+intentionally changed in order to support new standards, or relaxed
+instandards-conforming ways to facilitate compilation or runtime
+performance.  Some of these changes are not visible to the naked eye
+and will not cause problems when updating from older versions.
+</p>
+
+<p>
+However, some of these changes are visible, and can cause grief to
+users porting to GCC 4.6. This document is an effort to identify major
+issues and provide clear solutions in a quick and easily searched
+manner. Additions and suggestions for improvement are welcome.
+</p>
+
+<h2>C language issues</h2>
+
+<h3>New warnings for unused variables and parameters</h3>
+
+<p>
+The behavior of <code>-Wall</code> has changed and now includes the
+new warning flags <code>-Wunused-but-set-variable</code> and
+(with <code>-Wall
+-Wextra</code>) <code>-Wunused-but-set-parameter</code>. This may
+result in new warnings in code that compiled cleanly with previous
+versions of GCC.
+</p>
+
+<p>For example,</p>
+<pre>
+  void fn (void)
+  {
+    int foo;
+    foo = bar ();  /* foo is never used.  */
+  }
+</pre>
+<p>Gives the following diagnostic:</p>
+<pre>
+warning: variable "foo" set but not used [-Wunused-but-set-variable]
+</pre>
+
+<p>Although these warnings will not result in compilation failure,
+often <code>-Wall</code> is used in conjunction with
+<code>-Werror</code> and as a result, new warnings are turned into
+new errors.</p>
+ 
+<p>To fix, first see if the unused variable or parameter can be removed
+without changing the result or logic of the surrounding code. If not,
+annotate it with <code>__attribute__((__unused__))</code>.</p>
+ 
+<p>As a workaround, remove <code>-Werror</code> until the new warnings
+are fixed.  For conversion warnings add
+<code>-Wno-unused-but-set-variable</code> or
+<code>-Wno-unused-but-set-parameter</code>.</p>
+
+<h3>Strict overflow warnings</h3>
+
+<p>Using the <code>-Wstrict-overflow</code> flag with
+<code>-Werror</code> and optmization flags above <code>-O2</code>
+may result in compile errors when using glibc optimizations
+for <code>strcmp</code>.</p>
+
+<p>For example,</p>
+<pre>
+#include &lt;string.h&gt;
+void do_rm_rf (const char *p) { if (strcmp (p, "/") == 0) return; }
+</pre>
+<p>Results in the following diagnostic:</p>
+<pre>
+error: assuming signed overflow does not occur when changing X +- C1 cmp C2 to X cmp C1 +- C2 [-Werror=strict-overflow]
+</pre>
+
+<p>To work around this, use <code>-D__NO_STRING_INLINES</code>.</p>
+
+<h2>C++ language issues</h2>
+
+<h3>Header dependency changes</h3>
+
+<p>
+Many of the standard C++ library include files have been edited to no
+longer include &lt;cstddef&gt; to get <code>namespace std</code>
+-scoped versions of <code>size_t</code> and <code>ptrdiff_t</code>. 
+</p>
+
+<p>
+As such, C++ programs that used the macros <code>NULL</code>
+or <code>offsetof</code> without including &lt;cstddef&gt; will no
+longer compile. The diagnostic produced is similar to:
+</p>
+
+<pre>
+error: 'ptrdiff_t' does not name a type
+</pre>
+
+<pre>
+error: 'size_t' has not been declared
+</pre>
+
+<pre>
+error: 'NULL' was not declared in this scope
+</pre>
+
+<pre>
+error: there are no arguments to 'offsetof' that depend on a template
+parameter, so a declaration of 'offsetof' must be available
+</pre>
+
+<p>
+Fixing this issue is easy: just include &lt;cstddef&gt;.
+</p>
+
+<!-- 
+<h3>Java issues</h3>
+-->
+
+<h3>Links</h3>
+
+<p>
+Jakub Jelinek,
+ <a href="http://lists.fedoraproject.org/pipermail/devel/2011-February/148523.html">GCC
+4.6 related common package rebuild failures (was Re: mass rebuild status)</a>
+</p>
+
+<p>
+Matthias Klose,
+<a href="http://lists.debian.org/debian-devel-announce/2011/02/msg00012.html">prepare
+to fix build failures with new GCC versions</a>
+</p>
+
+<p>
+Jim Meyering,
+ <a href="http://lists.fedoraproject.org/pipermail/devel/2011-March/149355.html">gcc-4.6.0-0.12.fc15.x86_64 breaks strcmp?</a>
+</p>
+
+</body>
+</html>
+  
+