[PATCH] pr 64076 - tolerate different definitions of symbols in lto
Richard Biener
richard.guenther@gmail.com
Tue Jan 20 14:28:00 GMT 2015
On Tue, Jan 20, 2015 at 3:15 PM, Trevor Saunders <tbsaunde@tbsaunde.org> wrote:
> On Tue, Jan 20, 2015 at 10:18:25AM +0100, Richard Biener wrote:
>> On Tue, Jan 20, 2015 at 3:31 AM, <tbsaunde+gcc@tbsaunde.org> wrote:
>> > From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
>> >
>> > Hi,
>> >
>> > when doing an lto link we can have some symbols be ir only and others be
>> > machine code, which trips the assert here. Just adjust the assert to handle
>> > that.
>> >
>> > bootstrapped + regtested x86_64-linux-gnu, ok?
>>
>> Testcase? It's hard to understand what "machine code" is otherwise
>> or why this assert would fail.
>>
>> Thanks,
>
> the one in the pr, basically one file is compiled without -flto and then
> linked with -flto that + an odr violation making the two object files
> different sets of thunks.
>
> does the lto test suite support not passing -flto to one compilation? it
> wasn't clear to me how to put the test case in the testsuite.
Yes, simply add { dg-options -fno-lto } to one of the secondary files.
Richard.
> Trev
>
>> Richard.
>>
>> > Trev
>> >
>> > gcc/
>> >
>> > * ipa-visibility.c (update_visibility_by_resolution_info): Only
>> > assert when not in lto mode.
>> > ---
>> > gcc/ipa-visibility.c | 18 +++++++++++++-----
>> > 1 file changed, 13 insertions(+), 5 deletions(-)
>> >
>> > diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
>> > index 71894af..0791a1c 100644
>> > --- a/gcc/ipa-visibility.c
>> > +++ b/gcc/ipa-visibility.c
>> > @@ -425,11 +425,19 @@ update_visibility_by_resolution_info (symtab_node * node)
>> > if (node->same_comdat_group)
>> > for (symtab_node *next = node->same_comdat_group;
>> > next != node; next = next->same_comdat_group)
>> > - gcc_assert (!next->externally_visible
>> > - || define == (next->resolution == LDPR_PREVAILING_DEF_IRONLY
>> > - || next->resolution == LDPR_PREVAILING_DEF
>> > - || next->resolution == LDPR_UNDEF
>> > - || next->resolution == LDPR_PREVAILING_DEF_IRONLY_EXP));
>> > + {
>> > + if (!next->externally_visible)
>> > + continue;
>> > +
>> > + bool same_def
>> > + = define == (next->resolution == LDPR_PREVAILING_DEF_IRONLY
>> > + || next->resolution == LDPR_PREVAILING_DEF
>> > + || next->resolution == LDPR_UNDEF
>> > + || next->resolution == LDPR_PREVAILING_DEF_IRONLY_EXP);
>> > + gcc_assert (in_lto_p || same_def);
>> > + if (!same_def)
>> > + return;
>> > + }
>> >
>> > if (node->same_comdat_group)
>> > for (symtab_node *next = node->same_comdat_group;
>> > --
>> > 2.1.4
>> >
More information about the Gcc-patches
mailing list