http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56375
Bug #: 56375 Summary: SIGSEGV when assign SIMD variable to member of allocated structure Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: cj...@126.com The code: #include <malloc.h> typedef float v4 __attribute__((vector_size(sizeof(float)*4))); typedef struct IpuImage { v4 data[256*256]; } IpuImage; int main() { IpuImage * I = malloc(sizeof(IpuImage)); v4 color = {1, 0, 1, 0}; I->data[0] = color; return 0; } I use this to compile: gcc -o a a.c -std=gnu11 -march=native SIGSEGV happens at "I->data[0] = color" Then I tried to debug in assembly mode, following is the gdb's output: ┌──Register group: general─────────────────────────────────────────────────────┐ │eax 0xb7d29008 -1210937336 │ │ecx 0x101000 1052672 │ │edx 0xb7d29008 -1210937336 │ │ebx 0xb7fd8000 -1208123392 │ │esp 0xbffff370 0xbffff370 │ │ebp 0xbffff3a8 0xbffff3a8 │ │esi 0x0 0 │ │edi 0x0 0 │ │eip 0x804842a 0x804842a <main+46> │ │eflags 0x210282 [ SF IF RF ID ] │ cs 0x73 115 │ │ss 0x7b 123 │ └──────────────────────────────────────────────────────────────────────────────┘ │0x8048411 <main+21> mov %eax,0x2c(%esp) │ │0x8048415 <main+25> movaps 0x80484e0,%xmm0 │ │0x804841c <main+32> movaps %xmm0,0x10(%esp) │ │0x8048421 <main+37> mov 0x2c(%esp),%eax │ │0x8048425 <main+41> movaps 0x10(%esp),%xmm0 │ >│0x804842a <main+46> movaps %xmm0,(%eax) │ │0x804842d <main+49> mov $0x0,%eax │ │0x8048432 <main+54> leave │ │0x8048433 <main+55> ret │ │0x8048434 xchg %ax,%ax │ │0x8048436 xchg %ax,%ax │ │0x8048438 xchg %ax,%ax │ │0x804843a xchg %ax,%ax │ └───────────────────────────────────────────────────────────────────────────┘ child process 7781 In: main Line: ?? PC: 0x804842a (gdb) ni 0x08048402 in main () 0x08048405 in main () 0x0804840c in main () 0x08048411 in main () 0x08048415 in main () 0x0804841c in main () 0x08048421 in main () 0x08048425 in main () 0x0804842a in main () Program received signal SIGSEGV, Segmentation fault. 0x0804842a in main () (gdb) %eax is non-zero, showing that malloc succeeded, and SIGSEGV is occured at "movaps %xmm0,(%eax)"