diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-02-17 23:27:24 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-02-17 23:27:24 +0100 |
commit | 932c0da42d36625559d7997b392b0d08869dc649 (patch) | |
tree | b906ddcc4aab6686c41e92f405908b6c5569564d | |
parent | 0f02dd56f5f50238244a729bde63387d42c36d63 (diff) | |
download | gcc-932c0da42d36625559d7997b392b0d08869dc649.zip gcc-932c0da42d36625559d7997b392b0d08869dc649.tar.gz gcc-932c0da42d36625559d7997b392b0d08869dc649.tar.bz2 |
re PR c++/69850 (unnecessary -Wnonnull-compare warning)
PR c++/69850
* gimplify.c (gimplify_cond_expr): Call gimple_set_no_warning
on the cond_stmt from TREE_NO_WARNING on COND_EXPR_COND.
* gimple-ssa-nonnull-compare.c (do_warn_nonnull_compare): Don't
warn on gimple_no_warning_p statements.
* init.c (build_delete): Set TREE_NO_WARNING on ifexp.
* g++.dg/warn/Wnonnull-compare-1.C: New test.
From-SVN: r233508
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/init.c | 4 | ||||
-rw-r--r-- | gcc/gimple-ssa-nonnull-compare.c | 3 | ||||
-rw-r--r-- | gcc/gimplify.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wnonnull-compare-1.C | 9 |
7 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e690691..6ca3c04 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-02-17 Jakub Jelinek <jakub@redhat.com> + + PR c++/69850 + * gimplify.c (gimplify_cond_expr): Call gimple_set_no_warning + on the cond_stmt from TREE_NO_WARNING on COND_EXPR_COND. + * gimple-ssa-nonnull-compare.c (do_warn_nonnull_compare): Don't + warn on gimple_no_warning_p statements. + 2016-02-17 Jonathan Wakely <jwakely@redhat.com> * doc/extend.texi (C++ Attributes): Correct description of diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c02ffac..ca5d838 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2016-02-17 Jakub Jelinek <jakub@redhat.com> + + PR c++/69850 + * init.c (build_delete): Set TREE_NO_WARNING on ifexp. + 2016-02-17 Jason Merrill <jason@redhat.com> PR c++/69842 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 9f9c729..68cc1a7 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -4525,6 +4525,10 @@ build_delete (tree otype, tree addr, special_function_kind auto_delete, complain)); if (ifexp == error_mark_node) return error_mark_node; + /* This is a compiler generated comparison, don't emit + e.g. -Wnonnull-compare warning for it. */ + else if (TREE_CODE (ifexp) == NE_EXPR) + TREE_NO_WARNING (ifexp) = 1; } if (ifexp != integer_one_node) diff --git a/gcc/gimple-ssa-nonnull-compare.c b/gcc/gimple-ssa-nonnull-compare.c index 910188b..8c55467 100644 --- a/gcc/gimple-ssa-nonnull-compare.c +++ b/gcc/gimple-ssa-nonnull-compare.c @@ -96,7 +96,8 @@ do_warn_nonnull_compare (function *fun, tree arg) } if (op && (POINTER_TYPE_P (TREE_TYPE (arg)) - ? integer_zerop (op) : integer_minus_onep (op))) + ? integer_zerop (op) : integer_minus_onep (op)) + && !gimple_no_warning_p (stmt)) warning_at (loc, OPT_Wnonnull_compare, "nonnull argument %qD compared to NULL", arg); } diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 6aa9db2..7be6bd7 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3219,6 +3219,7 @@ gimplify_cond_expr (tree *expr_p, gimple_seq *pre_p, fallback_t fallback) &arm2); cond_stmt = gimple_build_cond (pred_code, arm1, arm2, label_true, label_false); + gimple_set_no_warning (cond_stmt, TREE_NO_WARNING (COND_EXPR_COND (expr))); gimplify_seq_add_stmt (&seq, cond_stmt); gimple_stmt_iterator gsi = gsi_last (seq); maybe_fold_stmt (&gsi); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce80cf7..13e3388 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-02-17 Jakub Jelinek <jakub@redhat.com> + + PR c++/69850 + * g++.dg/warn/Wnonnull-compare-1.C: New test. + 2012-02-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com> * gcc.target/powerpc/vec-cg.c: New test. diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-1.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-1.C new file mode 100644 index 0000000..24a33fc --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-1.C @@ -0,0 +1,9 @@ +// PR c++/69850 +// { dg-do compile } +// { dg-options "-Wall" } + +struct C +{ + ~C () { delete this; } // { dg-bogus "nonnull argument" } +}; +C c; |