OSDN Git Service

cp:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Aug 2003 18:00:09 +0000 (18:00 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Aug 2003 18:00:09 +0000 (18:00 +0000)
PR c++/11945
* pt.c (build_non_dependent_expr): Look inside COND_EXPR and
COMPOUND_EXPR.
* semantics.c (finish_expr_stmt): Always convert to void.
* typeck.c (build_x_compound_exp): Always convert to void.
testsuite:
PR c++/11945
* g++.dg/warn/noeffect2.C: New test.

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

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/noeffect2.C [new file with mode: 0644]

index 5a7bd68..7dcf9c2 100644 (file)
@@ -1,3 +1,11 @@
+2003-08-20  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/11945
+       * pt.c (build_non_dependent_expr): Look inside COND_EXPR and
+       COMPOUND_EXPR.
+       * semantics.c (finish_expr_stmt): Always convert to void.
+       * typeck.c (build_x_compound_exp): Always convert to void.
+
 2003-08-19  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/11684
index 863ab86..20642c3 100644 (file)
@@ -11797,6 +11797,19 @@ build_non_dependent_expr (tree expr)
      types.  */
   if (TREE_CODE (expr) == OVERLOAD)
     return expr;
+
+  if (TREE_CODE (expr) == COND_EXPR)
+    return build (COND_EXPR,
+                 TREE_TYPE (expr),
+                 TREE_OPERAND (expr, 0),
+                 build_non_dependent_expr (TREE_OPERAND (expr, 1)),
+                 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
+  if (TREE_CODE (expr) == COMPOUND_EXPR)
+    return build (COMPOUND_EXPR,
+                 TREE_TYPE (expr),
+                 TREE_OPERAND (expr, 0),
+                 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
+      
   /* Otherwise, build a NON_DEPENDENT_EXPR.  
 
      REFERENCE_TYPEs are not stripped for expressions in templates
index 2997237..78a7f06 100644 (file)
@@ -421,6 +421,8 @@ finish_expr_stmt (tree expr)
     {
       if (!processing_template_decl)
        expr = convert_to_void (expr, "statement");
+      else if (!type_dependent_expression_p (expr))
+       convert_to_void (build_non_dependent_expr (expr), "statement");
       
       r = add_stmt (build_stmt (EXPR_STMT, expr));
     }
index 21186eb..ed9b6b9 100644 (file)
@@ -4309,11 +4309,8 @@ build_x_compound_expr (tree op1, tree op2)
 tree
 build_compound_expr (tree lhs, tree rhs)
 {
-  if (!processing_template_decl)
-    {
-      lhs = decl_constant_value (lhs);
-      lhs = convert_to_void (lhs, "left-hand operand of comma");
-    }
+  lhs = decl_constant_value (lhs);
+  lhs = convert_to_void (lhs, "left-hand operand of comma");
   
   if (lhs == error_mark_node || rhs == error_mark_node)
     return error_mark_node;
index 1020020..bbbf552 100644 (file)
@@ -1,3 +1,8 @@
+2003-08-20  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/11945
+       * g++.dg/warn/noeffect2.C: New test.
+
 2003-08-19  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/10926
@@ -54,6 +59,9 @@
 
 2003-08-18  Nathan Sidwell  <nathan@codesourcery.com>
 
+       PR c++/11957
+       * g++.dg/warn/noeffect1.C: New test.
+
        * g++.dg/template/scope2.C: New test.
        * g++.dg/template/error2.C: Correct dg-error
 
diff --git a/gcc/testsuite/g++.dg/warn/noeffect2.C b/gcc/testsuite/g++.dg/warn/noeffect2.C
new file mode 100644 (file)
index 0000000..7bd2925
--- /dev/null
@@ -0,0 +1,18 @@
+// { dg-do compile }
+// { dg-options "-Wall" }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 18 Aug 2003 <nathan@codesourcery.com>
+// Origin PR 11945 gerald@pfeifer.com
+
+// PR 11945 inconsistent warnings
+
+extern "C" void FormatDisk();
+  template <class T>
+  struct C {
+    C(){ FormatDisk(), 0; }  // { dg-warning "right-hand operand of comma" "" }
+  };
+  template <class T>
+  void f() { FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" }
+void g() { FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" }
+