int main() {
  _Bool b;
  char c;
  unsigned char uc;
  short s;
  unsigned short us;
  unsigned short us_2;
  int i;
  unsigned int ui;
  long l;
  unsigned long ul;
  int neg_one = 4294967295;
  c = neg_one;
  if (c != neg_one)
    return 1;
  s = neg_one;
  if (s != neg_one)
    return 2;
  if (s == 65535)
    return 3;
  us = neg_one;
  if (us == neg_one)
    return 4;
  if (us != 65535)
    return 5;
  s = neg_one;
  us_2 = s;
  if (us != 65535)
    return 6;
  if (us != us_2)
    return 7;
  ui = neg_one;
  if (ui != 4294967295)
    return 8;
  s = neg_one;
  ui = s;
  if (ui != 4294967295)
    return 9;
  us = neg_one;
  ui = us;
  if (ui != 65535)
    return 9;
  s = neg_one;
  ui = s;
  i = ui;
  if (i != neg_one)
    return 10;
  c = neg_one;
  l = c;
  if (l + 1 != 0)
    return 11;
  s = neg_one;
  l = s;
  if (l + 1 != 0)
    return 12;
  l = neg_one;
  if (l + 1 != 0)
    return 13;
  char c1 = 30, c2 = 40, c3 = 10, c4;
  c4 = (c1 * c2) / c3;
  if (c4 != 120)
    return 14;
  unsigned short us1 = 30, us2 = 40, us3 = 10, us4;
  us1 = 30;
  us2 = 40;
  us3 = 10;
  us4 = (us1 * us2) / us3;
  if (us4 != 120)
    return 15;
  long l1 = 1073741824, i1;
  l1 = l1 + l1 + l1 + l1;
  if (l1 * 2 / 8 != 1073741824)
    return 16;
  int i2;
  unsigned int ui2;
  i2 = 2 * neg_one;
  ui2 = 1;
  if (i2 + ui2 != 4294967295)
    return 17;
  long l2;
  int i3;
  l2 = 2147483644;
  i3 = 4;
  if (i3 * l2 / i3 != 2147483644)
    return 18;
  long l3 = 100;
  unsigned int i4 = 100;
  if (l3 != i4) {
    return 20;
  }
  if (i4 != l3) {
    return 21;
  }
  b = 0;
  if (b)
    return 19;
  b = 10;
  if (b) {
    b = i3;
    if (b) {
      return 0;
    }
  }
  return 1;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movl   $0xffffffff,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %al,-0x6(%rbp)
movsbl -0x6(%rbp),%eax
cmp    -0x2c(%rbp),%eax
je     1131 <main+0x31>
movl   $0x1,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %ax,-0xa(%rbp)
movswl -0xa(%rbp),%eax
cmp    -0x2c(%rbp),%eax
je     1151 <main+0x51>
movl   $0x2,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movswl -0xa(%rbp),%eax
cmp    $0xffff,%eax
jne    116c <main+0x6c>
movl   $0x3,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %ax,-0xc(%rbp)
movzwl -0xc(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jne    118c <main+0x8c>
movl   $0x4,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movzwl -0xc(%rbp),%eax
cmp    $0xffff,%eax
je     11a7 <main+0xa7>
movl   $0x5,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %ax,-0xa(%rbp)
mov    -0xa(%rbp),%ax
mov    %ax,-0xe(%rbp)
movzwl -0xc(%rbp),%eax
cmp    $0xffff,%eax
je     11d1 <main+0xd1>
movl   $0x6,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movzwl -0xc(%rbp),%eax
movzwl -0xe(%rbp),%ecx
cmp    %ecx,%eax
je     11ed <main+0xed>
movl   $0x7,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    $0xffffffff,%ecx
cmp    %rcx,%rax
je     1210 <main+0x110>
movl   $0x8,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %ax,-0xa(%rbp)
movswl -0xa(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    $0xffffffff,%ecx
cmp    %rcx,%rax
je     123b <main+0x13b>
movl   $0x9,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %ax,-0xc(%rbp)
movzwl -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0xffff,-0x18(%rbp)
je     1262 <main+0x162>
movl   $0x9,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %ax,-0xa(%rbp)
movswl -0xa(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x2c(%rbp),%eax
je     128e <main+0x18e>
movl   $0xa,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %al,-0x6(%rbp)
movsbq -0x6(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    $0x0,%rax
je     12bb <main+0x1bb>
movl   $0xb,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
mov    %ax,-0xa(%rbp)
movswq -0xa(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    $0x0,%rax
je     12e9 <main+0x1e9>
movl   $0xc,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movslq -0x2c(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    $0x0,%rax
je     130f <main+0x20f>
movl   $0xd,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movb   $0x1e,-0x2d(%rbp)
movb   $0x28,-0x2e(%rbp)
movb   $0xa,-0x2f(%rbp)
movsbl -0x2d(%rbp),%eax
movsbl -0x2e(%rbp),%ecx
imul   %ecx,%eax
movsbl -0x2f(%rbp),%ecx
cltd
idiv   %ecx
mov    %al,-0x30(%rbp)
movsbl -0x30(%rbp),%eax
cmp    $0x78,%eax
je     1349 <main+0x249>
movl   $0xe,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movw   $0x1e,-0x32(%rbp)
movw   $0x28,-0x34(%rbp)
movw   $0xa,-0x36(%rbp)
movw   $0x1e,-0x32(%rbp)
movw   $0x28,-0x34(%rbp)
movw   $0xa,-0x36(%rbp)
movzwl -0x32(%rbp),%eax
movzwl -0x34(%rbp),%ecx
imul   %ecx,%eax
movzwl -0x36(%rbp),%ecx
cltd
idiv   %ecx
mov    %ax,-0x38(%rbp)
movzwl -0x38(%rbp),%eax
cmp    $0x78,%eax
je     139c <main+0x29c>
movl   $0xf,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movq   $0x40000000,-0x40(%rbp)
40
mov    -0x40(%rbp),%rax
add    -0x40(%rbp),%rax
add    -0x40(%rbp),%rax
add    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
shl    $0x1,%rax
mov    $0x8,%ecx
cqto
idiv   %rcx
cmp    $0x40000000,%rax
je     13e2 <main+0x2e2>
movl   $0x10,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x2c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x4c(%rbp)
movl   $0x1,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x50(%rbp),%eax
mov    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rcx,%rax
je     1414 <main+0x314>
movl   $0x11,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movq   $0x7ffffffc,-0x58(%rbp)
7f
movl   $0x4,-0x5c(%rbp)
movslq -0x5c(%rbp),%rax
imul   -0x58(%rbp),%rax
movslq -0x5c(%rbp),%rcx
cqto
idiv   %rcx
cmp    $0x7ffffffc,%rax
je     144d <main+0x34d>
movl   $0x12,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movq   $0x64,-0x68(%rbp)
movl   $0x64,-0x6c(%rbp)
mov    -0x68(%rbp),%rax
mov    -0x6c(%rbp),%ecx
cmp    %rcx,%rax
je     1478 <main+0x378>
movl   $0x14,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%rax
je     1491 <main+0x391>
movl   $0x15,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movb   $0x0,-0x5(%rbp)
testb  $0x1,-0x5(%rbp)
je     14ab <main+0x3ab>
movl   $0x13,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
movb   $0x1,-0x5(%rbp)
testb  $0x1,-0x5(%rbp)
je     14e0 <main+0x3e0>
cmpl   $0x0,-0x5c(%rbp)
setne  %al
and    $0x1,%al
mov    %al,-0x5(%rbp)
testb  $0x1,-0x5(%rbp)
je     14db <main+0x3db>
movl   $0x0,-0x4(%rbp)
jmp    14e7 <main+0x3e7>
jmp    14e0 <main+0x3e0>
movl   $0x1,-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 i8
%3 = alloca i8
%4 = alloca i8
%5 = alloca i16
%6 = alloca i16
%7 = alloca i16
%8 = alloca i32
%9 = alloca i32
%10 = alloca i64
%11 = alloca i64
%12 = alloca i32
%13 = alloca i8
%14 = alloca i8
%15 = alloca i8
%16 = alloca i8
%17 = alloca i16
%18 = alloca i16
%19 = alloca i16
%20 = alloca i16
%21 = alloca i64
%22 = alloca i64
%23 = alloca i32
%24 = alloca i32
%25 = alloca i64
%26 = alloca i32
%27 = alloca i64
%28 = alloca i32
store i32 0, i32* %1
store i32 -1, i32* %12
%29 = load i32, i32* %12
%30 = trunc i32 %29 to i8
store i8 %30, i8* %3
%31 = load i8, i8* %3
%32 = sext i8 %31 to i32
%33 = load i32, i32* %12
%34 = icmp ne i32 %32, %33
br i1 %34, label %35, label %36
35: ; preds = %0
store i32 1, i32* %1
br label %223
36: ; preds = %0
%37 = load i32, i32* %12
%38 = trunc i32 %37 to i16
store i16 %38, i16* %5
%39 = load i16, i16* %5
%40 = sext i16 %39 to i32
%41 = load i32, i32* %12
%42 = icmp ne i32 %40, %41
br i1 %42, label %43, label %44
43: ; preds = %36
store i32 2, i32* %1
br label %223
44: ; preds = %36
%45 = load i16, i16* %5
%46 = sext i16 %45 to i32
%47 = icmp eq i32 %46, 65535
br i1 %47, label %48, label %49
48: ; preds = %44
store i32 3, i32* %1
br label %223
49: ; preds = %44
%50 = load i32, i32* %12
%51 = trunc i32 %50 to i16
store i16 %51, i16* %6
%52 = load i16, i16* %6
%53 = zext i16 %52 to i32
%54 = load i32, i32* %12
%55 = icmp eq i32 %53, %54
br i1 %55, label %56, label %57
56: ; preds = %49
store i32 4, i32* %1
br label %223
57: ; preds = %49
%58 = load i16, i16* %6
%59 = zext i16 %58 to i32
%60 = icmp ne i32 %59, 65535
br i1 %60, label %61, label %62
61: ; preds = %57
store i32 5, i32* %1
br label %223
62: ; preds = %57
%63 = load i32, i32* %12
%64 = trunc i32 %63 to i16
store i16 %64, i16* %5
%65 = load i16, i16* %5
store i16 %65, i16* %7
%66 = load i16, i16* %6
%67 = zext i16 %66 to i32
%68 = icmp ne i32 %67, 65535
br i1 %68, label %69, label %70
69: ; preds = %62
store i32 6, i32* %1
br label %223
70: ; preds = %62
%71 = load i16, i16* %6
%72 = zext i16 %71 to i32
%73 = load i16, i16* %7
%74 = zext i16 %73 to i32
%75 = icmp ne i32 %72, %74
br i1 %75, label %76, label %77
76: ; preds = %70
store i32 7, i32* %1
br label %223
77: ; preds = %70
%78 = load i32, i32* %12
store i32 %78, i32* %9
%79 = load i32, i32* %9
%80 = zext i32 %79 to i64
%81 = icmp ne i64 %80, 4294967295
br i1 %81, label %82, label %83
82: ; preds = %77
store i32 8, i32* %1
br label %223
83: ; preds = %77
%84 = load i32, i32* %12
%85 = trunc i32 %84 to i16
store i16 %85, i16* %5
%86 = load i16, i16* %5
%87 = sext i16 %86 to i32
store i32 %87, i32* %9
%88 = load i32, i32* %9
%89 = zext i32 %88 to i64
%90 = icmp ne i64 %89, 4294967295
br i1 %90, label %91, label %92
91: ; preds = %83
store i32 9, i32* %1
br label %223
92: ; preds = %83
%93 = load i32, i32* %12
%94 = trunc i32 %93 to i16
store i16 %94, i16* %6
%95 = load i16, i16* %6
%96 = zext i16 %95 to i32
store i32 %96, i32* %9
%97 = load i32, i32* %9
%98 = icmp ne i32 %97, 65535
br i1 %98, label %99, label %100
99: ; preds = %92
store i32 9, i32* %1
br label %223
100: ; preds = %92
%101 = load i32, i32* %12
%102 = trunc i32 %101 to i16
store i16 %102, i16* %5
%103 = load i16, i16* %5
%104 = sext i16 %103 to i32
store i32 %104, i32* %9
%105 = load i32, i32* %9
store i32 %105, i32* %8
%106 = load i32, i32* %8
%107 = load i32, i32* %12
%108 = icmp ne i32 %106, %107
br i1 %108, label %109, label %110
109: ; preds = %100
store i32 10, i32* %1
br label %223
110: ; preds = %100
%111 = load i32, i32* %12
%112 = trunc i32 %111 to i8
store i8 %112, i8* %3
%113 = load i8, i8* %3
%114 = sext i8 %113 to i64
store i64 %114, i64* %10
%115 = load i64, i64* %10
%116 = add nsw i64 %115, 1
%117 = icmp ne i64 %116, 0
br i1 %117, label %118, label %119
118: ; preds = %110
store i32 11, i32* %1
br label %223
119: ; preds = %110
%120 = load i32, i32* %12
%121 = trunc i32 %120 to i16
store i16 %121, i16* %5
%122 = load i16, i16* %5
%123 = sext i16 %122 to i64
store i64 %123, i64* %10
%124 = load i64, i64* %10
%125 = add nsw i64 %124, 1
%126 = icmp ne i64 %125, 0
br i1 %126, label %127, label %128
127: ; preds = %119
store i32 12, i32* %1
br label %223
128: ; preds = %119
%129 = load i32, i32* %12
%130 = sext i32 %129 to i64
store i64 %130, i64* %10
%131 = load i64, i64* %10
%132 = add nsw i64 %131, 1
%133 = icmp ne i64 %132, 0
br i1 %133, label %134, label %135
134: ; preds = %128
store i32 13, i32* %1
br label %223
135: ; preds = %128
store i8 30, i8* %13
store i8 40, i8* %14
store i8 10, i8* %15
%136 = load i8, i8* %13
%137 = sext i8 %136 to i32
%138 = load i8, i8* %14
%139 = sext i8 %138 to i32
%140 = mul nsw i32 %137, %139
%141 = load i8, i8* %15
%142 = sext i8 %141 to i32
%143 = sdiv i32 %140, %142
%144 = trunc i32 %143 to i8
store i8 %144, i8* %16
%145 = load i8, i8* %16
%146 = sext i8 %145 to i32
%147 = icmp ne i32 %146, 120
br i1 %147, label %148, label %149
148: ; preds = %135
store i32 14, i32* %1
br label %223
149: ; preds = %135
store i16 30, i16* %17
store i16 40, i16* %18
store i16 10, i16* %19
store i16 30, i16* %17
store i16 40, i16* %18
store i16 10, i16* %19
%150 = load i16, i16* %17
%151 = zext i16 %150 to i32
%152 = load i16, i16* %18
%153 = zext i16 %152 to i32
%154 = mul nsw i32 %151, %153
%155 = load i16, i16* %19
%156 = zext i16 %155 to i32
%157 = sdiv i32 %154, %156
%158 = trunc i32 %157 to i16
store i16 %158, i16* %20
%159 = load i16, i16* %20
%160 = zext i16 %159 to i32
%161 = icmp ne i32 %160, 120
br i1 %161, label %162, label %163
162: ; preds = %149
store i32 15, i32* %1
br label %223
163: ; preds = %149
store i64 1073741824, i64* %21
%164 = load i64, i64* %21
%165 = load i64, i64* %21
%166 = add nsw i64 %164, %165
%167 = load i64, i64* %21
%168 = add nsw i64 %166, %167
%169 = load i64, i64* %21
%170 = add nsw i64 %168, %169
store i64 %170, i64* %21
%171 = load i64, i64* %21
%172 = mul nsw i64 %171, 2
%173 = sdiv i64 %172, 8
%174 = icmp ne i64 %173, 1073741824
br i1 %174, label %175, label %176
175: ; preds = %163
store i32 16, i32* %1
br label %223
176: ; preds = %163
%177 = load i32, i32* %12
%178 = mul nsw i32 2, %177
store i32 %178, i32* %23
store i32 1, i32* %24
%179 = load i32, i32* %23
%180 = load i32, i32* %24
%181 = add i32 %179, %180
%182 = zext i32 %181 to i64
%183 = icmp ne i64 %182, 4294967295
br i1 %183, label %184, label %185
184: ; preds = %176
store i32 17, i32* %1
br label %223
185: ; preds = %176
store i64 2147483644, i64* %25
store i32 4, i32* %26
%186 = load i32, i32* %26
%187 = sext i32 %186 to i64
%188 = load i64, i64* %25
%189 = mul nsw i64 %187, %188
%190 = load i32, i32* %26
%191 = sext i32 %190 to i64
%192 = sdiv i64 %189, %191
%193 = icmp ne i64 %192, 2147483644
br i1 %193, label %194, label %195
194: ; preds = %185
store i32 18, i32* %1
br label %223
195: ; preds = %185
store i64 100, i64* %27
store i32 100, i32* %28
%196 = load i64, i64* %27
%197 = load i32, i32* %28
%198 = zext i32 %197 to i64
%199 = icmp ne i64 %196, %198
br i1 %199, label %200, label %201
200: ; preds = %195
store i32 20, i32* %1
br label %223
201: ; preds = %195
%202 = load i32, i32* %28
%203 = zext i32 %202 to i64
%204 = load i64, i64* %27
%205 = icmp ne i64 %203, %204
br i1 %205, label %206, label %207
206: ; preds = %201
store i32 21, i32* %1
br label %223
207: ; preds = %201
store i8 0, i8* %2
%208 = load i8, i8* %2
%209 = trunc i8 %208 to i1
br i1 %209, label %210, label %211
210: ; preds = %207
store i32 19, i32* %1
br label %223
211: ; preds = %207
store i8 1, i8* %2
%212 = load i8, i8* %2
%213 = trunc i8 %212 to i1
br i1 %213, label %214, label %222
214: ; preds = %211
%215 = load i32, i32* %26
%216 = icmp ne i32 %215, 0
%217 = zext i1 %216 to i8
store i8 %217, i8* %2
%218 = load i8, i8* %2
%219 = trunc i8 %218 to i1
br i1 %219, label %220, label %221
220: ; preds = %214
store i32 0, i32* %1
br label %223
221: ; preds = %214
br label %222
222: ; preds = %221, %211
store i32 1, i32* %1
br label %223
223: ; preds = %222, %220, %210, %206, %200, %194, %184, %175, %162, %148, %134, %127, %118, %109, %99, %91, %82, %76, %69, %61, %56, %48, %43, %35
%224 = load i32, i32* %1
ret i32 %224
}

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