| Index: gcc/gcc/tree-pretty-print.c
|
| diff --git a/gcc/gcc/tree-pretty-print.c b/gcc/gcc/tree-pretty-print.c
|
| index ff45ecc635d8a3d650b5847fcd5757c40421d6b8..44d4a5d9c030dd356a95572715be278c6d732d16 100644
|
| --- a/gcc/gcc/tree-pretty-print.c
|
| +++ b/gcc/gcc/tree-pretty-print.c
|
| @@ -40,7 +40,6 @@ along with GCC; see the file COPYING3. If not see
|
| /* Local functions, macros and variables. */
|
| static const char *op_symbol (const_tree);
|
| static void pretty_print_string (pretty_printer *, const char*);
|
| -static void print_call_name (pretty_printer *, const_tree);
|
| static void newline_and_indent (pretty_printer *, int);
|
| static void maybe_init_pretty_print (FILE *);
|
| static void print_struct_decl (pretty_printer *, const_tree, int, int);
|
| @@ -51,11 +50,6 @@ static void do_niy (pretty_printer *, const_tree);
|
|
|
| #define NIY do_niy(buffer,node)
|
|
|
| -#define PRINT_FUNCTION_NAME(NODE) pp_printf \
|
| - (buffer, "%s", TREE_CODE (NODE) == NOP_EXPR ? \
|
| - lang_hooks.decl_printable_name (TREE_OPERAND (NODE, 0), 1) : \
|
| - lang_hooks.decl_printable_name (NODE, 1))
|
| -
|
| static pretty_printer buffer;
|
| static int initialized = 0;
|
|
|
| @@ -105,13 +99,24 @@ debug_generic_stmt (tree t)
|
| void
|
| debug_tree_chain (tree t)
|
| {
|
| + struct pointer_set_t *seen = pointer_set_create ();
|
| +
|
| while (t)
|
| - {
|
| - print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
|
| - fprintf(stderr, " ");
|
| - t = TREE_CHAIN (t);
|
| - }
|
| + {
|
| + print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
|
| + fprintf (stderr, " ");
|
| + t = TREE_CHAIN (t);
|
| + if (pointer_set_insert (seen, t))
|
| + {
|
| + fprintf (stderr, "... [cycled back to ");
|
| + print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
|
| + fprintf (stderr, "]");
|
| + break;
|
| + }
|
| + }
|
| fprintf (stderr, "\n");
|
| +
|
| + pointer_set_destroy (seen);
|
| }
|
|
|
| /* Prints declaration DECL to the FILE with details specified by FLAGS. */
|
| @@ -167,20 +172,31 @@ print_generic_expr (FILE *file, tree t, int flags)
|
| static void
|
| dump_decl_name (pretty_printer *buffer, tree node, int flags)
|
| {
|
| - tree t = node;
|
| -
|
| - if (DECL_NAME (t))
|
| - pp_tree_identifier (buffer, DECL_NAME (t));
|
| - if ((flags & TDF_UID)
|
| - || DECL_NAME (t) == NULL_TREE)
|
| + if (DECL_NAME (node))
|
| {
|
| - if (TREE_CODE (t) == LABEL_DECL
|
| - && LABEL_DECL_UID (t) != -1)
|
| - pp_printf (buffer, "L.%d", (int) LABEL_DECL_UID (t));
|
| + if ((flags & TDF_ASMNAME) && DECL_ASSEMBLER_NAME_SET_P (node))
|
| + pp_tree_identifier (buffer, DECL_ASSEMBLER_NAME (node));
|
| else
|
| + pp_tree_identifier (buffer, DECL_NAME (node));
|
| + }
|
| + if ((flags & TDF_UID) || DECL_NAME (node) == NULL_TREE)
|
| + {
|
| + if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1)
|
| + pp_printf (buffer, "L.%d", (int) LABEL_DECL_UID (node));
|
| + else if (TREE_CODE (node) == DEBUG_EXPR_DECL)
|
| {
|
| - char c = TREE_CODE (t) == CONST_DECL ? 'C' : 'D';
|
| - pp_printf (buffer, "%c.%u", c, DECL_UID (t));
|
| + if (flags & TDF_NOUID)
|
| + pp_string (buffer, "D#xxxx");
|
| + else
|
| + pp_printf (buffer, "D#%i", DEBUG_TEMP_UID (node));
|
| + }
|
| + else
|
| + {
|
| + char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D';
|
| + if (flags & TDF_NOUID)
|
| + pp_printf (buffer, "%c.xxxx", c);
|
| + else
|
| + pp_printf (buffer, "%c.%u", c, DECL_UID (node));
|
| }
|
| }
|
| }
|
| @@ -188,12 +204,14 @@ dump_decl_name (pretty_printer *buffer, tree node, int flags)
|
| /* Like the above, but used for pretty printing function calls. */
|
|
|
| static void
|
| -dump_function_name (pretty_printer *buffer, tree node)
|
| +dump_function_name (pretty_printer *buffer, tree node, int flags)
|
| {
|
| - if (DECL_NAME (node))
|
| - PRINT_FUNCTION_NAME (node);
|
| + if (TREE_CODE (node) == NOP_EXPR)
|
| + node = TREE_OPERAND (node, 0);
|
| + if (DECL_NAME (node) && (flags & TDF_ASMNAME) == 0)
|
| + pp_string (buffer, lang_hooks.decl_printable_name (node, 1));
|
| else
|
| - dump_decl_name (buffer, node, 0);
|
| + dump_decl_name (buffer, node, flags);
|
| }
|
|
|
| /* Dump a function declaration. NODE is the FUNCTION_TYPE. BUFFER, SPC and
|
| @@ -423,6 +441,135 @@ dump_omp_clauses (pretty_printer *buffer, tree clause, int spc, int flags)
|
| }
|
|
|
|
|
| +/* Dump location LOC to BUFFER. */
|
| +
|
| +static void
|
| +dump_location (pretty_printer *buffer, location_t loc)
|
| +{
|
| + expanded_location xloc = expand_location (loc);
|
| +
|
| + pp_character (buffer, '[');
|
| + if (xloc.file)
|
| + {
|
| + pp_string (buffer, xloc.file);
|
| + pp_string (buffer, " : ");
|
| + }
|
| + pp_decimal_int (buffer, xloc.line);
|
| + pp_string (buffer, "] ");
|
| +}
|
| +
|
| +
|
| +/* Dump lexical block BLOCK. BUFFER, SPC and FLAGS are as in
|
| + dump_generic_node. */
|
| +
|
| +static void
|
| +dump_block_node (pretty_printer *buffer, tree block, int spc, int flags)
|
| +{
|
| + tree t;
|
| +
|
| + pp_printf (buffer, "BLOCK #%d ", BLOCK_NUMBER (block));
|
| +
|
| + if (flags & TDF_ADDRESS)
|
| + pp_printf (buffer, "[%p] ", (void *) block);
|
| +
|
| + if (BLOCK_ABSTRACT (block))
|
| + pp_string (buffer, "[abstract] ");
|
| +
|
| + if (TREE_ASM_WRITTEN (block))
|
| + pp_string (buffer, "[written] ");
|
| +
|
| + if (flags & TDF_SLIM)
|
| + return;
|
| +
|
| + if (BLOCK_SOURCE_LOCATION (block))
|
| + dump_location (buffer, BLOCK_SOURCE_LOCATION (block));
|
| +
|
| + newline_and_indent (buffer, spc + 2);
|
| +
|
| + if (BLOCK_SUPERCONTEXT (block))
|
| + {
|
| + pp_string (buffer, "SUPERCONTEXT: ");
|
| + dump_generic_node (buffer, BLOCK_SUPERCONTEXT (block), 0,
|
| + flags | TDF_SLIM, false);
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +
|
| + if (BLOCK_SUBBLOCKS (block))
|
| + {
|
| + pp_string (buffer, "SUBBLOCKS: ");
|
| + for (t = BLOCK_SUBBLOCKS (block); t; t = BLOCK_CHAIN (t))
|
| + {
|
| + dump_generic_node (buffer, t, 0, flags | TDF_SLIM, false);
|
| + pp_string (buffer, " ");
|
| + }
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +
|
| + if (BLOCK_CHAIN (block))
|
| + {
|
| + pp_string (buffer, "SIBLINGS: ");
|
| + for (t = BLOCK_CHAIN (block); t; t = BLOCK_CHAIN (t))
|
| + {
|
| + dump_generic_node (buffer, t, 0, flags | TDF_SLIM, false);
|
| + pp_string (buffer, " ");
|
| + }
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +
|
| + if (BLOCK_VARS (block))
|
| + {
|
| + pp_string (buffer, "VARS: ");
|
| + for (t = BLOCK_VARS (block); t; t = TREE_CHAIN (t))
|
| + {
|
| + dump_generic_node (buffer, t, 0, flags, false);
|
| + pp_string (buffer, " ");
|
| + }
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +
|
| + if (VEC_length (tree, BLOCK_NONLOCALIZED_VARS (block)) > 0)
|
| + {
|
| + unsigned i;
|
| + VEC(tree,gc) *nlv = BLOCK_NONLOCALIZED_VARS (block);
|
| +
|
| + pp_string (buffer, "NONLOCALIZED_VARS: ");
|
| + for (i = 0; VEC_iterate (tree, nlv, i, t); i++)
|
| + {
|
| + dump_generic_node (buffer, t, 0, flags, false);
|
| + pp_string (buffer, " ");
|
| + }
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +
|
| + if (BLOCK_ABSTRACT_ORIGIN (block))
|
| + {
|
| + pp_string (buffer, "ABSTRACT_ORIGIN: ");
|
| + dump_generic_node (buffer, BLOCK_ABSTRACT_ORIGIN (block), 0,
|
| + flags | TDF_SLIM, false);
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +
|
| + if (BLOCK_FRAGMENT_ORIGIN (block))
|
| + {
|
| + pp_string (buffer, "FRAGMENT_ORIGIN: ");
|
| + dump_generic_node (buffer, BLOCK_FRAGMENT_ORIGIN (block), 0,
|
| + flags | TDF_SLIM, false);
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +
|
| + if (BLOCK_FRAGMENT_CHAIN (block))
|
| + {
|
| + pp_string (buffer, "FRAGMENT_CHAIN: ");
|
| + for (t = BLOCK_FRAGMENT_CHAIN (block); t; t = BLOCK_FRAGMENT_CHAIN (t))
|
| + {
|
| + dump_generic_node (buffer, t, 0, flags | TDF_SLIM, false);
|
| + pp_string (buffer, " ");
|
| + }
|
| + newline_and_indent (buffer, spc + 2);
|
| + }
|
| +}
|
| +
|
| +
|
| /* Dump the node NODE on the pretty_printer BUFFER, SPC spaces of
|
| indent. FLAGS specifies details to show in the dump (see TDF_* in
|
| tree-pass.h). If IS_STMT is true, the object printed is considered
|
| @@ -446,17 +593,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| pp_printf (buffer, "<&%p> ", (void *)node);
|
|
|
| if ((flags & TDF_LINENO) && EXPR_HAS_LOCATION (node))
|
| - {
|
| - expanded_location xloc = expand_location (EXPR_LOCATION (node));
|
| - pp_character (buffer, '[');
|
| - if (xloc.file)
|
| - {
|
| - pp_string (buffer, xloc.file);
|
| - pp_string (buffer, " : ");
|
| - }
|
| - pp_decimal_int (buffer, xloc.line);
|
| - pp_string (buffer, "] ");
|
| - }
|
| + dump_location (buffer, EXPR_LOCATION (node));
|
|
|
| switch (TREE_CODE (node))
|
| {
|
| @@ -488,6 +625,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
|
|
| case TREE_BINFO:
|
| dump_generic_node (buffer, BINFO_TYPE (node), spc, flags, false);
|
| + break;
|
|
|
| case TREE_VEC:
|
| {
|
| @@ -496,13 +634,13 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| {
|
| size_t len = TREE_VEC_LENGTH (node);
|
| for (i = 0; i < len - 1; i++)
|
| - {
|
| + {
|
| dump_generic_node (buffer, TREE_VEC_ELT (node, i), spc, flags,
|
| false);
|
| pp_character (buffer, ',');
|
| pp_space (buffer);
|
| }
|
| - dump_generic_node (buffer, TREE_VEC_ELT (node, len - 1), spc,
|
| + dump_generic_node (buffer, TREE_VEC_ELT (node, len - 1), spc,
|
| flags, false);
|
| }
|
| }
|
| @@ -527,6 +665,13 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| else if (quals & TYPE_QUAL_RESTRICT)
|
| pp_string (buffer, "restrict ");
|
|
|
| + if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
|
| + {
|
| + pp_string (buffer, "<address-space-");
|
| + pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
|
| + pp_string (buffer, "> ");
|
| + }
|
| +
|
| tclass = TREE_CODE_CLASS (TREE_CODE (node));
|
|
|
| if (tclass == tcc_declaration)
|
| @@ -551,8 +696,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| else if (TREE_CODE (node) == VECTOR_TYPE)
|
| {
|
| pp_string (buffer, "vector ");
|
| - dump_generic_node (buffer, TREE_TYPE (node),
|
| - spc, flags, false);
|
| + dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false);
|
| }
|
| else if (TREE_CODE (node) == INTEGER_TYPE)
|
| {
|
| @@ -562,6 +706,24 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| pp_decimal_int (buffer, TYPE_PRECISION (node));
|
| pp_string (buffer, ">");
|
| }
|
| + else if (TREE_CODE (node) == COMPLEX_TYPE)
|
| + {
|
| + pp_string (buffer, "__complex__ ");
|
| + dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false);
|
| + }
|
| + else if (TREE_CODE (node) == REAL_TYPE)
|
| + {
|
| + pp_string (buffer, "<float:");
|
| + pp_decimal_int (buffer, TYPE_PRECISION (node));
|
| + pp_string (buffer, ">");
|
| + }
|
| + else if (TREE_CODE (node) == FIXED_POINT_TYPE)
|
| + {
|
| + pp_string (buffer, "<fixed-point-");
|
| + pp_string (buffer, TYPE_SATURATING (node) ? "sat:" : "nonsat:");
|
| + pp_decimal_int (buffer, TYPE_PRECISION (node));
|
| + pp_string (buffer, ">");
|
| + }
|
| else
|
| pp_string (buffer, "<unnamed type>");
|
| }
|
| @@ -572,7 +734,12 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| case REFERENCE_TYPE:
|
| str = (TREE_CODE (node) == POINTER_TYPE ? "*" : "&");
|
|
|
| - if (TREE_CODE (TREE_TYPE (node)) == FUNCTION_TYPE)
|
| + if (TREE_TYPE (node) == NULL)
|
| + {
|
| + pp_string (buffer, str);
|
| + pp_string (buffer, "<null type>");
|
| + }
|
| + else if (TREE_CODE (TREE_TYPE (node)) == FUNCTION_TYPE)
|
| {
|
| tree fnode = TREE_TYPE (node);
|
|
|
| @@ -603,6 +770,13 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| if (quals & TYPE_QUAL_RESTRICT)
|
| pp_string (buffer, " restrict");
|
|
|
| + if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
|
| + {
|
| + pp_string (buffer, " <address-space-");
|
| + pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
|
| + pp_string (buffer, ">");
|
| + }
|
| +
|
| if (TYPE_REF_CAN_ALIAS_ALL (node))
|
| pp_string (buffer, " {ref-all}");
|
| }
|
| @@ -612,11 +786,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| NIY;
|
| break;
|
|
|
| - case METHOD_TYPE:
|
| - dump_decl_name (buffer, TYPE_NAME (TYPE_METHOD_BASETYPE (node)), flags);
|
| - pp_string (buffer, "::");
|
| - break;
|
| -
|
| case TARGET_MEM_REF:
|
| {
|
| const char *sep = "";
|
| @@ -710,7 +879,12 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
|
|
| if (TYPE_NAME (node))
|
| dump_generic_node (buffer, TYPE_NAME (node), spc, flags, false);
|
| - else
|
| + else if (!(flags & TDF_SLIM))
|
| + /* FIXME: If we eliminate the 'else' above and attempt
|
| + to show the fields for named types, we may get stuck
|
| + following a cycle of pointers to structs. The alleged
|
| + self-reference check in print_struct_decl will not detect
|
| + cycles involving more than one pointer or struct type. */
|
| print_struct_decl (buffer, node, spc, flags);
|
| break;
|
| }
|
| @@ -836,6 +1010,23 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| break;
|
|
|
| case FUNCTION_TYPE:
|
| + case METHOD_TYPE:
|
| + dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false);
|
| + pp_space (buffer);
|
| + if (TREE_CODE (node) == METHOD_TYPE)
|
| + {
|
| + if (TYPE_METHOD_BASETYPE (node))
|
| + dump_decl_name (buffer, TYPE_NAME (TYPE_METHOD_BASETYPE (node)),
|
| + flags);
|
| + else
|
| + pp_string (buffer, "<null method basetype>");
|
| + pp_string (buffer, "::");
|
| + }
|
| + if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node)))
|
| + dump_decl_name (buffer, TYPE_NAME (node), flags);
|
| + else
|
| + pp_printf (buffer, "<T%x>", TYPE_UID (node));
|
| + dump_function_declaration (buffer, node, spc, flags);
|
| break;
|
|
|
| case FUNCTION_DECL:
|
| @@ -847,9 +1038,14 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| if (DECL_NAME (node))
|
| dump_decl_name (buffer, node, flags);
|
| else if (LABEL_DECL_UID (node) != -1)
|
| - pp_printf (buffer, "<L%d>", (int) LABEL_DECL_UID (node));
|
| + pp_printf (buffer, "<L%d>", (int) LABEL_DECL_UID (node));
|
| else
|
| - pp_printf (buffer, "<D.%u>", DECL_UID (node));
|
| + {
|
| + if (flags & TDF_NOUID)
|
| + pp_string (buffer, "<D.xxxx>");
|
| + else
|
| + pp_printf (buffer, "<D.%u>", DECL_UID (node));
|
| + }
|
| break;
|
|
|
| case TYPE_DECL:
|
| @@ -881,13 +1077,11 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| }
|
| break;
|
|
|
| - case SYMBOL_MEMORY_TAG:
|
| - case NAME_MEMORY_TAG:
|
| case VAR_DECL:
|
| case PARM_DECL:
|
| case FIELD_DECL:
|
| + case DEBUG_EXPR_DECL:
|
| case NAMESPACE_DECL:
|
| - case MEMORY_PARTITION_TAG:
|
| dump_decl_name (buffer, node, flags);
|
| break;
|
|
|
| @@ -898,7 +1092,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| case COMPONENT_REF:
|
| op0 = TREE_OPERAND (node, 0);
|
| str = ".";
|
| - if (TREE_CODE (op0) == INDIRECT_REF)
|
| + if (op0 && TREE_CODE (op0) == INDIRECT_REF)
|
| {
|
| op0 = TREE_OPERAND (op0, 0);
|
| str = "->";
|
| @@ -1173,7 +1367,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| break;
|
|
|
| case CALL_EXPR:
|
| - print_call_name (buffer, node);
|
| + print_call_name (buffer, CALL_EXPR_FN (node), flags);
|
|
|
| /* Print parameters. */
|
| pp_space (buffer);
|
| @@ -1383,6 +1577,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| NIY;
|
| break;
|
|
|
| + case ADDR_SPACE_CONVERT_EXPR:
|
| case FIXED_CONVERT_EXPR:
|
| case FIX_TRUNC_EXPR:
|
| case FLOAT_EXPR:
|
| @@ -1507,17 +1702,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| is_expr = false;
|
| break;
|
|
|
| - case CHANGE_DYNAMIC_TYPE_EXPR:
|
| - pp_string (buffer, "<<<change_dynamic_type (");
|
| - dump_generic_node (buffer, CHANGE_DYNAMIC_TYPE_NEW_TYPE (node), spc + 2,
|
| - flags, false);
|
| - pp_string (buffer, ") ");
|
| - dump_generic_node (buffer, CHANGE_DYNAMIC_TYPE_LOCATION (node), spc + 2,
|
| - flags, false);
|
| - pp_string (buffer, ")>>>");
|
| - is_expr = false;
|
| - break;
|
| -
|
| case LABEL_EXPR:
|
| op0 = TREE_OPERAND (node, 0);
|
| /* If this is for break or continue, don't bother printing it. */
|
| @@ -1534,14 +1718,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| pp_string (buffer, " [non-local]");
|
| break;
|
|
|
| - case EXC_PTR_EXPR:
|
| - pp_string (buffer, "<<<exception object>>>");
|
| - break;
|
| -
|
| - case FILTER_EXPR:
|
| - pp_string (buffer, "<<<filter object>>>");
|
| - break;
|
| -
|
| case LOOP_EXPR:
|
| pp_string (buffer, "while (1)");
|
| if (!(flags & TDF_SLIM))
|
| @@ -1642,11 +1818,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| dump_generic_node (buffer, op0, spc, flags, false);
|
| break;
|
|
|
| - case RESX_EXPR:
|
| - pp_string (buffer, "resx ");
|
| - dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
|
| - break;
|
| -
|
| case ASM_EXPR:
|
| pp_string (buffer, "__asm__");
|
| if (ASM_VOLATILE_P (node))
|
| @@ -1747,7 +1918,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags, false);
|
| pp_string (buffer, ">");
|
| break;
|
| -
|
| +
|
| case VEC_COND_EXPR:
|
| pp_string (buffer, " VEC_COND_EXPR < ");
|
| dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
|
| @@ -1852,7 +2023,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| case OMP_SECTION:
|
| pp_string (buffer, "#pragma omp section");
|
| goto dump_omp_body;
|
| -
|
| +
|
| case OMP_MASTER:
|
| pp_string (buffer, "#pragma omp master");
|
| goto dump_omp_body;
|
| @@ -1976,62 +2147,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| break;
|
|
|
| case BLOCK:
|
| - {
|
| - tree t;
|
| - pp_string (buffer, "BLOCK");
|
| -
|
| - if (BLOCK_ABSTRACT (node))
|
| - pp_string (buffer, " [abstract]");
|
| -
|
| - if (TREE_ASM_WRITTEN (node))
|
| - pp_string (buffer, " [written]");
|
| -
|
| - newline_and_indent (buffer, spc + 2);
|
| -
|
| - if (BLOCK_SUPERCONTEXT (node))
|
| - {
|
| - pp_string (buffer, "SUPERCONTEXT: ");
|
| - if (TREE_CODE (BLOCK_SUPERCONTEXT (node)) == BLOCK)
|
| - pp_printf (buffer, "BLOCK %p",
|
| - (void *)BLOCK_SUPERCONTEXT (node));
|
| - else
|
| - dump_generic_node (buffer, BLOCK_SUPERCONTEXT (node), 0, flags,
|
| - false);
|
| - newline_and_indent (buffer, spc + 2);
|
| - }
|
| -
|
| - if (BLOCK_SUBBLOCKS (node))
|
| - {
|
| - pp_string (buffer, "SUBBLOCKS: ");
|
| - for (t = BLOCK_SUBBLOCKS (node); t; t = BLOCK_CHAIN (t))
|
| - pp_printf (buffer, "%p ", (void *)t);
|
| - newline_and_indent (buffer, spc + 2);
|
| - }
|
| -
|
| - if (BLOCK_VARS (node))
|
| - {
|
| - pp_string (buffer, "VARS: ");
|
| - for (t = BLOCK_VARS (node); t; t = TREE_CHAIN (t))
|
| - {
|
| - dump_generic_node (buffer, t, 0, flags, false);
|
| - pp_string (buffer, " ");
|
| - }
|
| - newline_and_indent (buffer, spc + 2);
|
| - }
|
| -
|
| - if (BLOCK_ABSTRACT_ORIGIN (node))
|
| - {
|
| - pp_string (buffer, "ABSTRACT_ORIGIN: ");
|
| - if (TREE_CODE (BLOCK_ABSTRACT_ORIGIN (node)) == BLOCK)
|
| - pp_printf (buffer, "BLOCK %p",
|
| - (void *)BLOCK_ABSTRACT_ORIGIN (node));
|
| - else
|
| - dump_generic_node (buffer, BLOCK_ABSTRACT_ORIGIN (node), 0, flags,
|
| - false);
|
| - newline_and_indent (buffer, spc + 2);
|
| - }
|
| - }
|
| - break;
|
| + dump_block_node (buffer, node, spc, flags);
|
| + break;
|
|
|
| case VEC_EXTRACT_EVEN_EXPR:
|
| pp_string (buffer, " VEC_EXTRACT_EVEN_EXPR < ");
|
| @@ -2040,7 +2157,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
| dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false);
|
| pp_string (buffer, " > ");
|
| break;
|
| -
|
| +
|
| case VEC_EXTRACT_ODD_EXPR:
|
| pp_string (buffer, " VEC_EXTRACT_ODD_EXPR < ");
|
| dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
|
| @@ -2209,8 +2326,8 @@ print_struct_decl (pretty_printer *buffer, const_tree node, int spc, int flags)
|
| Maybe this could be solved by looking at the scope in which the
|
| structure was declared. */
|
| if (TREE_TYPE (tmp) != node
|
| - || (TREE_CODE (TREE_TYPE (tmp)) == POINTER_TYPE
|
| - && TREE_TYPE (TREE_TYPE (tmp)) != node))
|
| + && (TREE_CODE (TREE_TYPE (tmp)) != POINTER_TYPE
|
| + || TREE_TYPE (TREE_TYPE (tmp)) != node))
|
| {
|
| print_declaration (buffer, tmp, spc+2, flags);
|
| pp_newline (buffer);
|
| @@ -2479,7 +2596,7 @@ op_symbol_code (enum tree_code code)
|
|
|
| case POINTER_PLUS_EXPR:
|
| return "+";
|
| -
|
| +
|
| case PLUS_EXPR:
|
| return "+";
|
|
|
| @@ -2571,65 +2688,52 @@ op_symbol (const_tree op)
|
| return op_symbol_code (TREE_CODE (op));
|
| }
|
|
|
| -/* Prints the name of a CALL_EXPR. */
|
| +/* Prints the name of a call. NODE is the CALL_EXPR_FN of a CALL_EXPR or
|
| + the gimple_call_fn of a GIMPLE_CALL. */
|
|
|
| -static void
|
| -print_call_name (pretty_printer *buffer, const_tree node)
|
| +void
|
| +print_call_name (pretty_printer *buffer, tree node, int flags)
|
| {
|
| - tree op0;
|
| -
|
| - gcc_assert (TREE_CODE (node) == CALL_EXPR);
|
| -
|
| - op0 = CALL_EXPR_FN (node);
|
| + tree op0 = node;
|
|
|
| if (TREE_CODE (op0) == NON_LVALUE_EXPR)
|
| op0 = TREE_OPERAND (op0, 0);
|
|
|
| + again:
|
| switch (TREE_CODE (op0))
|
| {
|
| case VAR_DECL:
|
| case PARM_DECL:
|
| - dump_function_name (buffer, op0);
|
| + case FUNCTION_DECL:
|
| + dump_function_name (buffer, op0, flags);
|
| break;
|
|
|
| case ADDR_EXPR:
|
| case INDIRECT_REF:
|
| case NOP_EXPR:
|
| - dump_generic_node (buffer, TREE_OPERAND (op0, 0), 0, 0, false);
|
| - break;
|
| + op0 = TREE_OPERAND (op0, 0);
|
| + goto again;
|
|
|
| case COND_EXPR:
|
| pp_string (buffer, "(");
|
| - dump_generic_node (buffer, TREE_OPERAND (op0, 0), 0, 0, false);
|
| + dump_generic_node (buffer, TREE_OPERAND (op0, 0), 0, flags, false);
|
| pp_string (buffer, ") ? ");
|
| - dump_generic_node (buffer, TREE_OPERAND (op0, 1), 0, 0, false);
|
| + dump_generic_node (buffer, TREE_OPERAND (op0, 1), 0, flags, false);
|
| pp_string (buffer, " : ");
|
| - dump_generic_node (buffer, TREE_OPERAND (op0, 2), 0, 0, false);
|
| - break;
|
| -
|
| - case COMPONENT_REF:
|
| - /* The function is a pointer contained in a structure. */
|
| - if (TREE_CODE (TREE_OPERAND (op0, 0)) == INDIRECT_REF ||
|
| - TREE_CODE (TREE_OPERAND (op0, 0)) == VAR_DECL)
|
| - dump_function_name (buffer, TREE_OPERAND (op0, 1));
|
| - else
|
| - dump_generic_node (buffer, TREE_OPERAND (op0, 0), 0, 0, false);
|
| - /* else
|
| - We can have several levels of structures and a function
|
| - pointer inside. This is not implemented yet... */
|
| - /* NIY;*/
|
| + dump_generic_node (buffer, TREE_OPERAND (op0, 2), 0, flags, false);
|
| break;
|
|
|
| case ARRAY_REF:
|
| if (TREE_CODE (TREE_OPERAND (op0, 0)) == VAR_DECL)
|
| - dump_function_name (buffer, TREE_OPERAND (op0, 0));
|
| + dump_function_name (buffer, TREE_OPERAND (op0, 0), flags);
|
| else
|
| - dump_generic_node (buffer, op0, 0, 0, false);
|
| + dump_generic_node (buffer, op0, 0, flags, false);
|
| break;
|
|
|
| + case COMPONENT_REF:
|
| case SSA_NAME:
|
| case OBJ_TYPE_REF:
|
| - dump_generic_node (buffer, op0, 0, 0, false);
|
| + dump_generic_node (buffer, op0, 0, flags, false);
|
| break;
|
|
|
| default:
|
| @@ -2730,6 +2834,7 @@ maybe_init_pretty_print (FILE *file)
|
| {
|
| pp_construct (&buffer, /* prefix */NULL, /* line-width */0);
|
| pp_needs_newline (&buffer) = true;
|
| + pp_translate_identifiers (&buffer) = false;
|
| initialized = 1;
|
| }
|
|
|
|
|