The root problem is that -fsigned-char and -funsigned-char is incompatible. The fix of the problem:
Index: coverage.c =================================================================== --- coverage.c (revision 198362) +++ coverage.c (working copy) @@ -336,6 +336,7 @@ { "-fsized-delete", "-fno-sized-delete", false }, { "-frtti", "-fno-rtti", true }, { "-fstrict-aliasing", "-fno-strict-aliasing", true }, + { "-fsigned-char", "-funsigned-char", true}, { NULL, NULL, false } }; Ok for google branches? Thanks, Dehao On Wed, May 1, 2013 at 10:26 AM, Dehao Chen <de...@google.com> wrote: > I've seen a case when func_id in aux module is not the same (off by > 1). This is when -fexception is specified. I had not looked into why > though. I'll find out why it is off-by-1 > > Dehao > > On Wed, May 1, 2013 at 9:57 AM, Xinliang David Li <davi...@google.com> wrote: >> On Tue, Apr 30, 2013 at 4:10 PM, Dehao Chen <de...@google.com> wrote: >>> This patch changes to use context function name to replace function >>> id, which is not available in AutoFDO builds. >> >> Why isn't func_id not available in autofdo builds? The func-id for the >> the same function should remain the same regardless whether the module >> is compiled as an aux module or the primary module. >> >> David >> >>> >>> 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);