This patch changes to use context function name to replace function id, which is not available in AutoFDO builds.
Bootstrapped and passed regression tests. OK for google branches? Thanks, Dehao Index: gcc/l-ipo.c =================================================================== --- gcc/l-ipo.c (revision 198469) +++ gcc/l-ipo.c (working copy) @@ -1714,9 +1714,10 @@ create_unique_name (tree decl, unsigned module_id) { tree id, assemb_id; char *assembler_name; + const char *context = NULL; const char *name; - struct function *context = NULL; int seq = 0; + int len; if (TREE_CODE (decl) == FUNCTION_DECL) { @@ -1740,7 +1741,8 @@ create_unique_name (tree decl, unsigned module_id) else if (TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL) { id = DECL_NAME (decl); - context = DECL_STRUCT_FUNCTION (DECL_CONTEXT (decl)); + context = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME ( + DECL_CONTEXT (decl))); } else /* file scope context */ @@ -1748,17 +1750,12 @@ create_unique_name (tree decl, unsigned module_id) } name = IDENTIFIER_POINTER (id); + len = strlen (name) + context ? strlen (context) : 0; + assembler_name = (char*) alloca (len + 30); if (context) - { - char *n; - unsigned fno = FUNC_DECL_FUNC_ID (context); - n = (char *)alloca (strlen (name) + 15); - sprintf (n, "%s.%u", name, fno); - name = n; - } - - assembler_name = (char*) alloca (strlen (name) + 30); - sprintf (assembler_name, "%s.cmo.%u", name, module_id); + sprintf (assembler_name, "%s.%s.cmo.%u", context, name, module_id); + else + sprintf (assembler_name, "%s.cmo.%u", name, module_id); seq = get_name_seq_num (assembler_name); if (seq) sprintf (assembler_name, "%s.%d", assembler_name, seq);