Bug#458745: arm-only miscompilation of alloca code
Package: gcc-4.2
Version: 4.2.2-4
Severity: important
/tmp/foo.c:
=============================================================================
#include <stdio.h>
#include <alloca.h>
#include <stdarg.h>
#define object void *
int VFUN_NARGS;
void *alloca_val;
struct cons {
object c_cdr;
object c_car;
};
#define Cnil 0
static void
foo(object first,...) {
va_list ap;
int narg = VFUN_NARGS;
struct cons *V1128;
object V1129;
va_start(ap,first);
V1129 =
!narg? Cnil : (alloca_val=alloca((narg)*sizeof(struct cons)+sizeof(object)),
({object _b=(void *)alloca_val;if (((unsigned long)_b)&sizeof(_b)) _b++;
{register struct cons *_p=(void *)_b;
{struct cons *_e=_p+(narg-1);
for (;_p<_e;_p++) {_p->c_car=({object _t=first;first=va_arg(ap,object);_t;});_p->c_cdr=(object)(_p+1);}}
_p->c_car=first;_p->c_cdr=Cnil;}_b;}));
va_end(ap);
V1128= V1129;
for (;V1128!=Cnil;V1128=V1128->c_cdr)
printf("%p\n",V1128->c_car);
}
int
main(int argc,char * argv[]) {
VFUN_NARGS=4;
foo(&argc,1,2,3);
return 0;
}
=============================================================================
i386 sid:
=============================================================================
cc -g /tmp/foo.c -o /tmp/foo
/tmp/foo
0xbf867bd0
0x1
0x2
0x3
=============================================================================
leisner dchroot sid:
=============================================================================
cc -g foo.c -o foo
./foo
0x18beed5d
Segmentation fault
=============================================================================
Take care,
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.20-gen
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash
Versions of packages gcc-4.2 depends on:
ii binutils 2.18.1~cvs20071027-1 The GNU assembler, linker and bina
ii cpp-4.2 4.2.2-4 The GNU C preprocessor
ii gcc-4.2-base 4.2.2-4 The GNU Compiler Collection (base
ii libc6 2.7-2 GNU C Library: Shared libraries
ii libgcc1 1:4.2.2-4 GCC support library
ii libgomp1 4.2.2-4 GCC OpenMP (GOMP) support library
Versions of packages gcc-4.2 recommends:
ii libc6-dev 2.7-2 GNU C Library: Development Librari
-- no debconf information
Reply to: