Given #include <stdint.h> uint64_t val, *p; extern uint64_t xtr( uint64_t); uint64_t caller() { uint64_t x; p = &val; x = 12345123400L; *p = x; return xtr(x); } clang produces movq %rax, (%rcx) movabsq $12345123400, %rcx ## imm = 0x2DFD3A248 movq %rcx, (%rax) movabsq $12345123400, %rdi ## imm = 0x2DFD3A248 There was a thread about this bug in: http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-August/064535.html