------- Comment #4 from falk at debian dot org 2005-10-04 07:32 ------- (In reply to comment #3)
> Correct me if I wrong, but loading long from passed pointer to char minus 4 > is not correct too. You are right, I misread the example, the pointer that is cast to Foo* is actually correctly aligned. Here is a slightly clearer test case: typedef struct { long l; char p4; } Foo; void foo(char *fn) { Foo *p = (Foo *) (fn - 9); p->p4 = 1; } int main(int argc, char **argv) { #if defined(__alpha__) && defined(__linux__) # include <asm/sysinfo.h> # include <asm/unistd.h> syscall(__NR_osf_setsysinfo, SSI_NVPAIRS, (int[]){SSIN_UACPROC, UAC_SIGBUS | UAC_NOPRINT}, 1, 0, 0, 0); #endif Foo p; foo(((char *) &p) + 9); return 0; } This is very similar to a gcc 3.3 bug that disappeared in 3.4: http://bugs.debian.org/301983 -- falk at debian dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |UNCONFIRMED Resolution|INVALID | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24178