From c42a832a952a7634e777751eb88c5e9cd518f624 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 3 Apr 2013 16:20:51 +0000 Subject: [PATCH] re PR c++/56815 (void pointer arithmetic) /cp 2013-04-03 Paolo Carlini PR c++/56815 * typeck.c (cp_build_unary_op): Change -Wpointer-arith permerror to pedwarn. /testsuite 2013-04-03 Paolo Carlini PR c++/56815 * g++.dg/warn/Wpointer-arith-1.C: New. * g++.dg/gomp/for-19.C: Adjust. From-SVN: r197433 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/typeck.c | 13 +++++++------ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/gomp/for-19.C | 4 ++-- gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C | 13 +++++++++++++ 5 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 93a22730753..9020dad1d9b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-04-03 Paolo Carlini + + PR c++/56815 + * typeck.c (cp_build_unary_op): Change -Wpointer-arith permerror to + pedwarn. + 2013-04-03 Jakub Jelinek PR debug/56819 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 043d52ffaa7..4a577e2e198 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b5530fe75ad..2cc5fa8ed44 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2013-04-03 Paolo Carlini + + PR c++/56815 + * g++.dg/warn/Wpointer-arith-1.C: New. + * g++.dg/gomp/for-19.C: Adjust. + 2013-04-03 Marek Polacek PR sanitizer/55702 diff --git a/gcc/testsuite/g++.dg/gomp/for-19.C b/gcc/testsuite/g++.dg/gomp/for-19.C index 966ad96306d..7da74a780ac 100644 --- a/gcc/testsuite/g++.dg/gomp/for-19.C +++ b/gcc/testsuite/g++.dg/gomp/for-19.C @@ -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 index 00000000000..a4aa6960897 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C @@ -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" } +}