#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef unsigned long uintmax_t;
typedef unsigned char uint_least8_t;
typedef unsigned long uint_least64_t;
typedef unsigned int uint_least32_t;
typedef unsigned short uint_least16_t;
typedef unsigned char uint_fast8_t;
typedef unsigned long uint_fast64_t;
typedef unsigned long uint_fast32_t;
typedef unsigned long uint_fast16_t;
typedef unsigned char uint8_t;
typedef unsigned long uint64_t;
typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
typedef int sig_atomic_t;
typedef long intmax_t;
typedef char int_least8_t;
typedef long int_least64_t;
typedef int int_least32_t;
typedef short int_least16_t;
typedef char int_fast8_t;
typedef long int_fast64_t;
typedef long int_fast32_t;
typedef long int_fast16_t;
typedef char int8_t;
typedef long int64_t;
typedef int int32_t;
typedef short int16_t;

/* Variables and functions */
void check_types(void) {
  do {
    signed char a;
    int8_t *b = &a;
    int8_t c;
    signed char *d = &c;
  } while (0);
  do {
    short int a;
    int16_t *b = &a;
    int16_t c;
    short int *d = &c;
  } while (0);
  do {
    int a;
    int32_t *b = &a;
    int32_t c;
    int *d = &c;
  } while (0);
  do {
    long int a;
    int64_t *b = &a;
    int64_t c;
    long int *d = &c;
  } while (0);
  do {
    unsigned char a;
    uint8_t *b = &a;
    uint8_t c;
    unsigned char *d = &c;
  } while (0);
  do {
    short unsigned int a;
    uint16_t *b = &a;
    uint16_t c;
    short unsigned int *d = &c;
  } while (0);
  do {
    unsigned int a;
    uint32_t *b = &a;
    uint32_t c;
    unsigned int *d = &c;
  } while (0);
  do {
    long unsigned int a;
    uint64_t *b = &a;
    uint64_t c;
    long unsigned int *d = &c;
  } while (0);
  do {
    signed char a;
    int_least8_t *b = &a;
    int_least8_t c;
    signed char *d = &c;
  } while (0);
  do {
    short int a;
    int_least16_t *b = &a;
    int_least16_t c;
    short int *d = &c;
  } while (0);
  do {
    int a;
    int_least32_t *b = &a;
    int_least32_t c;
    int *d = &c;
  } while (0);
  do {
    long int a;
    int_least64_t *b = &a;
    int_least64_t c;
    long int *d = &c;
  } while (0);
  do {
    unsigned char a;
    uint_least8_t *b = &a;
    uint_least8_t c;
    unsigned char *d = &c;
  } while (0);
  do {
    short unsigned int a;
    uint_least16_t *b = &a;
    uint_least16_t c;
    short unsigned int *d = &c;
  } while (0);
  do {
    unsigned int a;
    uint_least32_t *b = &a;
    uint_least32_t c;
    unsigned int *d = &c;
  } while (0);
  do {
    long unsigned int a;
    uint_least64_t *b = &a;
    uint_least64_t c;
    long unsigned int *d = &c;
  } while (0);
  do {
    signed char a;
    int_fast8_t *b = &a;
    int_fast8_t c;
    signed char *d = &c;
  } while (0);
  do {
    long int a;
    int_fast16_t *b = &a;
    int_fast16_t c;
    long int *d = &c;
  } while (0);
  do {
    long int a;
    int_fast32_t *b = &a;
    int_fast32_t c;
    long int *d = &c;
  } while (0);
  do {
    long int a;
    int_fast64_t *b = &a;
    int_fast64_t c;
    long int *d = &c;
  } while (0);
  do {
    unsigned char a;
    uint_fast8_t *b = &a;
    uint_fast8_t c;
    unsigned char *d = &c;
  } while (0);
  do {
    long unsigned int a;
    uint_fast16_t *b = &a;
    uint_fast16_t c;
    long unsigned int *d = &c;
  } while (0);
  do {
    long unsigned int a;
    uint_fast32_t *b = &a;
    uint_fast32_t c;
    long unsigned int *d = &c;
  } while (0);
  do {
    long unsigned int a;
    uint_fast64_t *b = &a;
    uint_fast64_t c;
    long unsigned int *d = &c;
  } while (0);
  do {
    long int a;
    intptr_t *b = &a;
    intptr_t c;
    long int *d = &c;
  } while (0);
  do {
    long unsigned int a;
    uintptr_t *b = &a;
    uintptr_t c;
    long unsigned int *d = &c;
  } while (0);
  do {
    long int a;
    intmax_t *b = &a;
    intmax_t c;
    long int *d = &c;
  } while (0);
  do {
    long unsigned int a;
    uintmax_t *b = &a;
    uintmax_t c;
    long unsigned int *d = &c;
  } while (0);
  do {
    int a;
    sig_atomic_t *b = &a;
    sig_atomic_t c;
    int *d = &c;
  } while (0);
}


