OSDN Git Service

cp/:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Jun 2009 19:07:49 +0000 (19:07 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Jun 2009 19:07:49 +0000 (19:07 +0000)
* cvt.c (convert_to_void): Only warn about COND_EXPR if neither
the second nor third operand has side effects.
testsuite/:
* g++.dg/warn/Wunused-16.C: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148950 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/cvt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wunused-16.C [new file with mode: 0644]

index 4e1f610..e651c1d 100644 (file)
@@ -1,5 +1,10 @@
 2009-06-25  Ian Lance Taylor  <iant@google.com>
 
 2009-06-25  Ian Lance Taylor  <iant@google.com>
 
+       * cvt.c (convert_to_void): Only warn about COND_EXPR if neither
+       the second nor third operand has side effects.
+
+2009-06-25  Ian Lance Taylor  <iant@google.com>
+
        * parser.c (cp_parser_binary_expression): Increment
        c_inhibit_evaluation_warnings while parsing the right hand side of
        "true || x" or "false && x".
        * parser.c (cp_parser_binary_expression): Increment
        c_inhibit_evaluation_warnings while parsing the right hand side of
        "true || x" or "false && x".
index dfd0ea8..88ae05a 100644 (file)
@@ -828,11 +828,12 @@ convert_to_void (tree expr, const char *implicit, tsubst_flags_t complain)
        /* The two parts of a cond expr might be separate lvalues.  */
        tree op1 = TREE_OPERAND (expr,1);
        tree op2 = TREE_OPERAND (expr,2);
        /* The two parts of a cond expr might be separate lvalues.  */
        tree op1 = TREE_OPERAND (expr,1);
        tree op2 = TREE_OPERAND (expr,2);
+       bool side_effects = TREE_SIDE_EFFECTS (op1) || TREE_SIDE_EFFECTS (op2);
        tree new_op1 = convert_to_void
        tree new_op1 = convert_to_void
-         (op1, (implicit && !TREE_SIDE_EFFECTS (op2)
+         (op1, (implicit && !side_effects
                 ? "second operand of conditional" : NULL), complain);
        tree new_op2 = convert_to_void
                 ? "second operand of conditional" : NULL), complain);
        tree new_op2 = convert_to_void
-         (op2, (implicit && !TREE_SIDE_EFFECTS (op1)
+         (op2, (implicit && !side_effects
                 ? "third operand of conditional" : NULL), complain);
 
        expr = build3 (COND_EXPR, TREE_TYPE (new_op1),
                 ? "third operand of conditional" : NULL), complain);
 
        expr = build3 (COND_EXPR, TREE_TYPE (new_op1),
index cf0a4d9..bf0fd4a 100644 (file)
@@ -1,5 +1,9 @@
 2009-06-25  Ian Lance Taylor  <iant@google.com>
 
 2009-06-25  Ian Lance Taylor  <iant@google.com>
 
+       * g++.dg/warn/Wunused-16.C: New testcase.
+
+2009-06-25  Ian Lance Taylor  <iant@google.com>
+
        * g++.dg/warn/skip-2.C: New testcase.
 
 2009-06-25  Steve Ellcey  <sje@cup.hp.com>
        * g++.dg/warn/skip-2.C: New testcase.
 
 2009-06-25  Steve Ellcey  <sje@cup.hp.com>
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-16.C b/gcc/testsuite/g++.dg/warn/Wunused-16.C
new file mode 100644 (file)
index 0000000..c9e57f7
--- /dev/null
@@ -0,0 +1,9 @@
+// { dg-do compile }
+// { dg-options "-Wunused-value" }
+
+extern void f1();
+void
+f(bool b)
+{
+  b ? f1(), 0 : 0;     // { dg-bogus "has no effect" }
+}