- 
                Notifications
    
You must be signed in to change notification settings  - Fork 15.1k
 
Closed
Labels
Description
test.c:
void test(void) {
    *(int *)0x80000000 = 0x123;
}Compile with: clang -target x86_64-unknown-linux-gnux32 -O1 -c test.c
objdump test.o --disassemble=test shows:
00000000 <test>:
   0:   c7 04 25 00 00 00 80    movl   $0x123,0xffffffff80000000
   7:   23 01 00 00 
   b:   c3                      retq 
It stores the value to address 0xffffffff80000000 instead of the expected 0x80000000.
Seems to only happen with optimizations enabled, and only if bit 32 is set in the address.