x86 assembly (clang, -O0):
<check_types>:
push   %rbp
mov    %rsp,%rbp
sub    $0x320,%rsp
lea    -0x1(%rbp),%rax
mov    %rax,-0x10(%rbp)
lea    -0x11(%rbp),%rax
mov    %rax,-0x20(%rbp)
jmp    1120 <check_types+0x20>
lea    -0x22(%rbp),%rax
mov    %rax,-0x30(%rbp)
lea    -0x32(%rbp),%rax
mov    %rax,-0x40(%rbp)
jmp    1135 <check_types+0x35>
lea    -0x44(%rbp),%rax
mov    %rax,-0x50(%rbp)
lea    -0x54(%rbp),%rax
mov    %rax,-0x60(%rbp)
jmp    114a <check_types+0x4a>
lea    -0x68(%rbp),%rax
mov    %rax,-0x70(%rbp)
lea    -0x78(%rbp),%rax
mov    %rax,-0x80(%rbp)
jmp    115f <check_types+0x5f>
lea    -0x81(%rbp),%rax
mov    %rax,-0x90(%rbp)
lea    -0x91(%rbp),%rax
mov    %rax,-0xa0(%rbp)
jmp    1180 <check_types+0x80>
lea    -0xa2(%rbp),%rax
mov    %rax,-0xb0(%rbp)
lea    -0xb2(%rbp),%rax
mov    %rax,-0xc0(%rbp)
jmp    11a1 <check_types+0xa1>
lea    -0xc4(%rbp),%rax
mov    %rax,-0xd0(%rbp)
lea    -0xd4(%rbp),%rax
mov    %rax,-0xe0(%rbp)
jmp    11c2 <check_types+0xc2>
lea    -0xe8(%rbp),%rax
mov    %rax,-0xf0(%rbp)
lea    -0xf8(%rbp),%rax
mov    %rax,-0x100(%rbp)
jmp    11e3 <check_types+0xe3>
lea    -0x101(%rbp),%rax
mov    %rax,-0x110(%rbp)
lea    -0x111(%rbp),%rax
mov    %rax,-0x120(%rbp)
jmp    1204 <check_types+0x104>
lea    -0x122(%rbp),%rax
mov    %rax,-0x130(%rbp)
lea    -0x132(%rbp),%rax
mov    %rax,-0x140(%rbp)
jmp    1225 <check_types+0x125>
lea    -0x144(%rbp),%rax
mov    %rax,-0x150(%rbp)
lea    -0x154(%rbp),%rax
mov    %rax,-0x160(%rbp)
jmp    1246 <check_types+0x146>
lea    -0x168(%rbp),%rax
mov    %rax,-0x170(%rbp)
lea    -0x178(%rbp),%rax
mov    %rax,-0x180(%rbp)
jmp    1267 <check_types+0x167>
lea    -0x181(%rbp),%rax
mov    %rax,-0x190(%rbp)
lea    -0x191(%rbp),%rax
mov    %rax,-0x1a0(%rbp)
jmp    1288 <check_types+0x188>
lea    -0x1a2(%rbp),%rax
mov    %rax,-0x1b0(%rbp)
lea    -0x1b2(%rbp),%rax
mov    %rax,-0x1c0(%rbp)
jmp    12a9 <check_types+0x1a9>
lea    -0x1c4(%rbp),%rax
mov    %rax,-0x1d0(%rbp)
lea    -0x1d4(%rbp),%rax
mov    %rax,-0x1e0(%rbp)
jmp    12ca <check_types+0x1ca>
lea    -0x1e8(%rbp),%rax
mov    %rax,-0x1f0(%rbp)
lea    -0x1f8(%rbp),%rax
mov    %rax,-0x200(%rbp)
jmp    12eb <check_types+0x1eb>
lea    -0x201(%rbp),%rax
mov    %rax,-0x210(%rbp)
lea    -0x211(%rbp),%rax
mov    %rax,-0x220(%rbp)
jmp    130c <check_types+0x20c>
lea    -0x228(%rbp),%rax
mov    %rax,-0x230(%rbp)
lea    -0x238(%rbp),%rax
mov    %rax,-0x240(%rbp)
jmp    132d <check_types+0x22d>
lea    -0x248(%rbp),%rax
mov    %rax,-0x250(%rbp)
lea    -0x258(%rbp),%rax
mov    %rax,-0x260(%rbp)
jmp    134e <check_types+0x24e>
lea    -0x268(%rbp),%rax
mov    %rax,-0x270(%rbp)
lea    -0x278(%rbp),%rax
mov    %rax,-0x280(%rbp)
jmp    136f <check_types+0x26f>
lea    -0x281(%rbp),%rax
mov    %rax,-0x290(%rbp)
lea    -0x291(%rbp),%rax
mov    %rax,-0x2a0(%rbp)
jmp    1390 <check_types+0x290>
lea    -0x2a8(%rbp),%rax
mov    %rax,-0x2b0(%rbp)
lea    -0x2b8(%rbp),%rax
mov    %rax,-0x2c0(%rbp)
jmp    13b1 <check_types+0x2b1>
lea    -0x2c8(%rbp),%rax
mov    %rax,-0x2d0(%rbp)
lea    -0x2d8(%rbp),%rax
mov    %rax,-0x2e0(%rbp)
jmp    13d2 <check_types+0x2d2>
lea    -0x2e8(%rbp),%rax
mov    %rax,-0x2f0(%rbp)
lea    -0x2f8(%rbp),%rax
mov    %rax,-0x300(%rbp)
jmp    13f3 <check_types+0x2f3>
lea    -0x308(%rbp),%rax
mov    %rax,-0x310(%rbp)
lea    -0x318(%rbp),%rax
mov    %rax,-0x320(%rbp)
jmp    1414 <check_types+0x314>
lea    -0x328(%rbp),%rax
mov    %rax,-0x330(%rbp)
lea    -0x338(%rbp),%rax
mov    %rax,-0x340(%rbp)
jmp    1435 <check_types+0x335>
lea    -0x348(%rbp),%rax
mov    %rax,-0x350(%rbp)
lea    -0x358(%rbp),%rax
mov    %rax,-0x360(%rbp)
jmp    1456 <check_types+0x356>
lea    -0x368(%rbp),%rax
mov    %rax,-0x370(%rbp)
lea    -0x378(%rbp),%rax
mov    %rax,-0x380(%rbp)
jmp    1477 <check_types+0x377>
lea    -0x384(%rbp),%rax
mov    %rax,-0x390(%rbp)
lea    -0x394(%rbp),%rax
mov    %rax,-0x3a0(%rbp)
add    $0x320,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_types>:
ret

