Re: [wwwdocs] Document C++ null pointer constant changes in gcc-7/porting_to.html

2017-04-10 Thread Jonathan Wakely

On 09/04/17 19:58 -0600, Sandra Loosemore wrote:

On 04/07/2017 03:25 AM, Jonathan Wakely wrote:

This issue caused a lot of build failures during the GCC mass rebuilds
for Fedora, but isn't in the porting to guide yet.

Is this accurate and clear enough for casual readers?


Index: htdocs/gcc-7/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/porting_to.html,v
retrieving revision 1.13
diff -u -r1.13 porting_to.html
--- htdocs/gcc-7/porting_to.html6 Apr 2017 17:12:16 -   1.13
+++ htdocs/gcc-7/porting_to.html7 Apr 2017 09:25:06 -
@@ -118,6 +118,39 @@
with GCC 7 and some are compiled with older releases.


+Null pointer constants
+
+
+When compiling as C++11 or later, GCC 7 follows the revised definition of a
+null pointer constant. This means conversions to pointers from other
+types of constant (such as character literals and boolean literals) will now
+be rejected.
+


Nit pick: s/will now be rejected/are now rejected/

since "now" means we are describing GCC's current behavior, not future 
behavior.  :-)


If you write such code (or try to compile existing code like that) it
will now be rejected - that's the first conditional isn't it?

"It's started raining and if you go outside again you will now get
wet."

Anyway, I've committed the attached patch with that change and a
similar one you noted previously for GCC 5.


? htdocs/gcc-7/porting_to.TODO
Index: htdocs/gcc-5/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-5/porting_to.html,v
retrieving revision 1.11
diff -u -r1.11 porting_to.html
--- htdocs/gcc-5/porting_to.html	21 Jan 2016 22:20:29 -	1.11
+++ htdocs/gcc-5/porting_to.html	10 Apr 2017 11:48:09 -
@@ -398,7 +398,7 @@
 
 GCC 5 implements
 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579;>DR 1579
-which means that in a function like:
+which means that when compiling a function like:
 
 
   X
@@ -409,17 +409,17 @@
   }
 
 
-GCC will first attempt to construct the return value as if y 
-were an rvalue, and if that fails then it will try again for an lvalue
+GCC first attempts to construct the return value as though y 
+were an rvalue, and if that fails then it tries again using an lvalue
 (all C++11 compilers already do this when returning a variable of the
-same type as the function returns, but now they are required to do it
+same type as the function returns, but now they are also required to do it
 when the types are not the same).
-This will change the constructor that gets called in some cases,
+This changes the constructor that gets called in some cases,
 for example it might now call X(Y) instead of
 X(const Y).
 
 
-In most cases the only observable difference will be code that runs faster
+In most cases the only observable difference is code that runs faster
 (by moving instead of copying) but if it causes a problem the new behavior
 can be prevented by ensuring the compiler treats y as an lvalue,
 using return X(y); or
Index: htdocs/gcc-7/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/porting_to.html,v
retrieving revision 1.13
diff -u -r1.13 porting_to.html
--- htdocs/gcc-7/porting_to.html	6 Apr 2017 17:12:16 -	1.13
+++ htdocs/gcc-7/porting_to.html	10 Apr 2017 11:48:09 -
@@ -118,6 +118,39 @@
 with GCC 7 and some are compiled with older releases.
 
 
+Null pointer constants
+
+
+When compiling as C++11 or later, GCC 7 follows the revised definition of a
+null pointer constant. This means conversions to pointers from other
+types of constant (such as character literals and boolean literals) are now
+rejected.
+
+
+void* f() {
+  char* p = '\0';
+  return false;
+}
+
+
+  
+error: invalid conversion from 'char' to 'char*' [-fpermissive]
+   char* p = '\0';
+ ^~~~
+error: cannot convert 'bool' to 'void*' in return
+   return false;
+  ^
+
+
+
+Such code should be fixed to use a valid null pointer constant such as
+0 or nullptr. Care should be taken when fixing
+invalid uses of '\0' as a pointer, as it may not be clear whether
+the intention was to create a null pointer (p = 0;), to create an
+empty string (p = "";), or to write a null terminator to the
+string (*p = '\0';).
+
+
 Header dependency changes
 
 


Re: [wwwdocs] Document C++ null pointer constant changes in gcc-7/porting_to.html

2017-04-09 Thread Sandra Loosemore

On 04/07/2017 03:25 AM, Jonathan Wakely wrote:

