On Thu, Oct 27, 2016 at 6:14 PM, Aldy Hernandez <al...@redhat.com> wrote:
> On 10/27/2016 12:35 AM, Richard Biener wrote:
>>
>> On Wed, Oct 26, 2016 at 9:17 PM, Aldy Hernandez <al...@redhat.com> wrote:
>>>
>>> The following one-liner segfaults on arm-eabi when compiled with
>>> -mfloat-abi=hard -g:
>>>
>>>         __simd64_float16_t usingit;
>>>
>>> The problem is that the pretty printer (in simple_type_specificer()) is
>>> dereferencing a NULL result from c_common_type_for_mode:
>>>
>>>           int prec = TYPE_PRECISION (t);
>>>           if (ALL_FIXED_POINT_MODE_P (TYPE_MODE (t)))
>>>             t = c_common_type_for_mode (TYPE_MODE (t), TYPE_SATURATING
>>> (t));
>>>           else
>>>             t = c_common_type_for_mode (TYPE_MODE (t), TYPE_UNSIGNED
>>> (t));
>>>           if (TYPE_NAME (t))
>>>
>>> The type in question is:
>>>
>>>         <real_type 0x7fffefdeb150 HF ...>
>>>
>>> which corresponds to HFmode and which AFAICT, does not have a type by
>>> design.
>>>
>>> I see that other uses of *type_for_node() throughout the compiler check
>>> the
>>> result for NULL, so perhaps we should do the same here.
>>>
>>> The attached patch fixes the problem.
>>>
>>> OK for trunk?
>>
>>
>> Your added assert shows another possible issue - can you fix this by
>> assigning
>> the result of c_common_type_for_mode to a new variable, like common_t and
>> use that for the TYPE_NAME (...) case?  I think this was what was
>> intended.
>
>
> Certainly.
>
> OK pending tests?

Ok.

Thanks,
Richard.

> Aldy

Reply via email to