diff options
author | Roger Sayle <roger@eyesopen.com> | 2007-01-31 02:15:45 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2007-01-31 02:15:45 +0000 |
commit | 5e203bf88350d60801814a1993db77e2dc7c98e2 (patch) | |
tree | 704bec3269c5aecdf4f58a146dcaa2e30e30c502 /gcc | |
parent | 5c3f8c97a70f90fec62050b353aa949443914af3 (diff) | |
download | gcc-5e203bf88350d60801814a1993db77e2dc7c98e2.zip gcc-5e203bf88350d60801814a1993db77e2dc7c98e2.tar.gz gcc-5e203bf88350d60801814a1993db77e2dc7c98e2.tar.bz2 |
error.c (dump_type_suffix): Avoid use of cp_build_binary_op when calculating the size of an array (to avoid...
* error.c (dump_type_suffix): Avoid use of cp_build_binary_op when
calculating the size of an array (to avoid recursive errors).
From-SVN: r121371
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/error.c | 18 |
2 files changed, 14 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ad008bf..c89e383 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2007-01-30 Roger Sayle <roger@eyesopen.com> + + * error.c (dump_type_suffix): Avoid use of cp_build_binary_op when + calculating the size of an array (to avoid recursive errors). + 2007-01-30 Manuel Lopez-Ibanez <manu@gcc.gnu.org> PR c++/24745 diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 49f3367..00f0767 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1,7 +1,7 @@ /* Call-backs for C++ error reporting. This code is non-reentrant. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, - 2003, 2004, 2005 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify @@ -629,16 +629,16 @@ dump_type_suffix (tree t, int flags) pp_cxx_left_bracket (cxx_pp); if (TYPE_DOMAIN (t)) { - if (host_integerp (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0)) - pp_wide_integer - (cxx_pp, tree_low_cst (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0) + 1); - else if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (t))) == MINUS_EXPR) - dump_expr (TREE_OPERAND (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0), + tree dtype = TYPE_DOMAIN (t); + tree max = TYPE_MAX_VALUE (dtype); + if (host_integerp (max, 0)) + pp_wide_integer (cxx_pp, tree_low_cst (max, 0) + 1); + else if (TREE_CODE (max) == MINUS_EXPR) + dump_expr (TREE_OPERAND (max, 0), flags & ~TFF_EXPR_IN_PARENS); else - dump_expr (fold (cp_build_binary_op - (PLUS_EXPR, TYPE_MAX_VALUE (TYPE_DOMAIN (t)), - integer_one_node)), + dump_expr (fold_build2 (PLUS_EXPR, dtype, max, + build_int_cst (dtype, 1)), flags & ~TFF_EXPR_IN_PARENS); } pp_cxx_right_bracket (cxx_pp); |