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

Shankar Easwaran shankare at codeaurora.org
Tue Mar 24 10:51:36 PDT 2015


On 3/24/2015 12:41 PM, Simon Atanasyan 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. 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.
Could you use the r_info (getRInfo) field and extract the needed 
information, seems that is what you need ?

Shankar Easwaran

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation




More information about the llvm-commits mailing list