aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/cp/ChangeLog8
-rw-r--r--gcc/cp/cp-gimplify.c2
-rw-r--r--gcc/cp/init.c16
-rw-r--r--gcc/gimple.c1
-rw-r--r--gcc/gimplify.c1
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/warn/pr31246-2.C9
-rw-r--r--gcc/testsuite/g++.dg/warn/pr31246.C9
-rw-r--r--gcc/tree-cfg.c2
10 files changed, 60 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8140cc3..60d0e7e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2009-07-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR c++/31246
+ * gimplify.c (gimplify_expr): Propagate no_warning flag when
+ gimplifying.
+ * gimple (gimple_build_call_from_tree): Likewise.
+ * tree-cfg.c (remove_useless_stmts_warn_notreached): Check
+ no_warning flag before warning.
+
2009-07-07 Manuel López-Ibáñez <manu@gcc.gnu.org>
* tree.c (set_expr_locus): Remove.
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 051faf6..3919397 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,11 @@
+2009-07-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR c++/31246
+ * init.c (build_new_1): Set TREE_NO_WARNING for compiler-generated
+ code.
+ * cp-gimplify.c (genericize_eh_spec_block): Likewise.
+
+
2009-07-07 Jason Merrill <jason@redhat.com>
PR c++/35828
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index 29f4f38..fc30c06 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -153,6 +153,8 @@ genericize_eh_spec_block (tree *stmt_p)
tree failure = build_call_n (call_unexpected_node, 1, build_exc_ptr ());
*stmt_p = build_gimple_eh_filter_tree (body, allowed, failure);
+ TREE_NO_WARNING (*stmt_p) = true;
+ TREE_NO_WARNING (TREE_OPERAND (*stmt_p, 1)) = true;
}
/* Genericize an IF_STMT by turning it into a COND_EXPR. */
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 96dd6c1..68ffe3a 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -2185,8 +2185,14 @@ build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
else if (stable)
/* This is much simpler if we were able to preevaluate all of
the arguments to the constructor call. */
- init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
- init_expr, cleanup);
+ {
+ /* CLEANUP is compiler-generated, so no diagnostics. */
+ TREE_NO_WARNING (cleanup) = true;
+ init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
+ init_expr, cleanup);
+ /* Likewise, this try-catch is compiler-generated. */
+ TREE_NO_WARNING (init_expr) = true;
+ }
else
/* Ack! First we allocate the memory. Then we set our sentry
variable to true, and expand a cleanup that deletes the
@@ -2206,6 +2212,9 @@ build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
sentry = TARGET_EXPR_SLOT (begin);
+ /* CLEANUP is compiler-generated, so no diagnostics. */
+ TREE_NO_WARNING (cleanup) = true;
+
TARGET_EXPR_CLEANUP (begin)
= build3 (COND_EXPR, void_type_node, sentry,
cleanup, void_zero_node);
@@ -2217,8 +2226,9 @@ build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
= build2 (COMPOUND_EXPR, void_type_node, begin,
build2 (COMPOUND_EXPR, void_type_node, init_expr,
end));
+ /* Likewise, this is compiler-generated. */
+ TREE_NO_WARNING (init_expr) = true;
}
-
}
}
else
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 4f18b78..5610831 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -357,6 +357,7 @@ gimple_build_call_from_tree (tree t)
gimple_call_set_return_slot_opt (call, CALL_EXPR_RETURN_SLOT_OPT (t));
gimple_call_set_from_thunk (call, CALL_FROM_THUNK_P (t));
gimple_call_set_va_arg_pack (call, CALL_EXPR_VA_ARG_PACK (t));
+ gimple_set_no_warning (call, TREE_NO_WARNING (t));
return call;
}
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 032228d..b20c8ac 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -6787,6 +6787,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
gimplify_and_add (EH_FILTER_FAILURE (*expr_p), &failure);
ehf = gimple_build_eh_filter (EH_FILTER_TYPES (*expr_p), failure);
+ gimple_set_no_warning (ehf, TREE_NO_WARNING (*expr_p));
gimple_eh_filter_set_must_not_throw
(ehf, EH_FILTER_MUST_NOT_THROW (*expr_p));
gimplify_seq_add_stmt (pre_p, ehf);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3f35f44..d063cbb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR c++/31246
+ * g++.dg/warn/pr31246.C: New.
+ * g++.dg/warn/pr31246-2.C: New.
+
2009-07-07 Jason Merrill <jason@redhat.com>
PR c++/35828
diff --git a/gcc/testsuite/g++.dg/warn/pr31246-2.C b/gcc/testsuite/g++.dg/warn/pr31246-2.C
new file mode 100644
index 0000000..c9a4cae
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/pr31246-2.C
@@ -0,0 +1,9 @@
+// PR 31246
+// { dg-do compile }
+// { dg-options "-Wunreachable-code" }
+#include <new>
+
+int* get_ptr(void* ptr)
+{
+ return new(ptr) int();
+}
diff --git a/gcc/testsuite/g++.dg/warn/pr31246.C b/gcc/testsuite/g++.dg/warn/pr31246.C
new file mode 100644
index 0000000..f3603af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/pr31246.C
@@ -0,0 +1,9 @@
+// PR 31246
+// { dg-do compile }
+// { dg-options "-Wunreachable-code -D_GLIBCXX_DEBUG" }
+#include <vector>
+
+int main()
+{
+ std::vector<int>::iterator a;
+}
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index f18bb97..dd38134 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -1638,6 +1638,8 @@ remove_useless_stmts_warn_notreached (gimple_seq stmts)
{
gimple stmt = gsi_stmt (gsi);
+ if (gimple_no_warning_p (stmt)) return false;
+
if (gimple_has_location (stmt))
{
location_t loc = gimple_location (stmt);