int main() {
  int a, b;
  int *p = &a;
  int *q = p += 5;
  if (q != p)
    return 1;
  if (q - &a != 5)
    return 2;
  if (p - &a != 5)
    return 3;
  p = &a;
  q = p -= 5;
  if (q != p)
    return 4;
  if (&a - q != 5)
    return 5;
  if (&a - p != 5)
    return 6;
  a = 10;
  b = a += 5;
  if (a != b)
    return 7;
  if (b != 15)
    return 8;
  if (a != 15)
    return 9;
  long l = 1099511627776;
  a = 10;
  a += l;
  if (a != 10)
    return 10;
  a = 10;
  a += 1099511627776;
  if (a != 10)
    return 11;
  a = 10;
  b = a -= 15;
  if (a != b)
    return 12;
  if (a + 5 != 0)
    return 13;
  if (b + 5 != 0)
    return 14;
  a = 10;
  b = a *= 1099511627776;
  if (a != 0)
    return 15;
  if (b != 0)
    return 16;
  a = 10;
  b = a /= 2;
  if (a != 5)
    return 17;
  if (b != 5)
    return 18;
  a = 1234;
  b = a %= 100;
  if (a != 34)
    return 19;
  if (b != 34)
    return 20;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
lea    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
add    $0x14,%rax
mov    %rax,-0x18(%rbp)
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     113d <main+0x3d>
movl   $0x1,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
mov    -0x20(%rbp),%rax
lea    -0x8(%rbp),%rcx
sub    %rcx,%rax
sar    $0x2,%rax
cmp    $0x5,%rax
je     1162 <main+0x62>
movl   $0x2,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
mov    -0x18(%rbp),%rax
lea    -0x8(%rbp),%rcx
sub    %rcx,%rax
sar    $0x2,%rax
cmp    $0x5,%rax
je     1187 <main+0x87>
movl   $0x3,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
lea    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffec,%rax
mov    %rax,-0x18(%rbp)
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     11b9 <main+0xb9>
movl   $0x4,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
mov    -0x20(%rbp),%rcx
lea    -0x8(%rbp),%rax
sub    %rcx,%rax
sar    $0x2,%rax
cmp    $0x5,%rax
je     11de <main+0xde>
movl   $0x5,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
mov    -0x18(%rbp),%rcx
lea    -0x8(%rbp),%rax
sub    %rcx,%rax
sar    $0x2,%rax
cmp    $0x5,%rax
je     1203 <main+0x103>
movl   $0x6,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
movl   $0xa,-0x8(%rbp)
mov    -0x8(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x8(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
je     122e <main+0x12e>
movl   $0x7,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
cmpl   $0xf,-0xc(%rbp)
je     1244 <main+0x144>
movl   $0x8,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
cmpl   $0xf,-0x8(%rbp)
je     125a <main+0x15a>
movl   $0x9,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
movabs $0x10000000000,%rax
mov    %rax,-0x28(%rbp)
movl   $0xa,-0x8(%rbp)
mov    -0x28(%rbp),%rcx
movslq -0x8(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
je     1293 <main+0x193>
movl   $0xa,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
movl   $0xa,-0x8(%rbp)
movslq -0x8(%rbp),%rax
movabs $0x10000000000,%rcx
add    %rcx,%rax
mov    %eax,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
je     12c4 <main+0x1c4>
movl   $0xb,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
movl   $0xa,-0x8(%rbp)
mov    -0x8(%rbp),%eax
sub    $0xf,%eax
mov    %eax,-0x8(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
je     12ef <main+0x1ef>
movl   $0xc,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
mov    -0x8(%rbp),%eax
add    $0x5,%eax
cmp    $0x0,%eax
je     130a <main+0x20a>
movl   $0xd,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
mov    -0xc(%rbp),%eax
add    $0x5,%eax
cmp    $0x0,%eax
je     1325 <main+0x225>
movl   $0xe,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
movl   $0xa,-0x8(%rbp)
movslq -0x8(%rbp),%rax
shl    $0x28,%rax
mov    %eax,-0x8(%rbp)
mov    %eax,-0xc(%rbp)
cmpl   $0x0,-0x8(%rbp)
je     1350 <main+0x250>
movl   $0xf,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
cmpl   $0x0,-0xc(%rbp)
je     1366 <main+0x266>
movl   $0x10,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
movl   $0xa,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x8(%rbp)
mov    %eax,-0xc(%rbp)
cmpl   $0x5,-0x8(%rbp)
je     1394 <main+0x294>
movl   $0x11,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
cmpl   $0x5,-0xc(%rbp)
je     13aa <main+0x2aa>
movl   $0x12,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
movl   $0x4d2,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
cmpl   $0x22,-0x8(%rbp)
je     13d8 <main+0x2d8>
movl   $0x13,-0x4(%rbp)
jmp    13e9 <main+0x2e9>
cmpl   $0x22,-0xc(%rbp)
je     13e9 <main+0x2e9>
movl   $0x14,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32*
%5 = alloca i32*
%6 = alloca i64
store i32 0, i32* %1
store i32* %2, i32** %4
%7 = load i32*, i32** %4
%8 = getelementptr inbounds i32, i32* %7, i64 5
store i32* %8, i32** %4
store i32* %8, i32** %5
%9 = load i32*, i32** %5
%10 = load i32*, i32** %4
%11 = icmp ne i32* %9, %10
br i1 %11, label %12, label %13
12: ; preds = %0
store i32 1, i32* %1
br label %133
13: ; preds = %0
%14 = load i32*, i32** %5
%15 = ptrtoint i32* %14 to i64
%16 = ptrtoint i32* %2 to i64
%17 = sub i64 %15, %16
%18 = sdiv exact i64 %17, 4
%19 = icmp ne i64 %18, 5
br i1 %19, label %20, label %21
20: ; preds = %13
store i32 2, i32* %1
br label %133
21: ; preds = %13
%22 = load i32*, i32** %4
%23 = ptrtoint i32* %22 to i64
%24 = ptrtoint i32* %2 to i64
%25 = sub i64 %23, %24
%26 = sdiv exact i64 %25, 4
%27 = icmp ne i64 %26, 5
br i1 %27, label %28, label %29
28: ; preds = %21
store i32 3, i32* %1
br label %133
29: ; preds = %21
store i32* %2, i32** %4
%30 = load i32*, i32** %4
%31 = getelementptr inbounds i32, i32* %30, i64 -5
store i32* %31, i32** %4
store i32* %31, i32** %5
%32 = load i32*, i32** %5
%33 = load i32*, i32** %4
%34 = icmp ne i32* %32, %33
br i1 %34, label %35, label %36
35: ; preds = %29
store i32 4, i32* %1
br label %133
36: ; preds = %29
%37 = load i32*, i32** %5
%38 = ptrtoint i32* %2 to i64
%39 = ptrtoint i32* %37 to i64
%40 = sub i64 %38, %39
%41 = sdiv exact i64 %40, 4
%42 = icmp ne i64 %41, 5
br i1 %42, label %43, label %44
43: ; preds = %36
store i32 5, i32* %1
br label %133
44: ; preds = %36
%45 = load i32*, i32** %4
%46 = ptrtoint i32* %2 to i64
%47 = ptrtoint i32* %45 to i64
%48 = sub i64 %46, %47
%49 = sdiv exact i64 %48, 4
%50 = icmp ne i64 %49, 5
br i1 %50, label %51, label %52
51: ; preds = %44
store i32 6, i32* %1
br label %133
52: ; preds = %44
store i32 10, i32* %2
%53 = load i32, i32* %2
%54 = add nsw i32 %53, 5
store i32 %54, i32* %2
store i32 %54, i32* %3
%55 = load i32, i32* %2
%56 = load i32, i32* %3
%57 = icmp ne i32 %55, %56
br i1 %57, label %58, label %59
58: ; preds = %52
store i32 7, i32* %1
br label %133
59: ; preds = %52
%60 = load i32, i32* %3
%61 = icmp ne i32 %60, 15
br i1 %61, label %62, label %63
62: ; preds = %59
store i32 8, i32* %1
br label %133
63: ; preds = %59
%64 = load i32, i32* %2
%65 = icmp ne i32 %64, 15
br i1 %65, label %66, label %67
66: ; preds = %63
store i32 9, i32* %1
br label %133
67: ; preds = %63
store i64 1099511627776, i64* %6
store i32 10, i32* %2
%68 = load i64, i64* %6
%69 = load i32, i32* %2
%70 = sext i32 %69 to i64
%71 = add nsw i64 %70, %68
%72 = trunc i64 %71 to i32
store i32 %72, i32* %2
%73 = load i32, i32* %2
%74 = icmp ne i32 %73, 10
br i1 %74, label %75, label %76
75: ; preds = %67
store i32 10, i32* %1
br label %133
76: ; preds = %67
store i32 10, i32* %2
%77 = load i32, i32* %2
%78 = sext i32 %77 to i64
%79 = add nsw i64 %78, 1099511627776
%80 = trunc i64 %79 to i32
store i32 %80, i32* %2
%81 = load i32, i32* %2
%82 = icmp ne i32 %81, 10
br i1 %82, label %83, label %84
83: ; preds = %76
store i32 11, i32* %1
br label %133
84: ; preds = %76
store i32 10, i32* %2
%85 = load i32, i32* %2
%86 = sub nsw i32 %85, 15
store i32 %86, i32* %2
store i32 %86, i32* %3
%87 = load i32, i32* %2
%88 = load i32, i32* %3
%89 = icmp ne i32 %87, %88
br i1 %89, label %90, label %91
90: ; preds = %84
store i32 12, i32* %1
br label %133
91: ; preds = %84
%92 = load i32, i32* %2
%93 = add nsw i32 %92, 5
%94 = icmp ne i32 %93, 0
br i1 %94, label %95, label %96
95: ; preds = %91
store i32 13, i32* %1
br label %133
96: ; preds = %91
%97 = load i32, i32* %3
%98 = add nsw i32 %97, 5
%99 = icmp ne i32 %98, 0
br i1 %99, label %100, label %101
100: ; preds = %96
store i32 14, i32* %1
br label %133
101: ; preds = %96
store i32 10, i32* %2
%102 = load i32, i32* %2
%103 = sext i32 %102 to i64
%104 = mul nsw i64 %103, 1099511627776
%105 = trunc i64 %104 to i32
store i32 %105, i32* %2
store i32 %105, i32* %3
%106 = load i32, i32* %2
%107 = icmp ne i32 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %101
store i32 15, i32* %1
br label %133
109: ; preds = %101
%110 = load i32, i32* %3
%111 = icmp ne i32 %110, 0
br i1 %111, label %112, label %113
112: ; preds = %109
store i32 16, i32* %1
br label %133
113: ; preds = %109
store i32 10, i32* %2
%114 = load i32, i32* %2
%115 = sdiv i32 %114, 2
store i32 %115, i32* %2
store i32 %115, i32* %3
%116 = load i32, i32* %2
%117 = icmp ne i32 %116, 5
br i1 %117, label %118, label %119
118: ; preds = %113
store i32 17, i32* %1
br label %133
119: ; preds = %113
%120 = load i32, i32* %3
%121 = icmp ne i32 %120, 5
br i1 %121, label %122, label %123
122: ; preds = %119
store i32 18, i32* %1
br label %133
123: ; preds = %119
store i32 1234, i32* %2
%124 = load i32, i32* %2
%125 = srem i32 %124, 100
store i32 %125, i32* %2
store i32 %125, i32* %3
%126 = load i32, i32* %2
%127 = icmp ne i32 %126, 34
br i1 %127, label %128, label %129
128: ; preds = %123
store i32 19, i32* %1
br label %133
129: ; preds = %123
%130 = load i32, i32* %3
%131 = icmp ne i32 %130, 34
br i1 %131, label %132, label %133
132: ; preds = %129
store i32 20, i32* %1
br label %133
133: ; preds = %12, %20, %28, %35, %43, %51, %58, %62, %66, %75, %83, %90, %95, %100, %108, %112, %118, %122, %128, %132, %129
%134 = load i32, i32* %1
ret i32 %134
}

LLVM IR (-O2):
define i32 @main() {
ret i32 0
}