#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 */

/* Variables and functions */
int /*<<< orphan*/ arrow();
int /*<<< orphan*/ assign();
int /*<<< orphan*/ bitfield_basic();
int /*<<< orphan*/ bitfield_initializer();
int /*<<< orphan*/ bitfield_mix();
int /*<<< orphan*/ bitfield_union();
int /*<<< orphan*/ bitfield_unnamed();
int /*<<< orphan*/ empty_struct();
int /*<<< orphan*/ flexible_member();
int /*<<< orphan*/ incomplete();
int /*<<< orphan*/ print(char *);
int /*<<< orphan*/ t1();
int /*<<< orphan*/ t10();
int /*<<< orphan*/ t11();
int /*<<< orphan*/ t12();
int /*<<< orphan*/ t13();
int /*<<< orphan*/ t14();
int /*<<< orphan*/ t2();
int /*<<< orphan*/ t3();
int /*<<< orphan*/ t4();
int /*<<< orphan*/ t5();
int /*<<< orphan*/ t6();
int /*<<< orphan*/ t7();
int /*<<< orphan*/ t8();
int /*<<< orphan*/ t9();
int /*<<< orphan*/ test_offsetof();
int /*<<< orphan*/ unnamed();
void testmain() {
  print("struct");
  t1();
  t2();
  t3();
  t4();
  t5();
  t6();
  t7();
  t8();
  t9();
  t10();
  t11();
  t12();
  t13();
  t14();
  unnamed();
  assign();
  arrow();
  incomplete();
  bitfield_basic();
  bitfield_mix();
  bitfield_union();
  bitfield_unnamed();
  bitfield_initializer();
  test_offsetof();
  flexible_member();
  empty_struct();
}


x86 assembly (clang, -O0):
<testmain>:
push   %rbp
mov    %rsp,%rbp
lea    0xd45(%rip),%rdi
call   10f0 <print@plt>
mov    $0x0,%al
call   10a0 <t1@plt>
mov    $0x0,%al
call   1160 <t2@plt>
mov    $0x0,%al
call   10b0 <t3@plt>
mov    $0x0,%al
call   1170 <t4@plt>
mov    $0x0,%al
call   10c0 <t5@plt>
mov    $0x0,%al
call   1180 <t6@plt>
mov    $0x0,%al
call   10d0 <t7@plt>
mov    $0x0,%al
call   1190 <t8@plt>
mov    $0x0,%al
call   10e0 <t9@plt>
mov    $0x0,%al
call   1120 <t10@plt>
mov    $0x0,%al
call   1080 <t11@plt>
mov    $0x0,%al
call   1130 <t12@plt>
mov    $0x0,%al
call   1070 <t13@plt>
mov    $0x0,%al
call   1140 <t14@plt>
mov    $0x0,%al
call   1060 <unnamed@plt>
mov    $0x0,%al
call   11b0 <assign@plt>
mov    $0x0,%al
call   1100 <arrow@plt>
mov    $0x0,%al
call   11c0 <incomplete@plt>
mov    $0x0,%al
call   1150 <bitfield_basic@plt>
mov    $0x0,%al
call   1090 <bitfield_mix@plt>
mov    $0x0,%al
call   1110 <bitfield_union@plt>
mov    $0x0,%al
call   11d0 <bitfield_unnamed@plt>
mov    $0x0,%al
call   11a0 <bitfield_initializer@plt>
mov    $0x0,%al
call   1030 <test_offsetof@plt>
mov    $0x0,%al
call   1040 <flexible_member@plt>
mov    $0x0,%al
call   1050 <empty_struct@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<testmain>:
push   %rax
lea    0xd48(%rip),%rdi
call   10f0 <print@plt>
xor    %eax,%eax
call   10a0 <t1@plt>
xor    %eax,%eax
call   1160 <t2@plt>
xor    %eax,%eax
call   10b0 <t3@plt>
xor    %eax,%eax
call   1170 <t4@plt>
xor    %eax,%eax
call   10c0 <t5@plt>
xor    %eax,%eax
call   1180 <t6@plt>
xor    %eax,%eax
call   10d0 <t7@plt>
xor    %eax,%eax
call   1190 <t8@plt>
xor    %eax,%eax
call   10e0 <t9@plt>
xor    %eax,%eax
call   1120 <t10@plt>
xor    %eax,%eax
call   1080 <t11@plt>
xor    %eax,%eax
call   1130 <t12@plt>
xor    %eax,%eax
call   1070 <t13@plt>
xor    %eax,%eax
call   1140 <t14@plt>
xor    %eax,%eax
call   1060 <unnamed@plt>
xor    %eax,%eax
call   11b0 <assign@plt>
xor    %eax,%eax
call   1100 <arrow@plt>
xor    %eax,%eax
call   11c0 <incomplete@plt>
xor    %eax,%eax
call   1150 <bitfield_basic@plt>
xor    %eax,%eax
call   1090 <bitfield_mix@plt>
xor    %eax,%eax
call   1110 <bitfield_union@plt>
xor    %eax,%eax
call   11d0 <bitfield_unnamed@plt>
xor    %eax,%eax
call   11a0 <bitfield_initializer@plt>
xor    %eax,%eax
call   1030 <test_offsetof@plt>
xor    %eax,%eax
call   1040 <flexible_member@plt>
xor    %eax,%eax
pop    %rcx
jmp    1050 <empty_struct@plt>

