This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] PR ld/16746: Don't issue a warning for reference in LTO IR
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Binutils <binutils at sourceware dot org>
- Date: Wed, 26 Mar 2014 12:29:01 -0700
- Subject: Re: [PATCH] PR ld/16746: Don't issue a warning for reference in LTO IR
- Authentication-results: sourceware.org; auth=none
- References: <20140325203952 dot GA11925 at intel dot com> <20140325223910 dot GJ18201 at bubble dot grove dot modra dot org> <CAMe9rOr-gtpx-nLz-LR2YbDCH43Js2ZB+G18VCxJPr3V5=X=vQ at mail dot gmail dot com> <20140325235256 dot GK18201 at bubble dot grove dot modra dot org> <CAMe9rOoob7BN0GsCFmftwzdg01-nD4HGM6XS91Dn8KS1z5Z_yQ at mail dot gmail dot com>
On Tue, Mar 25, 2014 at 5:41 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Tue, Mar 25, 2014 at 4:52 PM, Alan Modra <amodra@gmail.com> wrote:
>> On Tue, Mar 25, 2014 at 03:50:05PM -0700, H.J. Lu wrote:
>>> On Tue, Mar 25, 2014 at 3:39 PM, Alan Modra <amodra@gmail.com> wrote:
>>> > On Tue, Mar 25, 2014 at 01:39:52PM -0700, H.J. Lu wrote:
>>> >> case WARNC:
>>> >> - /* Issue a warning and cycle. */
>>> >> - if (h->u.i.warning != NULL)
>>> >> + /* Issue a warning and cycle. Don't issue a warning for
>>> >> + reference in LTO IR which may be removed by LTO later. */
>>> >> + if (h->u.i.warning != NULL
>>> >> + && (abfd->flags & BFD_PLUGIN) == 0)
>>> >
>>> > So here you're handling references in LTO IR for warning symbols
>>> > defined in real object files or other LTO IR files..
>>>
>>> Yes.
>>>
>>> >> case WARN:
>>> >> + /* Don't issue a warning for reference in LTO IR which may be
>>> >> + removed by LTO later. Make a warning symbol instead. */
>>> >> + if ((hash_entry_bfd (h)->flags & BFD_PLUGIN) != 0)
>>> >> + goto mwarn;
>>> >> +
>>> >
>>> > And here you have the case where the new symbol is a warning symbol,
>>> > in either LTO IR or real object files, but the reference was in an LTO
>>> > IR file.
>>>
>>> Yes.
>>>
>>> > What about the CWARN case, where you already have a definition that
>>> > may have been referenced, and the new symbol is a warning symbol?
>>> > You'll need to test h->non_ir_ref I think.
>>>
>>> It is:
>>>
>>> https://sourceware.org/bugzilla/show_bug.cgi?id=12760
>>
>> That's a different issue, isn't it? I'm talking about the sequence
>> 1a) symbol referenced,
>> 2a) symbol defined,
>> 3a) warning symbol defined.
>> or
>> 1b) symbol defined,
>> 2b) symbol referenced,
>> 3b) warning symbol defined.
>>
>> If (1a) or (2b) is an IR reference then we don't want to warn.
>
> The symbol is referenced and used even if it has been inlined.
> Testing h->non_ir_ref isn't sufficient. We also want to know
> if it is used in LTO.
>
With the fix for PR 16756:
https://sourceware.org/ml/binutils/2014-03/msg00275.html
we won't issue warnings for (1a) or (2b) if they are either
inlined or removed.
--
H.J.