diff options
author | Patrick Palka <ppalka@redhat.com> | 2023-08-11 12:50:52 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2023-08-11 12:50:52 -0400 |
commit | 1531de6375afddcd27ea33a23248fa87bfed147b (patch) | |
tree | eace17708dbaa8c33881205681a739a8ba408449 | |
parent | a4238f6db879abc048282d2d26442e68dc9427ea (diff) | |
download | gcc-1531de6375afddcd27ea33a23248fa87bfed147b.zip gcc-1531de6375afddcd27ea33a23248fa87bfed147b.tar.gz gcc-1531de6375afddcd27ea33a23248fa87bfed147b.tar.bz2 |
c++: improve debug_tree for templated types/decls
gcc/cp/ChangeLog:
* ptree.cc (cxx_print_decl): Check for DECL_LANG_SPECIFIC and
TS_DECL_COMMON only when necessary. Print DECL_TEMPLATE_INFO
for all decls that have it, not just VAR_DECL or FUNCTION_DECL.
Also print DECL_USE_TEMPLATE.
(cxx_print_type): Print TYPE_TEMPLATE_INFO.
<case BOUND_TEMPLATE_TEMPLATE_PARM>: Don't print TYPE_TI_ARGS
anymore.
<case TEMPLATE_TYPE/TEMPLATE_PARM>: Print TEMPLATE_TYPE_PARM_INDEX
instead of printing the index, level and original level
individually.
-rw-r--r-- | gcc/cp/ptree.cc | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/gcc/cp/ptree.cc b/gcc/cp/ptree.cc index 33af7b8..b400148 100644 --- a/gcc/cp/ptree.cc +++ b/gcc/cp/ptree.cc @@ -38,10 +38,6 @@ cxx_print_decl (FILE *file, tree node, int indent) return; } - if (!CODE_CONTAINS_STRUCT (TREE_CODE (node), TS_DECL_COMMON) - || !DECL_LANG_SPECIFIC (node)) - return; - if (TREE_CODE (node) == FUNCTION_DECL) { int flags = TFF_DECL_SPECIFIERS|TFF_RETURN_TYPE @@ -106,6 +102,10 @@ cxx_print_decl (FILE *file, tree node, int indent) need_indent = false; } + if (!CODE_CONTAINS_STRUCT (TREE_CODE (node), TS_DECL_COMMON) + || !DECL_LANG_SPECIFIC (node)) + return; + if (DECL_EXTERNAL (node) && DECL_NOT_REALLY_EXTERN (node)) { if (need_indent) @@ -124,27 +124,33 @@ cxx_print_decl (FILE *file, tree node, int indent) need_indent = false; } - if (VAR_OR_FUNCTION_DECL_P (node) + if ((VAR_OR_FUNCTION_DECL_P (node) + || TREE_CODE (node) == FIELD_DECL + || TREE_CODE (node) == TYPE_DECL + || TREE_CODE (node) == CONCEPT_DECL + || TREE_CODE (node) == TEMPLATE_DECL) && DECL_TEMPLATE_INFO (node)) - print_node (file, "template-info", DECL_TEMPLATE_INFO (node), - indent + 4); + { + print_node (file, "template-info", DECL_TEMPLATE_INFO (node), + indent + 4); + indent_to (file, indent + 3); + fprintf (file, " use_template=%d", DECL_USE_TEMPLATE (node)); + } } void cxx_print_type (FILE *file, tree node, int indent) { + if (TYPE_LANG_SPECIFIC (node) + && TYPE_TEMPLATE_INFO (node)) + print_node (file, "template-info", TYPE_TEMPLATE_INFO (node), indent + 4); + switch (TREE_CODE (node)) { case BOUND_TEMPLATE_TEMPLATE_PARM: - print_node (file, "args", TYPE_TI_ARGS (node), indent + 4); - gcc_fallthrough (); - case TEMPLATE_TYPE_PARM: case TEMPLATE_TEMPLATE_PARM: - indent_to (file, indent + 3); - fprintf (file, "index %d level %d orig_level %d", - TEMPLATE_TYPE_IDX (node), TEMPLATE_TYPE_LEVEL (node), - TEMPLATE_TYPE_ORIG_LEVEL (node)); + print_node (file, "tpi", TEMPLATE_TYPE_PARM_INDEX (node), indent + 4); return; case FUNCTION_TYPE: |