aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2023-08-11 12:50:52 -0400
committerPatrick Palka <ppalka@redhat.com>2023-08-11 12:50:52 -0400
commit1531de6375afddcd27ea33a23248fa87bfed147b (patch)
treeeace17708dbaa8c33881205681a739a8ba408449
parenta4238f6db879abc048282d2d26442e68dc9427ea (diff)
downloadgcc-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.cc34
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: