aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimplify.c4
-rw-r--r--gcc/testsuite/g++.dg/init/empty2.C12
3 files changed, 19 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 405bc38..df50f59 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-03-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/86485 - -Wmaybe-unused with empty class ?:
+ * gimplify.c (gimplify_cond_expr): Use INIT_EXPR.
+
2019-03-05 Jakub Jelinek <jakub@redhat.com>
PR target/89587
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 983635b..fa85b1c 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -4024,11 +4024,11 @@ gimplify_cond_expr (tree *expr_p, gimple_seq *pre_p, fallback_t fallback)
/* Build the new then clause, `tmp = then_;'. But don't build the
assignment if the value is void; in C++ it can be if it's a throw. */
if (!VOID_TYPE_P (TREE_TYPE (then_)))
- TREE_OPERAND (expr, 1) = build2 (MODIFY_EXPR, type, tmp, then_);
+ TREE_OPERAND (expr, 1) = build2 (INIT_EXPR, type, tmp, then_);
/* Similarly, build the new else clause, `tmp = else_;'. */
if (!VOID_TYPE_P (TREE_TYPE (else_)))
- TREE_OPERAND (expr, 2) = build2 (MODIFY_EXPR, type, tmp, else_);
+ TREE_OPERAND (expr, 2) = build2 (INIT_EXPR, type, tmp, else_);
TREE_TYPE (expr) = void_type_node;
recalculate_side_effects (expr);
diff --git a/gcc/testsuite/g++.dg/init/empty2.C b/gcc/testsuite/g++.dg/init/empty2.C
new file mode 100644
index 0000000..f0d8e3f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/empty2.C
@@ -0,0 +1,12 @@
+// PR c++/86485
+// { dg-additional-options -Wmaybe-uninitialized }
+
+struct E {};
+struct S { S () {} E e; };
+void foo (S);
+
+void
+bar (bool b)
+{
+ foo (b ? S () : S ());
+}