Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
March 25, 2013 testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
In runnable/test42.d test7290 checks if a scope delegate is really allocated on the stack. To verify this it obtains the EBP pointer and compares that to the delegates .ptr. The problem is that as soon as we enable optimization gcc no longer adjusts the EBP pointer when calling the helper functions and the test fails... This test seems to be very fragile in general so what should we do about this? BTW: I introduced a small typo in test7290 when porting to GCC asm: The test in the main test7290 function should check "assert(dg.ptr <= p);", not "assert(p < dg.ptr);" |
March 25, 2013 Re: testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johannes Pfau Attachments:
| On 25 March 2013 18:36, Johannes Pfau <nospam@example.com> wrote: > In runnable/test42.d test7290 checks if a scope delegate is really allocated on the stack. To verify this it obtains the EBP pointer and compares that to the delegates .ptr. > > The problem is that as soon as we enable optimization gcc no > longer adjusts the EBP pointer when calling the helper functions and > the test fails... > > This test seems to be very fragile in general so what should we do about this? > > > BTW: I introduced a small typo in test7290 when porting to GCC asm: > The test in the main test7290 function should check "assert(dg.ptr <= > p);", not "assert(p < dg.ptr);" > 1. Revert your typo. 2. Raise with a thread in dmd-internals about it. -O2 in GDC triggers -fomit-frame-pointer. I'm 90% certain that Walter will say that any function with assembly inside requires that a frame pointer must always be present (except in naked function), but that is absolute rubbish. For x86_64 (at least), the ABI encourages the absence of a frame pointer. Regards -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0'; |
March 26, 2013 Re: testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
Posted in reply to Iain Buclaw | Am Mon, 25 Mar 2013 19:26:10 +0000
schrieb Iain Buclaw <ibuclaw@ubuntu.com>:
> On 25 March 2013 18:36, Johannes Pfau <nospam@example.com> wrote:
>
> > In runnable/test42.d test7290 checks if a scope delegate is really allocated on the stack. To verify this it obtains the EBP pointer and compares that to the delegates .ptr.
> >
> > The problem is that as soon as we enable optimization gcc no
> > longer adjusts the EBP pointer when calling the helper functions and
> > the test fails...
> >
> > This test seems to be very fragile in general so what should we do about this?
> >
> >
> > BTW: I introduced a small typo in test7290 when porting to GCC asm:
> > The test in the main test7290 function should check "assert(dg.ptr
> > <= p);", not "assert(p < dg.ptr);"
> >
>
>
> 1. Revert your typo.
>
> 2. Raise with a thread in dmd-internals about it. -O2 in GDC triggers -fomit-frame-pointer. I'm 90% certain that Walter will say that any function with assembly inside requires that a frame pointer must always be present (except in naked function), but that is absolute rubbish. For x86_64 (at least), the ABI encourages the absence of a frame pointer.
>
>
> Regards
2 doesn't sound very promising though. We could just move that test to another file and make sure it's compiled with -fno-inline and fno-omit-frame-pointer. Even if dmd asm may require the frame pointer that needn't be true for gcc asm.
BTW: Do we allow backports of specific frontend fixes into gdc? I'd like to merge the fix for the final methods in interfaces problem.
|
March 26, 2013 Re: testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johannes Pfau Attachments:
| On 26 March 2013 18:30, Johannes Pfau <nospam@example.com> wrote: > Am Mon, 25 Mar 2013 19:26:10 +0000 > schrieb Iain Buclaw <ibuclaw@ubuntu.com>: > > > On 25 March 2013 18:36, Johannes Pfau <nospam@example.com> wrote: > > > > > In runnable/test42.d test7290 checks if a scope delegate is really allocated on the stack. To verify this it obtains the EBP pointer and compares that to the delegates .ptr. > > > > > > The problem is that as soon as we enable optimization gcc no > > > longer adjusts the EBP pointer when calling the helper functions and > > > the test fails... > > > > > > This test seems to be very fragile in general so what should we do about this? > > > > > > > > > BTW: I introduced a small typo in test7290 when porting to GCC asm: > > > The test in the main test7290 function should check "assert(dg.ptr > > > <= p);", not "assert(p < dg.ptr);" > > > > > > > > > 1. Revert your typo. > > > > 2. Raise with a thread in dmd-internals about it. -O2 in GDC triggers -fomit-frame-pointer. I'm 90% certain that Walter will say that any function with assembly inside requires that a frame pointer must always be present (except in naked function), but that is absolute rubbish. For x86_64 (at least), the ABI encourages the absence of a frame pointer. > > > > > > Regards > > 2 doesn't sound very promising though. We could just move that test to another file and make sure it's compiled with -fno-inline and fno-omit-frame-pointer. Even if dmd asm may require the frame pointer that needn't be true for gcc asm. > > BTW: Do we allow backports of specific frontend fixes into gdc? I'd like to merge the fix for the final methods in interfaces problem. > Have no objections. Have done that for __vector's before ahead of release. -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0'; |
March 28, 2013 Re: testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johannes Pfau | Are you trying to get stack top? void test(scope void delegate() dg) { int[2] top; void* p=top.ptr; assert(p < dg.ptr); assert(dg.ptr !is null); //also check that ptr is not in heap assert(gc_addrOf(dg.ptr) is null); } |
March 28, 2013 Re: testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kagamin | core.memory.GC.addrOf(dg.ptr); |
March 29, 2013 Re: testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kagamin Attachments:
| On 28 March 2013 04:47, Kagamin <spam@here.lot> wrote: > core.memory.GC.addrOf(dg.ptr); > Done and already merged in. https://github.com/D-Programming-Language/dmd/pull/1809 Regards -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0'; |
April 01, 2013 Re: testsuite: optimization dependent test | ||||
---|---|---|---|---|
| ||||
Posted in reply to Iain Buclaw | On Friday, 29 March 2013 at 13:24:42 UTC, Iain Buclaw wrote:
> https://github.com/D-Programming-Language/dmd/pull/1809
lol, put imports after test3.
|
Copyright © 1999-2021 by the D Language Foundation