This issue caused a lot of build failures during the GCC mass rebuilds
for Fedora, but isn't in the porting to guide yet.

Is this accurate and clear enough for casual readers?


Index: htdocs/gcc-7/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/porting_to.html,v
retrieving revision 1.13
diff -u -r1.13 porting_to.html
--- htdocs/gcc-7/porting_to.html6 Apr 2017 17:12:16 -   1.13
+++ htdocs/gcc-7/porting_to.html7 Apr 2017 09:25:06 -
@@ -118,6 +118,39 @@
 with GCC 7 and some are compiled with older releases.
 

+Null pointer constants
+
+
+When compiling as C++11 or later, GCC 7 follows the revised definition of a
+null pointer constant. This means conversions to pointers from other
+types of constant (such as character literals and boolean literals) will now
+be rejected.
+


Nit pick: s/will now be rejected/are now rejected/

since "now" means we are describing GCC's current behavior, not future 
behavior.  :-)


-Sandra



Re: [wwwdocs] Document C++ null pointer constant changes in gcc-7/porting_to.html

2017-04-07 Thread Marek Polacek
On Fri, Apr 07, 2017 at 10:25:21AM +0100, Jonathan Wakely wrote:
> This issue caused a lot of build failures during the GCC mass rebuilds
> for Fedora, but isn't in the porting to guide yet.
> 
> Is this accurate and clear enough for casual readers?

Looks fine to me.

> Index: htdocs/gcc-7/porting_to.html
> ===
> RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/porting_to.html,v
> retrieving revision 1.13
> diff -u -r1.13 porting_to.html
> --- htdocs/gcc-7/porting_to.html  6 Apr 2017 17:12:16 -   1.13
> +++ htdocs/gcc-7/porting_to.html  7 Apr 2017 09:25:06 -
> @@ -118,6 +118,39 @@
>  with GCC 7 and some are compiled with older releases.
>  
>  
> +Null pointer constants
> +
> +
> +When compiling as C++11 or later, GCC 7 follows the revised definition of a
> +null pointer constant. This means conversions to pointers from other
> +types of constant (such as character literals and boolean literals) will now
> +be rejected.
> +
> +
> +void* f() {
> +  char* p = '\0';
> +  return false;
> +}
> +
> +
> +  
> +error: invalid conversion from 'char' to 
> 'char*' [-fpermissive]
> +   char* p = '\0';
> + ^~~~
> +error: cannot convert 'bool' to 
> 'void*' in return
> +   return false;
> +  ^
> +
> +
> +
> +Such code should be fixed to use a valid null pointer constant such as
> +0 or nullptr. Care should be taken when fixing
> +invalid uses of '\0' as a pointer, as it may not be clear 
> whether
> +the intention was to create a null pointer (p = 0;), to create 
> an
> +empty string (p = "";), or to write a null terminator to the
> +string (*p = '\0';).
> +
> +
>  Header dependency changes
>  
>  


Marek


[wwwdocs] Document C++ null pointer constant changes in gcc-7/porting_to.html

2017-04-07 Thread Jonathan Wakely

This issue caused a lot of build failures during the GCC mass rebuilds
for Fedora, but isn't in the porting to guide yet.

Is this accurate and clear enough for casual readers?


Index: htdocs/gcc-7/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/porting_to.html,v
retrieving revision 1.13
diff -u -r1.13 porting_to.html
--- htdocs/gcc-7/porting_to.html	6 Apr 2017 17:12:16 -	1.13
+++ htdocs/gcc-7/porting_to.html	7 Apr 2017 09:25:06 -
@@ -118,6 +118,39 @@
 with GCC 7 and some are compiled with older releases.
 
 
+Null pointer constants
+
+
+When compiling as C++11 or later, GCC 7 follows the revised definition of a
+null pointer constant. This means conversions to pointers from other
+types of constant (such as character literals and boolean literals) will now
+be rejected.
+
+
+void* f() {
+  char* p = '\0';
+  return false;
+}
+
+
+  
+error: invalid conversion from 'char' to 'char*' [-fpermissive]
+   char* p = '\0';
+ ^~~~
+error: cannot convert 'bool' to 'void*' in return
+   return false;
+  ^
+
+
+
+Such code should be fixed to use a valid null pointer constant such as
+0 or nullptr. Care should be taken when fixing
+invalid uses of '\0' as a pointer, as it may not be clear whether
+the intention was to create a null pointer (p = 0;), to create an
+empty string (p = "";), or to write a null terminator to the
+string (*p = '\0';).
+
+
 Header dependency changes