LLVM IR (-O0):
define void @check_types() {
%1 = alloca i8
%2 = alloca i8*
%3 = alloca i8
%4 = alloca i8*
%5 = alloca i16
%6 = alloca i16*
%7 = alloca i16
%8 = alloca i16*
%9 = alloca i32
%10 = alloca i32*
%11 = alloca i32
%12 = alloca i32*
%13 = alloca i64
%14 = alloca i64*
%15 = alloca i64
%16 = alloca i64*
%17 = alloca i8
%18 = alloca i8*
%19 = alloca i8
%20 = alloca i8*
%21 = alloca i16
%22 = alloca i16*
%23 = alloca i16
%24 = alloca i16*
%25 = alloca i32
%26 = alloca i32*
%27 = alloca i32
%28 = alloca i32*
%29 = alloca i64
%30 = alloca i64*
%31 = alloca i64
%32 = alloca i64*
%33 = alloca i8
%34 = alloca i8*
%35 = alloca i8
%36 = alloca i8*
%37 = alloca i16
%38 = alloca i16*
%39 = alloca i16
%40 = alloca i16*
%41 = alloca i32
%42 = alloca i32*
%43 = alloca i32
%44 = alloca i32*
%45 = alloca i64
%46 = alloca i64*
%47 = alloca i64
%48 = alloca i64*
%49 = alloca i8
%50 = alloca i8*
%51 = alloca i8
%52 = alloca i8*
%53 = alloca i16
%54 = alloca i16*
%55 = alloca i16
%56 = alloca i16*
%57 = alloca i32
%58 = alloca i32*
%59 = alloca i32
%60 = alloca i32*
%61 = alloca i64
%62 = alloca i64*
%63 = alloca i64
%64 = alloca i64*
%65 = alloca i8
%66 = alloca i8*
%67 = alloca i8
%68 = alloca i8*
%69 = alloca i64
%70 = alloca i64*
%71 = alloca i64
%72 = alloca i64*
%73 = alloca i64
%74 = alloca i64*
%75 = alloca i64
%76 = alloca i64*
%77 = alloca i64
%78 = alloca i64*
%79 = alloca i64
%80 = alloca i64*
%81 = alloca i8
%82 = alloca i8*
%83 = alloca i8
%84 = alloca i8*
%85 = alloca i64
%86 = alloca i64*
%87 = alloca i64
%88 = alloca i64*
%89 = alloca i64
%90 = alloca i64*
%91 = alloca i64
%92 = alloca i64*
%93 = alloca i64
%94 = alloca i64*
%95 = alloca i64
%96 = alloca i64*
%97 = alloca i64
%98 = alloca i64*
%99 = alloca i64
%100 = alloca i64*
%101 = alloca i64
%102 = alloca i64*
%103 = alloca i64
%104 = alloca i64*
%105 = alloca i64
%106 = alloca i64*
%107 = alloca i64
%108 = alloca i64*
%109 = alloca i64
%110 = alloca i64*
%111 = alloca i64
%112 = alloca i64*
%113 = alloca i32
%114 = alloca i32*
%115 = alloca i32
%116 = alloca i32*
br label %117
117: ; preds = %0
store i8* %1, i8** %2
store i8* %3, i8** %4
br label %118
118: ; preds = %117
br label %119
119: ; preds = %118
store i16* %5, i16** %6
store i16* %7, i16** %8
br label %120
120: ; preds = %119
br label %121
121: ; preds = %120
store i32* %9, i32** %10
store i32* %11, i32** %12
br label %122
122: ; preds = %121
br label %123
123: ; preds = %122
store i64* %13, i64** %14
store i64* %15, i64** %16
br label %124
124: ; preds = %123
br label %125
125: ; preds = %124
store i8* %17, i8** %18
store i8* %19, i8** %20
br label %126
126: ; preds = %125
br label %127
127: ; preds = %126
store i16* %21, i16** %22
store i16* %23, i16** %24
br label %128
128: ; preds = %127
br label %129
129: ; preds = %128
store i32* %25, i32** %26
store i32* %27, i32** %28
br label %130
130: ; preds = %129
br label %131
131: ; preds = %130
store i64* %29, i64** %30
store i64* %31, i64** %32
br label %132
132: ; preds = %131
br label %133
133: ; preds = %132
store i8* %33, i8** %34
store i8* %35, i8** %36
br label %134
134: ; preds = %133
br label %135
135: ; preds = %134
store i16* %37, i16** %38
store i16* %39, i16** %40
br label %136
136: ; preds = %135
br label %137
137: ; preds = %136
store i32* %41, i32** %42
store i32* %43, i32** %44
br label %138
138: ; preds = %137
br label %139
139: ; preds = %138
store i64* %45, i64** %46
store i64* %47, i64** %48
br label %140
140: ; preds = %139
br label %141
141: ; preds = %140
store i8* %49, i8** %50
store i8* %51, i8** %52
br label %142
142: ; preds = %141
br label %143
143: ; preds = %142
store i16* %53, i16** %54
store i16* %55, i16** %56
br label %144
144: ; preds = %143
br label %145
145: ; preds = %144
store i32* %57, i32** %58
store i32* %59, i32** %60
br label %146
146: ; preds = %145
br label %147
147: ; preds = %146
store i64* %61, i64** %62
store i64* %63, i64** %64
br label %148
148: ; preds = %147
br label %149
149: ; preds = %148
store i8* %65, i8** %66
store i8* %67, i8** %68
br label %150
150: ; preds = %149
br label %151
151: ; preds = %150
store i64* %69, i64** %70
store i64* %71, i64** %72
br label %152
152: ; preds = %151
br label %153
153: ; preds = %152
store i64* %73, i64** %74
store i64* %75, i64** %76
br label %154
154: ; preds = %153
br label %155
155: ; preds = %154
store i64* %77, i64** %78
store i64* %79, i64** %80
br label %156
156: ; preds = %155
br label %157
157: ; preds = %156
store i8* %81, i8** %82
store i8* %83, i8** %84
br label %158
158: ; preds = %157
br label %159
159: ; preds = %158
store i64* %85, i64** %86
store i64* %87, i64** %88
br label %160
160: ; preds = %159
br label %161
161: ; preds = %160
store i64* %89, i64** %90
store i64* %91, i64** %92
br label %162
162: ; preds = %161
br label %163
163: ; preds = %162
store i64* %93, i64** %94
store i64* %95, i64** %96
br label %164
164: ; preds = %163
br label %165
165: ; preds = %164
store i64* %97, i64** %98
store i64* %99, i64** %100
br label %166
166: ; preds = %165
br label %167
167: ; preds = %166
store i64* %101, i64** %102
store i64* %103, i64** %104
br label %168
168: ; preds = %167
br label %169
169: ; preds = %168
store i64* %105, i64** %106
store i64* %107, i64** %108
br label %170
170: ; preds = %169
br label %171
171: ; preds = %170
store i64* %109, i64** %110
store i64* %111, i64** %112
br label %172
172: ; preds = %171
br label %173
173: ; preds = %172
store i32* %113, i32** %114
store i32* %115, i32** %116
br label %174
174: ; preds = %173
ret void
}

LLVM IR (-O2):
define void @check_types() {
ret void
}