http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56114
--- Comment #3 from Alexander Kobets <akobets at mail dot ru> 2013-01-26 14:30:42 UTC --- (In reply to comment #2) > Proposed patch: It is correcting this code, but break another. For example (-mcmodel=large): --cut here-- long* p1; long foo2 (void) { p1 = (long*)0x123; return 5; } --cut here-- $ x86_64-linux-gnu-gcc -c -mcmodel=large -save-temps l.c -O1 -masm=intel l.s: Assembler messages: l.s:10: Error: operand type mismatch for `movabs' $ cat l.s .file "l.c" .intel_syntax noprefix .text .globl foo2 .type foo2, @function foo2: .LFB0: .cfi_startproc mov eax, 291 movabs [OFFSET FLAT:p1], rax mov ax, 5 ret .cfi_endproc .LFE0: .size foo2, .-foo2 .comm p1,8,8 .ident "GCC: (GNU) 4.7.2" .section .note.GNU-stack,"",@progbits The instruction movabs [OFFSET FLAT:p1], rax before patch was without square brackets and normal compiled.