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.
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<bool>(os);</code> </p> -<pre><code> - bool valid(std::ostream& 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