]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Fix print-tree for TEMPLATE_DECL
authorJason Merrill <jason@redhat.com>
Fri, 2 Apr 2021 09:45:02 +0000 (05:45 -0400)
committerJason Merrill <jason@redhat.com>
Mon, 5 Apr 2021 12:25:26 +0000 (08:25 -0400)
The if allows TEMPLATE_DECL, but then checking DECL_MODULE_IMPORT_P crashes
on TEMPLATE_DECL.  Fixed by stripping TEMPLATE_DECL first.

gcc/cp/ChangeLog:

* ptree.c (cxx_print_decl): Check DECL_MODULE_IMPORT_P on
template result.

gcc/cp/ptree.c

index 95a4fdf284aed8b96310be0787c629bbe8c150a2..33b73fb24b610b7492881a2d4d5b4b9c0f619829 100644 (file)
@@ -59,16 +59,16 @@ cxx_print_decl (FILE *file, tree node, int indent)
 
   bool need_indent = true;
 
-  if (TREE_CODE (node) == FUNCTION_DECL
-      || TREE_CODE (node) == VAR_DECL
-      || TREE_CODE (node) == TYPE_DECL
-      || TREE_CODE (node) == TEMPLATE_DECL
-      || TREE_CODE (node) == CONCEPT_DECL
-      || TREE_CODE (node) == NAMESPACE_DECL)
+  tree ntnode = STRIP_TEMPLATE (node);
+  if (TREE_CODE (ntnode) == FUNCTION_DECL
+      || TREE_CODE (ntnode) == VAR_DECL
+      || TREE_CODE (ntnode) == TYPE_DECL
+      || TREE_CODE (ntnode) == CONCEPT_DECL
+      || TREE_CODE (ntnode) == NAMESPACE_DECL)
     {
       unsigned m = 0;
-      if (DECL_LANG_SPECIFIC (node) && DECL_MODULE_IMPORT_P (node))
-       m = get_importing_module (node, true);
+      if (DECL_LANG_SPECIFIC (ntnode) && DECL_MODULE_IMPORT_P (ntnode))
+       m = get_importing_module (ntnode, true);
 
       if (const char *name = m == ~0u ? "" : module_name (m, true))
        {
@@ -78,7 +78,7 @@ cxx_print_decl (FILE *file, tree node, int indent)
          need_indent = false;
        }
 
-      if (DECL_LANG_SPECIFIC (node) && DECL_MODULE_PURVIEW_P (node))
+      if (DECL_LANG_SPECIFIC (ntnode) && DECL_MODULE_PURVIEW_P (ntnode))
        {
          if (need_indent)
            indent_to (file, indent + 3);