Mercurial > hg > CbC > CbC_gcc
diff gcc/c-family/c-pretty-print.c @ 146:351920fa3827
merge
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 01 Mar 2020 16:13:28 +0900 |
parents | d34655255c78 1830386684a0 |
children |
line wrap: on
line diff
--- a/gcc/c-family/c-pretty-print.c Sun Dec 23 21:23:56 2018 +0900 +++ b/gcc/c-family/c-pretty-print.c Sun Mar 01 16:13:28 2020 +0900 @@ -1,5 +1,5 @@ /* Subroutines common to both C and C++ pretty-printers. - Copyright (C) 2002-2018 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net> This file is part of GCC. @@ -473,6 +473,16 @@ ? "_Complex" : "__complex__")); else if (code == VECTOR_TYPE) { + /* The syntax we print for vector types isn't real C or C++ syntax, + so it's better to print the type name if we have one. */ + tree name = TYPE_NAME (t); + if (!(pp->flags & pp_c_flag_gnu_v3) + && name + && TREE_CODE (name) == TYPE_DECL) + { + pp->id_expression (name); + break; + } pp_c_ws_string (pp, "__vector"); pp_c_left_paren (pp); pp_wide_integer (pp, TYPE_VECTOR_SUBPARTS (t)); @@ -528,7 +538,7 @@ if (!first && !parms) { pp_separate_with (pp, ','); - pp_c_ws_string (pp, "..."); + pp_string (pp, "..."); } } pp_c_right_paren (pp); @@ -574,16 +584,20 @@ case ARRAY_TYPE: pp_c_left_bracket (this); - if (TYPE_DOMAIN (t) && TYPE_MAX_VALUE (TYPE_DOMAIN (t))) + if (tree dom = TYPE_DOMAIN (t)) { - tree maxval = TYPE_MAX_VALUE (TYPE_DOMAIN (t)); - tree type = TREE_TYPE (maxval); + if (tree maxval = TYPE_MAX_VALUE (dom)) + { + tree type = TREE_TYPE (maxval); - if (tree_fits_shwi_p (maxval)) - pp_wide_integer (this, tree_to_shwi (maxval) + 1); + if (tree_fits_shwi_p (maxval)) + pp_wide_integer (this, tree_to_shwi (maxval) + 1); + else + expression (fold_build2 (PLUS_EXPR, type, maxval, + build_int_cst (type, 1))); + } else - expression (fold_build2 (PLUS_EXPR, type, maxval, - build_int_cst (type, 1))); + pp_string (this, "0"); } pp_c_right_bracket (this); direct_abstract_declarator (TREE_TYPE (t)); @@ -979,14 +993,14 @@ pp_c_enumeration_constant (c_pretty_printer *pp, tree e) { tree type = TREE_TYPE (e); - tree value; + tree value = NULL_TREE; /* Find the name of this constant. */ - for (value = TYPE_VALUES (type); - value != NULL_TREE - && !tree_int_cst_equal (DECL_INITIAL (TREE_VALUE (value)), e); - value = TREE_CHAIN (value)) - ; + if ((pp->flags & pp_c_flag_gnu_v3) == 0) + for (value = TYPE_VALUES (type); value != NULL_TREE; + value = TREE_CHAIN (value)) + if (tree_int_cst_equal (DECL_INITIAL (TREE_VALUE (value)), e)) + break; if (value != NULL_TREE) pp->id_expression (TREE_PURPOSE (value)); @@ -1263,9 +1277,14 @@ default: /* FIXME: Make sure we won't get into an infinite loop. */ - pp_c_left_paren (this); - expression (e); - pp_c_right_paren (this); + if (location_wrapper_p (e)) + expression (e); + else + { + pp_c_left_paren (this); + expression (e); + pp_c_right_paren (this); + } break; } } @@ -2356,6 +2375,13 @@ parameter_list = pp_c_parameter_type_list; } +/* c_pretty_printer's implementation of pretty_printer::clone vfunc. */ + +pretty_printer * +c_pretty_printer::clone () const +{ + return new c_pretty_printer (*this); +} /* Print the tree T in full, on file FILE. */