LLVM IR (-O0):
@.str = [7 x i8] c"struct\00"
define void @testmain() {
%1 = call i32 @print(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%2 = call i32 (...) @t1()
%3 = call i32 (...) @t2()
%4 = call i32 (...) @t3()
%5 = call i32 (...) @t4()
%6 = call i32 (...) @t5()
%7 = call i32 (...) @t6()
%8 = call i32 (...) @t7()
%9 = call i32 (...) @t8()
%10 = call i32 (...) @t9()
%11 = call i32 (...) @t10()
%12 = call i32 (...) @t11()
%13 = call i32 (...) @t12()
%14 = call i32 (...) @t13()
%15 = call i32 (...) @t14()
%16 = call i32 (...) @unnamed()
%17 = call i32 (...) @assign()
%18 = call i32 (...) @arrow()
%19 = call i32 (...) @incomplete()
%20 = call i32 (...) @bitfield_basic()
%21 = call i32 (...) @bitfield_mix()
%22 = call i32 (...) @bitfield_union()
%23 = call i32 (...) @bitfield_unnamed()
%24 = call i32 (...) @bitfield_initializer()
%25 = call i32 (...) @test_offsetof()
%26 = call i32 (...) @flexible_member()
%27 = call i32 (...) @empty_struct()
ret void
}

LLVM IR (-O2):
@.str = [7 x i8] c"struct\00"
define void @testmain() {
%1 = tail call i32 @print(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 (...) @t1()
%3 = tail call i32 (...) @t2()
%4 = tail call i32 (...) @t3()
%5 = tail call i32 (...) @t4()
%6 = tail call i32 (...) @t5()
%7 = tail call i32 (...) @t6()
%8 = tail call i32 (...) @t7()
%9 = tail call i32 (...) @t8()
%10 = tail call i32 (...) @t9()
%11 = tail call i32 (...) @t10()
%12 = tail call i32 (...) @t11()
%13 = tail call i32 (...) @t12()
%14 = tail call i32 (...) @t13()
%15 = tail call i32 (...) @t14()
%16 = tail call i32 (...) @unnamed()
%17 = tail call i32 (...) @assign()
%18 = tail call i32 (...) @arrow()
%19 = tail call i32 (...) @incomplete()
%20 = tail call i32 (...) @bitfield_basic()
%21 = tail call i32 (...) @bitfield_mix()
%22 = tail call i32 (...) @bitfield_union()
%23 = tail call i32 (...) @bitfield_unnamed()
%24 = tail call i32 (...) @bitfield_initializer()
%25 = tail call i32 (...) @test_offsetof()
%26 = tail call i32 (...) @flexible_member()
%27 = tail call i32 (...) @empty_struct()
ret void
}