https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92170

            Bug ID: 92170
           Summary: Incorrect function names output when using
                    -fstack-usage on C++
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: driver
          Assignee: unassigned at gcc dot gnu.org
          Reporter: austinpmorton at gmail dot com
  Target Milestone: ---

Created attachment 47075
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47075&action=edit
example source

When test.cc is compiled as follows:

g++ -c -fstack-usage test.cc

test.su contents appears as follows:
test.cc:12:34:<lambda(void*)>   16      static
test.cc:12:34:static void<lambda(void*)>::_FUN(void*)   24      static
test.cc:12:34:<lambda(void*)>::operator void (*)(void*)() const 16      static
test.cc:8:11:)>::fptr_t) [with RetT = void; ArgTs = {}] 16      static
test.cc:20:12:void __static_initialization_and_destruction_0(int, int)  48     
static
test.cc:20:12:cc)       16      static

expected test.su contents as follows:
test.cc:12:26:<lambda(void*)>   16      static
test.cc:12:26:static void<lambda(void*)>::_FUN(void*)   24      static
test.cc:12:26:<lambda(void*)>::operator void (*)(void*)() const 16      static
test.cc:8:11:function_ref<RetT(ArgTs
...)>::function_ref(function_ref<RetT(ArgTs ...)>::fptr_t) [with RetT = void;
ArgTs = {}]  16      static
test.cc:20:12:void __static_initialization_and_destruction_0(int, int)  48     
static
test.cc:20:12:(static initializers for test.cc) 16      static


This appears to be caused by code in output_stack_usage in toplev.c searching
for "." in the function name and only outputting after that point.
It is unclear to me what the intent was originally, but it dates back to the
original stack usage support commit (990495a75cd7).

I achieved the expected output shown above by applying the below patch to
disable the checks:

diff --git a/gcc/toplev.c b/gcc/toplev.c
index 1c7002f5c37..a0b6cefd2d1 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -981,6 +981,7 @@ output_stack_usage (void)
        = strchr (IDENTIFIER_POINTER (DECL_NAME (current_function_decl)), '.');
       const char *name
        = lang_hooks.decl_printable_name (current_function_decl, 2);
+#if 0
       if (suffix)
        {
          const char *dot = strchr (name, '.');
@@ -996,6 +997,7 @@ output_stack_usage (void)
          if (dot)
            name = dot + 1;
        }
+#endif

       fprintf (stack_usage_file,
               "%s:%d:%d:%s\t" HOST_WIDE_INT_PRINT_DEC"\t%s\n",

Reply via email to