diff options
Diffstat (limited to 'gcc/tree-pretty-print.c')
-rw-r--r-- | gcc/tree-pretty-print.c | 97 |
1 files changed, 86 insertions, 11 deletions
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index f7bbef43a18..4c03fbed332 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -71,7 +71,7 @@ do_niy (pretty_printer *buffer, const_tree node) } } - pp_string (buffer, " >>>\n"); + pp_string (buffer, " >>>"); } /* Debugging function to print out a generic expression. */ @@ -757,6 +757,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, pp_string (buffer, str); if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node))) dump_decl_name (buffer, TYPE_NAME (node), flags); + else if (flags & TDF_NOUID) + pp_printf (buffer, "<Txxxx>"); else pp_printf (buffer, "<T%x>", TYPE_UID (node)); @@ -794,6 +796,55 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, NIY; break; + case MEM_REF: + { + if (integer_zerop (TREE_OPERAND (node, 1)) + /* Same pointer types, but ignoring POINTER_TYPE vs. + REFERENCE_TYPE. */ + && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 0))) + == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1)))) + && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 0))) + == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 1)))) + && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 0))) + == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 1)))) + && (TYPE_QUALS (TREE_TYPE (TREE_OPERAND (node, 0))) + == TYPE_QUALS (TREE_TYPE (TREE_OPERAND (node, 1)))) + /* Same value types ignoring qualifiers. */ + && (TYPE_MAIN_VARIANT (TREE_TYPE (node)) + == TYPE_MAIN_VARIANT + (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1)))))) + { + if (TREE_CODE (TREE_OPERAND (node, 0)) != ADDR_EXPR) + { + pp_string (buffer, "*"); + dump_generic_node (buffer, TREE_OPERAND (node, 0), + spc, flags, false); + } + else + dump_generic_node (buffer, + TREE_OPERAND (TREE_OPERAND (node, 0), 0), + spc, flags, false); + } + else + { + pp_string (buffer, "MEM["); + pp_string (buffer, "("); + dump_generic_node (buffer, TREE_TYPE (TREE_OPERAND (node, 1)), + spc, flags | TDF_SLIM, false); + pp_string (buffer, ")"); + dump_generic_node (buffer, TREE_OPERAND (node, 0), + spc, flags, false); + if (!integer_zerop (TREE_OPERAND (node, 1))) + { + pp_string (buffer, " + "); + dump_generic_node (buffer, TREE_OPERAND (node, 1), + spc, flags, false); + } + pp_string (buffer, "]"); + } + break; + } + case TARGET_MEM_REF: { const char *sep = ""; @@ -1032,6 +1083,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, } if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node))) dump_decl_name (buffer, TYPE_NAME (node), flags); + else if (flags & TDF_NOUID) + pp_printf (buffer, "<Txxxx>"); else pp_printf (buffer, "<T%x>", TYPE_UID (node)); dump_function_declaration (buffer, node, spc, flags); @@ -1064,7 +1117,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, } if (DECL_NAME (node)) dump_decl_name (buffer, node, flags); - else + else if (TYPE_NAME (TREE_TYPE (node)) != node) { if ((TREE_CODE (TREE_TYPE (node)) == RECORD_TYPE || TREE_CODE (TREE_TYPE (node)) == UNION_TYPE) @@ -1083,6 +1136,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); } } + else + pp_string (buffer, "<anon>"); break; case VAR_DECL: @@ -1100,7 +1155,25 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, case COMPONENT_REF: op0 = TREE_OPERAND (node, 0); str = "."; - if (op0 && TREE_CODE (op0) == INDIRECT_REF) + if (op0 + && (TREE_CODE (op0) == INDIRECT_REF + || (TREE_CODE (op0) == MEM_REF + && TREE_CODE (TREE_OPERAND (op0, 0)) != ADDR_EXPR + && integer_zerop (TREE_OPERAND (op0, 1)) + /* Same pointer types, but ignoring POINTER_TYPE vs. + REFERENCE_TYPE. */ + && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 0))) + == TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 1)))) + && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0, 0))) + == TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0, 1)))) + && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 0))) + == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 1)))) + && (TYPE_QUALS (TREE_TYPE (TREE_OPERAND (op0, 0))) + == TYPE_QUALS (TREE_TYPE (TREE_OPERAND (op0, 1)))) + /* Same value types ignoring qualifiers. */ + && (TYPE_MAIN_VARIANT (TREE_TYPE (op0)) + == TYPE_MAIN_VARIANT + (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 1)))))))) { op0 = TREE_OPERAND (op0, 0); str = "->"; @@ -1359,7 +1432,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, { pp_newline (buffer); - for (op0 = BIND_EXPR_VARS (node); op0; op0 = TREE_CHAIN (op0)) + for (op0 = BIND_EXPR_VARS (node); op0; op0 = DECL_CHAIN (op0)) { print_declaration (buffer, op0, spc+2, flags); pp_newline (buffer); @@ -1519,7 +1592,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, case ADDR_EXPR: case PREDECREMENT_EXPR: case PREINCREMENT_EXPR: - case ALIGN_INDIRECT_REF: case MISALIGNED_INDIRECT_REF: case INDIRECT_REF: if (TREE_CODE (node) == ADDR_EXPR @@ -2244,7 +2316,7 @@ print_declaration (pretty_printer *buffer, tree t, int spc, int flags) pp_string (buffer, "static "); /* Print the type and name. */ - if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE) + if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE) { tree tmp; @@ -2360,7 +2432,7 @@ print_struct_decl (pretty_printer *buffer, const_tree node, int spc, int flags) print_declaration (buffer, tmp, spc+2, flags); pp_newline (buffer); } - tmp = TREE_CHAIN (tmp); + tmp = DECL_CHAIN (tmp); } } INDENT (spc); @@ -2482,7 +2554,6 @@ op_code_prio (enum tree_code code) case PREINCREMENT_EXPR: case PREDECREMENT_EXPR: case NEGATE_EXPR: - case ALIGN_INDIRECT_REF: case MISALIGNED_INDIRECT_REF: case INDIRECT_REF: case ADDR_EXPR: @@ -2653,9 +2724,6 @@ op_symbol_code (enum tree_code code) case INDIRECT_REF: return "*"; - case ALIGN_INDIRECT_REF: - return "A*"; - case MISALIGNED_INDIRECT_REF: return "M*"; @@ -2760,6 +2828,13 @@ print_call_name (pretty_printer *buffer, tree node, int flags) dump_generic_node (buffer, op0, 0, flags, false); break; + case MEM_REF: + if (integer_zerop (TREE_OPERAND (op0, 1))) + { + op0 = TREE_OPERAND (op0, 0); + goto again; + } + /* Fallthru. */ case COMPONENT_REF: case SSA_NAME: case OBJ_TYPE_REF: |