Summary: | ARM: can't cast _argptr / va_list to pointer | ||
---|---|---|---|
Product: | GDC | Reporter: | Johannes Pfau <johannespfau> |
Component: | gdc | Assignee: | Johannes Pfau <johannespfau> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | --- | ||
Version: | development | ||
Hardware: | ARM | ||
OS: | Linux |
Description
Johannes Pfau
2012-09-25 12:00:24 CEST
ARM va_list type is void* ARM EABI va_list type is {void*} As such, you need to be a little more creative about getting it's value the x86-way. byte *p = *cast(byte**)&argptr; byte b = *p; Works for both the old and embedded ABI's. So D doesn't make any guarantees that casting va_list to a pointer is portable, right? But what does that mean for the test suite? Change it to use the portable va_arg or is that test meant to be platform specific and we should add a version(ARM) block to test the ARM behaviour? https://github.com/D-Programming-GDC/GDC/blob/master/gcc/testsuite/gdc.test/runnable/test20.d#L595 https://github.com/D-Programming-GDC/GDC/blob/master/gcc/testsuite/gdc.test/runnable/testdstress.d#L209 (In reply to comment #2) > So D doesn't make any guarantees that casting va_list to a pointer is portable, > right? > > But what does that mean for the test suite? Change it to use the portable > va_arg or is that test meant to be platform specific and we should add a > version(ARM) block to test the ARM behaviour? > > https://github.com/D-Programming-GDC/GDC/blob/master/gcc/testsuite/gdc.test/runnable/test20.d#L595 > https://github.com/D-Programming-GDC/GDC/blob/master/gcc/testsuite/gdc.test/runnable/testdstress.d#L209 Both look fishy... how it is passing for 64bit, I do not know. |