OSDN Git Service

PR c++/34965
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 26 Jan 2008 17:04:54 +0000 (17:04 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 26 Jan 2008 17:04:54 +0000 (17:04 +0000)
* c-pretty-print.c (pp_c_exclusive_or_expression): Handle
TRUTH_XOR_EXPR.
(pp_c_logical_and_expression): Handle TRUTH_AND_EXPR.
(pp_c_logical_or_expression): Handle TRUTH_OR_EXPR.
(pp_c_expression): Handle TRUTH_AND_EXPR, TRUTH_OR_EXPR
and TRUTH_XOR_EXPR.

* error.c (dump_expr): Handle TRUTH_AND_EXPR, TRUTH_OR_EXPR
and TRUTH_XOR_EXPR.

* gcc.dg/pr34965.c: New test.
* g++.dg/other/error24.C: New test.

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

gcc/ChangeLog
gcc/c-pretty-print.c
gcc/cp/ChangeLog
gcc/cp/error.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/error24.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr34965.c [new file with mode: 0644]

index ceae4b6..13135a9 100644 (file)
@@ -1,3 +1,13 @@
+2008-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/34965
+       * c-pretty-print.c (pp_c_exclusive_or_expression): Handle
+       TRUTH_XOR_EXPR.
+       (pp_c_logical_and_expression): Handle TRUTH_AND_EXPR.
+       (pp_c_logical_or_expression): Handle TRUTH_OR_EXPR.
+       (pp_c_expression): Handle TRUTH_AND_EXPR, TRUTH_OR_EXPR
+       and TRUTH_XOR_EXPR.
+
 2008-01-26  David Edelsohn  <edelsohn@gnu.org>
 
        PR target/34794
index 5fdaf2f..e9a6bbb 100644 (file)
@@ -1,5 +1,6 @@
 /* Subroutines common to both C and C++ pretty-printers.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
+   Free Software Foundation, Inc.
    Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
 
 This file is part of GCC.
@@ -1737,10 +1738,14 @@ pp_c_and_expression (c_pretty_printer *pp, tree e)
 static void
 pp_c_exclusive_or_expression (c_pretty_printer *pp, tree e)
 {
-  if (TREE_CODE (e) == BIT_XOR_EXPR)
+  if (TREE_CODE (e) == BIT_XOR_EXPR
+      || TREE_CODE (e) == TRUTH_XOR_EXPR)
     {
       pp_c_exclusive_or_expression (pp, TREE_OPERAND (e, 0));
-      pp_c_maybe_whitespace (pp);
+      if (TREE_CODE (e) == BIT_XOR_EXPR)
+       pp_c_maybe_whitespace (pp);
+      else
+       pp_c_whitespace (pp);
       pp_carret (pp);
       pp_c_whitespace (pp);
       pp_c_and_expression (pp, TREE_OPERAND (e, 1));
@@ -1775,7 +1780,8 @@ pp_c_inclusive_or_expression (c_pretty_printer *pp, tree e)
 static void
 pp_c_logical_and_expression (c_pretty_printer *pp, tree e)
 {
-  if (TREE_CODE (e) == TRUTH_ANDIF_EXPR)
+  if (TREE_CODE (e) == TRUTH_ANDIF_EXPR
+      || TREE_CODE (e) == TRUTH_AND_EXPR)
     {
       pp_c_logical_and_expression (pp, TREE_OPERAND (e, 0));
       pp_c_whitespace (pp);
@@ -1794,7 +1800,8 @@ pp_c_logical_and_expression (c_pretty_printer *pp, tree e)
 void
 pp_c_logical_or_expression (c_pretty_printer *pp, tree e)
 {
-  if (TREE_CODE (e) == TRUTH_ORIF_EXPR)
+  if (TREE_CODE (e) == TRUTH_ORIF_EXPR
+      || TREE_CODE (e) == TRUTH_OR_EXPR)
     {
       pp_c_logical_or_expression (pp, TREE_OPERAND (e, 0));
       pp_c_whitespace (pp);
@@ -1963,6 +1970,7 @@ pp_c_expression (c_pretty_printer *pp, tree e)
       break;
 
     case BIT_XOR_EXPR:
+    case TRUTH_XOR_EXPR:
       pp_c_exclusive_or_expression (pp, e);
       break;
 
@@ -1971,10 +1979,12 @@ pp_c_expression (c_pretty_printer *pp, tree e)
       break;
 
     case TRUTH_ANDIF_EXPR:
+    case TRUTH_AND_EXPR:
       pp_c_logical_and_expression (pp, e);
       break;
 
     case TRUTH_ORIF_EXPR:
+    case TRUTH_OR_EXPR:
       pp_c_logical_or_expression (pp, e);
       break;
 
index 1e3f462..714f65b 100644 (file)
@@ -1,3 +1,9 @@
+2008-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/34965
+       * error.c (dump_expr): Handle TRUTH_AND_EXPR, TRUTH_OR_EXPR
+       and TRUTH_XOR_EXPR.
+
 2008-01-26  Richard Guenther  <rguenther@suse.de>
 
        PR c++/34235
index af86cf5..b81120a 100644 (file)
@@ -2083,6 +2083,16 @@ dump_expr (tree t, int flags)
       pp_expression (cxx_pp, t);
       break;
 
+    case TRUTH_AND_EXPR:
+    case TRUTH_OR_EXPR:
+    case TRUTH_XOR_EXPR:
+      if (flags & TFF_EXPR_IN_PARENS)
+       pp_cxx_left_paren (cxx_pp);
+      pp_expression (cxx_pp, t);
+      if (flags & TFF_EXPR_IN_PARENS)
+       pp_cxx_right_paren (cxx_pp);
+      break;
+
     case OBJ_TYPE_REF:
       dump_expr (resolve_virtual_fun_from_obj_type_ref (t), flags);
       break;
index 6ce05a7..1b8e2ba 100644 (file)
@@ -3,6 +3,10 @@
        * gcc.c-torture/compile/pr34966.c (atan): Only use asm
        on i?86/x86_64.
 
+       PR c++/34965
+       * gcc.dg/pr34965.c: New test.
+       * g++.dg/other/error24.C: New test.
+
 2008-01-26  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR libfofortran/34887
diff --git a/gcc/testsuite/g++.dg/other/error24.C b/gcc/testsuite/g++.dg/other/error24.C
new file mode 100644 (file)
index 0000000..54343c5
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/34965
+// { dg-do compile }
+// { dg-options "-O" }
+
+int foo (int);
+
+void
+bar (int i, int j, double k)
+{
+  foo (i && j) ();     // { dg-error "\\(\\(?i != 0\\)? \\&\\& \\(?j != 0\\)?\\)" }
+  foo (!i || !j) ();   // { dg-error "\\(\\(?i == 0\\)? \\|\\| \\(?j == 0\\)?\\)" }
+  foo (!i == !j) ();   // { dg-error "\\(\\(?i != 0\\)? \\^ \\(?j == 0\\)?\\)" }
+}
diff --git a/gcc/testsuite/gcc.dg/pr34965.c b/gcc/testsuite/gcc.dg/pr34965.c
new file mode 100644 (file)
index 0000000..381e46f
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR c++/34965 */
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+int foo (int);
+
+void
+bar (int i, int j, double k)
+{
+  foo (i && j) ();     /* { dg-error "\\(i != 0 \\&\\& j != 0\\)" } */
+  foo (!i || !j) ();   /* { dg-error "\\(i == 0 \\|\\| j == 0\\)" } */
+  foo (!i == !j) ();   /* { dg-error "\\(i != 0 \\^ j == 0\\)" } */
+}