When running gfortran on a 64-bit AMD Athlon64 Linux machine, the Fortran ALLOCATE statement does not align pointers on 16-byte boundaries. This means that allocated memory cannot be passed to assembly language routines that rely on 16-byte alignment (e.g. assembly language using SSE instructions like "movaps").
The demonstration below involves two files, the first one a Fortran program name try.f which allocates an array x. It calls a C function, shown in file sub.c, which returns the address of x, and prints a message saying whether or not the array is 16-byte aligned. % gfortran -v Using built-in specs. Target: x86_64-unknown-linux-gnu Configured with: ../gcc/configure --prefix=/var/tmp/gfortran-20050916/irun --enable-languages=c,f95 Thread model: posix gcc version 4.1.0 20050916 (experimental) % cat try.f real, allocatable :: x(:) integer*8 address, p, sixteen external address sixteen = 16 allocate (x(300000)) p = address(x) write (*,99) 'Address of x = ', p 99 format (1x,a,'0x',z16.16) if (mod(p,sixteen) .eq. 0) then write (*,*) 'x is aligned on a 16-byte boundary' else write (*,*) 'x is not aligned on a 16-byte boundary' end if end % cat sub.c unsigned long address_(void *x) { return (unsigned long)x; } % gfortran try.f sub.c % ./a.out Address of x = 0x00002AAAAB1CB028 x is not aligned on a 16-byte boundary -- Summary: gfortran ALLOCATE statement does not align objects on 16-byte boundary Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mick at nag dot co dot uk http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24261