On Wed, Sep 12, 2018 at 12:56 AM Jeff Law <l...@redhat.com> wrote: > > On 9/5/18 5:48 AM, a...@codesourcery.com wrote: > > > > The HSA GPU drivers can't cope with binaries that have the same symbol > > defined > > multiple times, even though the names are not exported. This happens > > whenever > > there are file-scope static variables with matching names. I believe it's > > also > > an issue with switch tables. > > > > This is a bug, but outside our control, so we must work around it when > > multiple > > translation units have the same symbol defined. > > > > Therefore, we've implemented name mangling via > > TARGET_MANGLE_DECL_ASSEMBLER_NAME, but found some places where the > > middle-end > > assumes that the decl name matches the name in the source. > > > > This patch fixes up those cases by falling back to comparing the unmangled > > name, when a lookup fails. > > > > 2018-09-05 Julian Brown <jul...@codesourcery.com> > > > > gcc/ > > * cgraphunit.c (handle_alias_pairs): Scan for aliases by DECL_NAME if > > decl assembler name doesn't match. > > > > gcc/c-family/ > > * c-pragma.c (maye_apply_pending_pragma_weaks): Scan for aliases with > > DECL_NAME if decl assembler name doesn't match. > This should be fine. But please verify there's no regressions on the > x86_64 linux target, particularly for the multi-versioning tests (mv*.c > mv*.C
Err - the patch clearly introduces quadraticness into a path which isn't acceptable. get_for_asmname works through a hashtable. It also looks like !target can readily happen so I wonder what happens if an assembler name does not match but a DECL_NAME one does by accident? I fear you have to fix this one in a different way... (and I hope Honza agrees with me). Thanks, Richard. > Jeff