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';