[lld] r233088 - [Mips] Suppress "right shift by too large amount" warning

David Blaikie dblaikie at gmail.com
Tue Mar 24 10:45:32 PDT 2015


On Tue, Mar 24, 2015 at 10:41 AM, Simon Atanasyan <simon at atanasyan.com>
wrote:

> On Tue, Mar 24, 2015 at 8:35 PM, David Blaikie <dblaikie at gmail.com> wrote:
> >
> > On Tue, Mar 24, 2015 at 10:28 AM, Simon Atanasyan <simon at atanasyan.com>
> > wrote:
> >>
> >> On Tue, Mar 24, 2015 at 7:16 PM, David Blaikie <dblaikie at gmail.com>
> wrote:
> >> >
> >> > On Tue, Mar 24, 2015 at 8:49 AM, Simon Atanasyan <simon at atanasyan.com
> >
> >> > wrote:
> >> >>
> >> >> Author: atanasyan
> >> >> Date: Tue Mar 24 10:49:59 2015
> >> >> New Revision: 233088
> >> >>
> >> >> URL: http://llvm.org/viewvc/llvm-project?rev=233088&view=rev
> >> >> Log:
> >> >> [Mips] Suppress "right shift by too large amount" warning
> >> >>
> >> >> Visual C++ shows the "right shift by too large amount" warning if
> >> >> `MipsELFReference` is instantiated for 32-bit target and
> >> >> `Elf_Rel_Impl::getType`
> >> >> method has `unsigned char` return type. We can freely suppress the
> >> >> warning
> >> >> in
> >> >> that case because MIPS 32-bit ABI does not pack multiple relocation
> >> >> types
> >> >> into
> >> >> the single field `r_type` and the `MipsELFReference::_tag` should be
> >> >> always
> >> >> zero in that case.
> >> >
> >> >
> >> > Can we just disable the MSVC warning if it's wrong, then?
> >>
> >> I thought about an alternative solution - fix Elf_Rel_Impl::getType()
> >> method so all its variants have the same return type uint32_t. Any
> >> objections against this idea?
> >
> > It still doesn't seem to improve anything - if getType() still only
> returns
> > a number 0-255, the shift still is a zero-ing action. Hiding it from the
> > compiler doesn't seem to change anything in the semantics of the
> operation &
> > just obscures things further... seems to me, at least.
>
> The getType() does not always return 0-255. In case of 32-bit variant
> of Elf_Rel_Impl it does.


Sorry, yes, not always but even sometimes - since it's used via a template,
it seems fine for it to return the type that's appropriate for the domain
its returning. I don't see any benefit to it returning uint32 when it
really is a uint8, do you?


> In case of 64-bit variant it returns 32-bit
> integer which can be split up to four parts. In my case I extract
> lower 8 bits and high 24 bits.


> --
> Simon Atanasyan
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150324/2b7e3674/attachment.html>


More information about the llvm-commits mailing list