diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-01-26 18:04:54 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-01-26 18:04:54 +0100 |
commit | 6f536f74ed2ea25a598bda90599202712e5fe632 (patch) | |
tree | 6523683d3981eeb44700f6e079f5b17ecdbf08fe /gcc | |
parent | 680f02e4b47faab19c6f90630a4be1b15122e6fb (diff) | |
download | gcc-6f536f74ed2ea25a598bda90599202712e5fe632.zip gcc-6f536f74ed2ea25a598bda90599202712e5fe632.tar.gz gcc-6f536f74ed2ea25a598bda90599202712e5fe632.tar.bz2 |
re PR c++/34965 (Broken diagnostic: 'truth_and_expr' not supported by dump_expr)
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.
* 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.
From-SVN: r131868
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/c-pretty-print.c | 20 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/error.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/error24.C | 13 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr34965.c | 13 |
7 files changed, 71 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ceae4b6..13135a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c index 5fdaf2f..e9a6bbb 100644 --- a/gcc/c-pretty-print.c +++ b/gcc/c-pretty-print.c @@ -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; diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1e3f462..714f65b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/error.c b/gcc/cp/error.c index af86cf5..b81120a 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ce05a7..1b8e2ba 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..54343c5 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/error24.C @@ -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 index 0000000..381e46f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr34965.c @@ -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\\)" } */ +} |