On Mon, Jul 13, 2009 at 10:31 AM, Dave
Korn<[email protected]> wrote:
> Richard Guenther wrote:
>> On Mon, Jul 13, 2009 at 5:39 AM, Jack Howarth<[email protected]>
>> wrote:
>>> On Mon, Jul 13, 2009 at 01:52:51AM +0100, Dave Korn wrote:
>
>>>>> __complex__ long long f ()
>>>>> {
>>>>> int i[99];
>>>>> __complex__ long long v;
>>>>>
>>>>> v += f ();
>>>> Undefined behaviour, no?
>>>>
>>>> cheers,
>>>> DaveK
>>> So then the testcase is flawed and should have the darwin line corrected
>>> to...
>>>
>>> /* { dg-skip-if "PIC default" { { i?86-*-darwin* x86_64-*-darwin* } &&
>>> ilp32 } { "*" } { "" } } */
>>
>> Probably yes. The testcase invokes undefined behavior because
>> v is used uninitialized - but that may be the trigger for the original
>> ICE, so better preserve that.
>
> It would be useful as an experiment to try initialising it and see if that's
> also what's triggering the reload failure in this particular case, because if
> not then there's still a real bug to find on darwin.
I don't think so. On 32bit
asm("": "+r" (v) : "r" (0), "r" (1));
needs too many registers (4 for the v, 1 for constant 0 and 1 for
constant 1). That's not possible with a frame-pointer and a PIC
register.
Richard.