diff options
author | Ville Voutilainen <ville.voutilainen@gmail.com> | 2018-05-30 22:33:38 +0300 |
---|---|---|
committer | Ville Voutilainen <ville@gcc.gnu.org> | 2018-05-30 22:33:38 +0300 |
commit | 752e7593b0f19af233a0b7e72daab8413662b605 (patch) | |
tree | 345bd42020e2f7a5f8d90544d04251d807f7db9c /gcc | |
parent | 298434c916c14e8adca2cab8a746aee29038c5b3 (diff) | |
download | gcc-752e7593b0f19af233a0b7e72daab8413662b605.zip gcc-752e7593b0f19af233a0b7e72daab8413662b605.tar.gz gcc-752e7593b0f19af233a0b7e72daab8413662b605.tar.bz2 |
Do not warn about zero-as-null when NULL is used.
gcc/cp/
Do not warn about zero-as-null when NULL is used.
* call.c (conversion_null_warnings): Check for pointer
types converted from zero constants.
(convert_like_real): Add a warning sentinel at the end.
* tree.c (maybe_warn_zero_as_null_pointer_constant): Also
check null_node_p.
testsuite/
Do not warn about zero-as-null when NULL is used.
* g++.dg/warn/Wzero-as-null-pointer-constant-7.C: New.
From-SVN: r260973
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/call.c | 11 | ||||
-rw-r--r-- | gcc/cp/tree.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-7.C | 13 |
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ec5ee7e..70554be 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2018-05-30 Ville Voutilainen <ville.voutilainen@gmail.com> + + Do not warn about zero-as-null when NULL is used. + * call.c (conversion_null_warnings): Check for pointer + types converted from zero constants. + (convert_like_real): Add a warning sentinel at the end. + * tree.c (maybe_warn_zero_as_null_pointer_constant): Also + check null_node_p. + 2018-05-24 Jason Merrill <jason@redhat.com> PR c++/85807 - ICE with call in template NSDMI. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 67e404d..98319f9 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6517,6 +6517,7 @@ build_temp (tree expr, tree type, int flags, } /* Perform warnings about peculiar, but valid, conversions from/to NULL. + Also handle a subset of zero as null warnings. EXPR is implicitly converted to type TOTYPE. FN and ARGNUM are used for diagnostics. */ @@ -6551,6 +6552,15 @@ conversion_null_warnings (tree totype, tree expr, tree fn, int argnum) warning_at (input_location, OPT_Wconversion_null, "converting %<false%> to pointer type %qT", totype); } + /* Handle zero as null pointer warnings for cases other + than EQ_EXPR and NE_EXPR */ + else if (null_ptr_cst_p (expr) && + (TYPE_PTR_OR_PTRMEM_P (totype) || NULLPTR_TYPE_P (totype))) + { + source_location loc = + expansion_point_location_if_in_system_header (input_location); + maybe_warn_zero_as_null_pointer_constant (expr, loc); + } } /* We gave a diagnostic during a conversion. If this was in the second @@ -7101,6 +7111,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, && !check_narrowing (totype, expr, complain)) return error_mark_node; + warning_sentinel w (warn_zero_as_null_pointer_constant); if (issue_conversion_warnings) expr = cp_convert_and_check (totype, expr, complain); else diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 4bb2879..c5b6e96 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -5432,7 +5432,7 @@ bool maybe_warn_zero_as_null_pointer_constant (tree expr, location_t loc) { if (c_inhibit_evaluation_warnings == 0 - && !NULLPTR_TYPE_P (TREE_TYPE (expr))) + && !null_node_p (expr) && !NULLPTR_TYPE_P (TREE_TYPE (expr))) { warning_at (loc, OPT_Wzero_as_null_pointer_constant, "zero as null pointer constant"); diff --git a/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-7.C b/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-7.C new file mode 100644 index 0000000..0d06dbf --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-7.C @@ -0,0 +1,13 @@ +// { dg-options "-Wzero-as-null-pointer-constant" } +// { dg-do compile { target c++11 } } + +#include <cstddef> + +void test01() +{ + char* x(NULL); + char* x2{NULL}; + char* x3 = NULL; + char* x4(0); // { dg-warning "zero as null pointer" } + char* x5 = 0; // { dg-warning "zero as null pointer" } +} |