aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-02-17 23:27:24 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-02-17 23:27:24 +0100
commit932c0da42d36625559d7997b392b0d08869dc649 (patch)
treeb906ddcc4aab6686c41e92f405908b6c5569564d
parent0f02dd56f5f50238244a729bde63387d42c36d63 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/init.c4
-rw-r--r--gcc/gimple-ssa-nonnull-compare.c3
-rw-r--r--gcc/gimplify.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-1.C9
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;