re PR c++/56815 (void pointer arithmetic)
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 3 Apr 2013 16:20:51 +0000 (16:20 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 3 Apr 2013 16:20:51 +0000 (16:20 +0000)
/cp
2013-04-03  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/56815
* typeck.c (cp_build_unary_op): Change -Wpointer-arith permerror to
pedwarn.

/testsuite
2013-04-03  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/56815
* g++.dg/warn/Wpointer-arith-1.C: New.
* g++.dg/gomp/for-19.C: Adjust.

From-SVN: r197433

gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/for-19.C
gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C [new file with mode: 0644]

index 93a227307533bc406130dee9ff3aa98bf2b84441..9020dad1d9b15f8aed475ffd017f019331a99250 100644 (file)
@@ -1,3 +1,9 @@
+2013-04-03  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/56815
+       * typeck.c (cp_build_unary_op): Change -Wpointer-arith permerror to
+       pedwarn.
+
 2013-04-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/56819
index 043d52ffaa713491957cecd7d3d61c2fd3304bb3..4a577e2e19888d367f65791277406fe2fd4a4e9b 100644 (file)
@@ -5574,15 +5574,16 @@ cp_build_unary_op (enum tree_code code, tree xarg, int noconvert,
                 else
                   return error_mark_node;
               }
-           else if ((pedantic || warn_pointer_arith)
-                    && !TYPE_PTROB_P (argtype)) 
+           else if (!TYPE_PTROB_P (argtype)) 
               {
                 if (complain & tf_error)
-                  permerror (input_location, (code == PREINCREMENT_EXPR
+                  pedwarn (input_location,
+                          pedantic ? OPT_Wpedantic : OPT_Wpointer_arith,
+                          (code == PREINCREMENT_EXPR
                               || code == POSTINCREMENT_EXPR)
-                             ? G_("ISO C++ forbids incrementing a pointer of type %qT")
-                             : G_("ISO C++ forbids decrementing a pointer of type %qT"),
-                             argtype);
+                          ? G_("ISO C++ forbids incrementing a pointer of type %qT")
+                          : G_("ISO C++ forbids decrementing a pointer of type %qT"),
+                          argtype);
                 else
                   return error_mark_node;
               }
index b5530fe75ad1625b05c9b6a127db15a10a661fab..2cc5fa8ed448e0734518595e6b563e5e42d2d706 100644 (file)
@@ -1,3 +1,9 @@
+2013-04-03  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/56815
+       * g++.dg/warn/Wpointer-arith-1.C: New.
+       * g++.dg/gomp/for-19.C: Adjust.
+
 2013-04-03  Marek Polacek  <polacek@redhat.com>
 
        PR sanitizer/55702
index 966ad96306def3126cace6ed292c6b60ca00791a..7da74a780ac26b45e5f792b6a1fa04bed282dc61 100644 (file)
@@ -9,7 +9,7 @@ void
 f1 (void)
 {
 #pragma omp for
-  for (void *q = (void *)p; q < (void *) (p + 4); q++) // { dg-error "forbids incrementing a pointer of type" }
+  for (void *q = (void *)p; q < (void *) (p + 4); q++) // { dg-warning "forbids incrementing a pointer of type" }
     ;
 }
 
@@ -27,7 +27,7 @@ void
 f3 (void)
 {
 #pragma omp for
-  for (T q = T (p); q < T (p + 4); q++)        // { dg-error "forbids incrementing a pointer of type" }
+  for (T q = T (p); q < T (p + 4); q++)        // { dg-warning "forbids incrementing a pointer of type" }
     ;
 }
 
diff --git a/gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C b/gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C
new file mode 100644 (file)
index 0000000..a4aa696
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/56815
+// { dg-options "-Wpointer-arith" }
+
+int main()
+{
+  void *pv = 0;
+  pv++;    // { dg-warning "forbids incrementing a pointer" }
+
+  typedef void (*pft) ();
+
+  pft pf = 0;
+  pf++;    // { dg-warning "forbids incrementing a pointer" }
+}