diff options
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wextra-3.C | 9 |
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 596d4a9..68e702f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-09-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/45278 + * typeck.c (cp_build_binary_op): With -Wextra, warn for ordered + comparison of pointer with zero. + 2011-09-27 Paolo Carlini <paolo.carlini@oracle.com> PR c++/31489 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 10f17bf..d416b42 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4189,9 +4189,19 @@ cp_build_binary_op (location_t location, result_type = composite_pointer_type (type0, type1, op0, op1, CPO_COMPARISON, complain); else if (code0 == POINTER_TYPE && null_ptr_cst_p (op1)) - result_type = type0; + { + result_type = type0; + if (extra_warnings && (complain & tf_warning)) + warning (OPT_Wextra, + "ordered comparison of pointer with integer zero"); + } else if (code1 == POINTER_TYPE && null_ptr_cst_p (op0)) - result_type = type1; + { + result_type = type1; + if (extra_warnings && (complain & tf_warning)) + warning (OPT_Wextra, + "ordered comparison of pointer with integer zero"); + } else if (null_ptr_cst_p (op0) && null_ptr_cst_p (op1)) /* One of the operands must be of nullptr_t type. */ result_type = TREE_TYPE (nullptr_node); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d19933a..ea1cad5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-09-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/45278 + * g++.dg/warn/Wextra-3.C: New. + 2011-09-28 Oleg Endo <oleg.endo@t-online.de> PR target/49486 diff --git a/gcc/testsuite/g++.dg/warn/Wextra-3.C b/gcc/testsuite/g++.dg/warn/Wextra-3.C new file mode 100644 index 0000000..04fdbba --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wextra-3.C @@ -0,0 +1,9 @@ +// PR c++/45278 +// { dg-options "-Wextra" } + +extern void* p; + +int f1() { return ( p < 0 ? 1 : 0 ); } // { dg-warning "ordered comparison" } +int f2() { return ( p <= 0 ? 1 : 0 ); } // { dg-warning "ordered comparison" } +int f3() { return ( p > 0 ? 1 : 0 ); } // { dg-warning "ordered comparison" } +int f4() { return ( p >= 0 ? 1 : 0 ); } // { dg-warning "ordered comparison" } |