From: Paolo Carlini Date: Wed, 28 Sep 2011 22:04:48 +0000 (+0000) Subject: re PR c++/45278 (-Wextra doesn't warn about (pointer < 0 ).) X-Git-Tag: releases/gcc-4.7.0~3484 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6f94398e396918f4d244cc60991b1fc8f28941fc;p=thirdparty%2Fgcc.git re PR c++/45278 (-Wextra doesn't warn about (pointer < 0 ).) /cp 2011-09-28 Paolo Carlini PR c++/45278 * typeck.c (cp_build_binary_op): With -Wextra, warn for ordered comparison of pointer with zero. /testsuite 2011-09-28 Paolo Carlini PR c++/45278 * g++.dg/warn/Wextra-3.C: New. From-SVN: r179321 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 596d4a97f707..68e702fe8cf1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-09-28 Paolo Carlini + + PR c++/45278 + * typeck.c (cp_build_binary_op): With -Wextra, warn for ordered + comparison of pointer with zero. + 2011-09-27 Paolo Carlini PR c++/31489 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 10f17bf0494a..d416b42db3b0 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 d19933a87469..ea1cad512019 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-09-28 Paolo Carlini + + PR c++/45278 + * g++.dg/warn/Wextra-3.C: New. + 2011-09-28 Oleg Endo 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 000000000000..04fdbba9076f --- /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" }