http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54709



--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-26 
13:11:14 UTC ---

Ok, this bug won't be fixed and I'm not sure the reduced testcase handling is

a bug.  With



void * memcpy (void *, void *, long);

bar ()

{

    memcpy (0, 1, 1);

}



and -fvisibility=hidden the C frontend marks the memcpy builtin as having

hidden visibility (bug?).  Then at LTRANS time we fail to "merge" it

with the implicit declaration of memcpy from the other TU (which didn't

get hidden visibility - bug?), so this unmerged declaration gets output

via default_elf_asm_output_external which emits (bug?)



.hidden memcpy



and the link fails.



In the TU that does not declare memcpy the memcpy is expanded inline.



With



void foo (void *p, void *q, unsigned s)

{

  __builtin_memcpy (p, q, s);

}



---



void * memcpy (void *, void *, long);

void bar (void *p, void *q, unsigned s)

{

  memcpy (p, q, s);

}



both calls remain (undefined, .hidden is still emitted), no warnings.

Reply via email to