diff mbox

[wwwdocs] Document null 'this' dereference issue in /gcc-6/porting_to.html

Message ID 20160209210636.GH8441@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Feb. 9, 2016, 9:06 p.m. UTC
This adds a note to the porting document about the (shockingly
widespread) problem of calling member functions through null pointers,
which GCC 6 no longer tolerates.

Following some comments about (bool)os I'm also tweaking another part
of the doc to use the plusplusgood static_cast form.

Committed to CVS.
diff mbox

Patch

Index: htdocs/gcc-6/porting_to.html
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-6/porting_to.html,v
retrieving revision 1.6
diff -u -r1.6 porting_to.html
--- htdocs/gcc-6/porting_to.html	4 Feb 2016 16:50:41 -0000	1.6
+++ htdocs/gcc-6/porting_to.html	9 Feb 2016 19:35:59 -0000
@@ -106,13 +106,11 @@ 
 
 <p>
 Such code must be changed to convert the iostream object to <code>bool</code>
-explicitly:
+explicitly, e.g. <code>return (bool)os;</code>
+or
+<code>return static_cast&lt;bool&gt;(os);</code>
 </p>
 
-<pre><code>
-  bool valid(std::ostream&amp; os) { return (bool)os; }
-</code></pre>
-
 <h4>Lvalue required as left operand of assignment with complex numbers</h4>
 
 <p>
@@ -222,6 +220,25 @@ 
 the C++ standard library.
 </p>
 
+<h3>Optimizations remove null pointer checks for <code>this</code></h3>
+
+<p>
+When optimizing, GCC now assumes the <code>this</code> pointer can never be
+null, which is guaranteed by the language rules. Invalid programs which 
+assume it is OK to invoke a member function through a null pointer (possibly
+relying on checks like <code>this != NULL</code>) may crash or otherwise fail
+at run-time if null pointer checks are optimized away.
+With the <code>-Wnull-dereference</code> option the compiler tries to warn
+when it detects such invalid code.
+</p>
+
+<p>
+If the program cannot be fixed to remove the undefined behaviour then the
+option <code>-fno-delete-null-pointer-checks</code> can be used to disable
+this optimization. That option also disables other optimizations involving
+pointers, not only those involving <code>this</code>.
+</p>
+
 <h2>-Wmisleading-indentation</h2>
 <p>
 A new warning <code>-Wmisleading-indentation</code> was added