middle-end: Avoid using DECL_UID in ASM_FORMAT_PRIVATE_NAME [PR94223]
authorJakub Jelinek <jakub@redhat.com>
Wed, 25 Mar 2020 08:18:33 +0000 (09:18 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 25 Mar 2020 08:18:33 +0000 (09:18 +0100)
commit158cccea0d097d9f181bf4e35fdeb97865c960f7
treee30b193d875bdb9d77fe1964f4d38352ec848990
parentf1154b4d3c54e83d493cc66d1a30c410b9b3108a
middle-end: Avoid using DECL_UID in ASM_FORMAT_PRIVATE_NAME [PR94223]

As mentioned in the PR, we don't guarantee DECL_UID to be the same between
corresponding decls in -g and -g0 builds, -g can create more decls and all
that is guaranteed is that the DECL_UIDs of the corresponding decls compare
the same.
The following testcase gets a -fcompare-debug failure because these
functions use DECL_UID as the number in ASM_FORMAT_PRIVATE_NAME.

The patch fixes it by using just a sequential number there instead.
I don't think this can be called during PCH writing, this only happens for
non-public decls and the C/C++ FEs shouldn't mangling those at that point
(furthermore C++ FE uses a different set_decl_assembler_name hook and this
one is something only the gimplifier calls on C.NNNN temporaries.

2020-03-25  Jakub Jelinek  <jakub@redhat.com>

PR c++/94223
* langhooks.c (lhd_set_decl_assembler_name): Use a static ulong
counter instead of DECL_UID.

* lto-lang.c (lto_set_decl_assembler_name): Use a static ulong
counter instead of DECL_UID.

* g++.dg/opt/pr94223.C: New test.
gcc/ChangeLog
gcc/langhooks.c
gcc/lto/ChangeLog
gcc/lto/lto-lang.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr94223.C [new file with mode: 0644]