#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*/ test_ncabort(char *);
int /*<<< orphan*/ test_ncattcopy(char *, char *);
int /*<<< orphan*/ test_ncattdel(char *);
int /*<<< orphan*/ test_ncattget(char *);
int /*<<< orphan*/ test_ncattinq(char *);
int /*<<< orphan*/ test_ncattname(char *);
int /*<<< orphan*/ test_ncattput(char *);
int /*<<< orphan*/ test_ncattrename(char *);
int /*<<< orphan*/ test_ncclose(char *);
int /*<<< orphan*/ test_nccreate(char *);
int /*<<< orphan*/ test_ncdimdef(char *);
int /*<<< orphan*/ test_ncdimid(char *);
int /*<<< orphan*/ test_ncdiminq(char *);
int /*<<< orphan*/ test_ncdimrename(char *);
int /*<<< orphan*/ test_ncendef(char *);
int /*<<< orphan*/ test_ncinquire(char *);
int /*<<< orphan*/ test_ncopen(char *);
int /*<<< orphan*/ test_ncrecget(char *);
int /*<<< orphan*/ test_ncrecinq(char *);
int /*<<< orphan*/ test_ncrecput(char *);
int /*<<< orphan*/ test_ncredef(char *);
int /*<<< orphan*/ test_ncsync(char *);
int /*<<< orphan*/ test_nctypelen();
int /*<<< orphan*/ test_ncvardef(char *);
int /*<<< orphan*/ test_ncvarget(char *);
int /*<<< orphan*/ test_ncvarget1(char *);
int /*<<< orphan*/ test_ncvargetg(char *);
int /*<<< orphan*/ test_ncvarid(char *);
int /*<<< orphan*/ test_ncvarinq(char *);
int /*<<< orphan*/ test_ncvarput(char *);
int /*<<< orphan*/ test_ncvarput1(char *);
int /*<<< orphan*/ test_ncvarputg(char *);
int /*<<< orphan*/ test_ncvarrename(char *);
int main() {
  extern int ncopts;
  static char testfile[] = "testfile.nc";
  ncopts &= ~1;
  ncopts &= ~2;
  test_nccreate(testfile);
  test_ncopen(testfile);
  test_ncredef(testfile);
  test_ncendef(testfile);
  test_ncclose(testfile);
  test_ncinquire(testfile);
  test_ncsync(testfile);
  test_ncabort(testfile);
  test_ncdimdef(testfile);
  test_ncdimid(testfile);
  test_ncdiminq(testfile);
  test_ncdimrename(testfile);
  test_ncvardef(testfile);
  test_ncvarid(testfile);
  test_ncvarinq(testfile);
  test_ncvarput1(testfile);
  test_ncvarget1(testfile);
  test_ncvarput(testfile);
  test_ncvarget(testfile);
  test_ncvarputg(testfile);
  test_ncvargetg(testfile);
  test_ncrecinq(testfile);
  test_ncrecput(testfile);
  test_ncrecget(testfile);
  test_ncvarrename(testfile);
  test_ncattput(testfile);
  test_ncattinq(testfile);
  test_ncattget(testfile);
  test_ncattcopy(testfile, "test2.nc");
  test_ncattname(testfile);
  test_ncattrename(testfile);
  test_ncattdel(testfile);
  test_nctypelen();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    0x2cba(%rip),%rax
mov    (%rax),%ecx
and    $0xfffffffe,%ecx
mov    0x2cae(%rip),%rax
mov    %ecx,(%rax)
mov    0x2ca5(%rip),%rax
mov    (%rax),%ecx
and    $0xfffffffd,%ecx
mov    0x2c99(%rip),%rax
mov    %ecx,(%rax)
lea    0x2dd8(%rip),%rdi
call   1210 <test_nccreate@plt>
lea    0x2dcc(%rip),%rdi
call   1170 <test_ncopen@plt>
lea    0x2dc0(%rip),%rdi
call   1230 <test_ncredef@plt>
lea    0x2db4(%rip),%rdi
call   1180 <test_ncendef@plt>
lea    0x2da8(%rip),%rdi
call   1110 <test_ncclose@plt>
lea    0x2d9c(%rip),%rdi
call   11d0 <test_ncinquire@plt>
lea    0x2d90(%rip),%rdi
call   11e0 <test_ncsync@plt>
lea    0x2d84(%rip),%rdi
call   1060 <test_ncabort@plt>
lea    0x2d78(%rip),%rdi
call   1090 <test_ncdimdef@plt>
lea    0x2d6c(%rip),%rdi
call   1030 <test_ncdimid@plt>
lea    0x2d60(%rip),%rdi
call   1130 <test_ncdiminq@plt>
lea    0x2d54(%rip),%rdi
call   11f0 <test_ncdimrename@plt>
lea    0x2d48(%rip),%rdi
call   1040 <test_ncvardef@plt>
lea    0x2d3c(%rip),%rdi
call   11a0 <test_ncvarid@plt>
lea    0x2d30(%rip),%rdi
call   1150 <test_ncvarinq@plt>
lea    0x2d24(%rip),%rdi
call   10a0 <test_ncvarput1@plt>
lea    0x2d18(%rip),%rdi
call   10d0 <test_ncvarget1@plt>
lea    0x2d0c(%rip),%rdi
call   1050 <test_ncvarput@plt>
lea    0x2d00(%rip),%rdi
call   1070 <test_ncvarget@plt>
lea    0x2cf4(%rip),%rdi
call   10f0 <test_ncvarputg@plt>
lea    0x2ce8(%rip),%rdi
call   1100 <test_ncvargetg@plt>
lea    0x2cdc(%rip),%rdi
call   1080 <test_ncrecinq@plt>
lea    0x2cd0(%rip),%rdi
call   10e0 <test_ncrecput@plt>
lea    0x2cc4(%rip),%rdi
call   1220 <test_ncrecget@plt>
lea    0x2cb8(%rip),%rdi
call   10c0 <test_ncvarrename@plt>
lea    0x2cac(%rip),%rdi
call   11b0 <test_ncattput@plt>
lea    0x2ca0(%rip),%rdi
call   10b0 <test_ncattinq@plt>
lea    0x2c94(%rip),%rdi
call   1140 <test_ncattget@plt>
lea    0x2c88(%rip),%rdi
lea    0xb59(%rip),%rsi
call   1120 <test_ncattcopy@plt>
lea    0x2c75(%rip),%rdi
call   1190 <test_ncattname@plt>
lea    0x2c69(%rip),%rdi
call   1160 <test_ncattrename@plt>
lea    0x2c5d(%rip),%rdi
call   11c0 <test_ncattdel@plt>
mov    $0x0,%al
call   1200 <test_nctypelen@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
mov    0x2cc8(%rip),%rax
andb   $0xfc,(%rax)
lea    0x2e06(%rip),%rbx
mov    %rbx,%rdi
call   1210 <test_nccreate@plt>
mov    %rbx,%rdi
call   1170 <test_ncopen@plt>
mov    %rbx,%rdi
call   1230 <test_ncredef@plt>
mov    %rbx,%rdi
call   1180 <test_ncendef@plt>
mov    %rbx,%rdi
call   1110 <test_ncclose@plt>
mov    %rbx,%rdi
call   11d0 <test_ncinquire@plt>
mov    %rbx,%rdi
call   11e0 <test_ncsync@plt>
mov    %rbx,%rdi
call   1060 <test_ncabort@plt>
mov    %rbx,%rdi
call   1090 <test_ncdimdef@plt>
mov    %rbx,%rdi
call   1030 <test_ncdimid@plt>
mov    %rbx,%rdi
call   1130 <test_ncdiminq@plt>
mov    %rbx,%rdi
call   11f0 <test_ncdimrename@plt>
mov    %rbx,%rdi
call   1040 <test_ncvardef@plt>
mov    %rbx,%rdi
call   11a0 <test_ncvarid@plt>
mov    %rbx,%rdi
call   1150 <test_ncvarinq@plt>
mov    %rbx,%rdi
call   10a0 <test_ncvarput1@plt>
mov    %rbx,%rdi
call   10d0 <test_ncvarget1@plt>
mov    %rbx,%rdi
call   1050 <test_ncvarput@plt>
mov    %rbx,%rdi
call   1070 <test_ncvarget@plt>
mov    %rbx,%rdi
call   10f0 <test_ncvarputg@plt>
mov    %rbx,%rdi
call   1100 <test_ncvargetg@plt>
mov    %rbx,%rdi
call   1080 <test_ncrecinq@plt>
mov    %rbx,%rdi
call   10e0 <test_ncrecput@plt>
mov    %rbx,%rdi
call   1220 <test_ncrecget@plt>
mov    %rbx,%rdi
call   10c0 <test_ncvarrename@plt>
mov    %rbx,%rdi
call   11b0 <test_ncattput@plt>
mov    %rbx,%rdi
call   10b0 <test_ncattinq@plt>
mov    %rbx,%rdi
call   1140 <test_ncattget@plt>
lea    0xbf7(%rip),%rsi
mov    %rbx,%rdi
call   1120 <test_ncattcopy@plt>
mov    %rbx,%rdi
call   1190 <test_ncattname@plt>
mov    %rbx,%rdi
call   1160 <test_ncattrename@plt>
mov    %rbx,%rdi
call   11c0 <test_ncattdel@plt>
xor    %eax,%eax
call   1200 <test_nctypelen@plt>
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
@main.testfile = internal global [12 x i8] c"testfile.nc\00"
@ncopts = external global i32
@.str = [9 x i8] c"test2.nc\00"
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = load i32, i32* @ncopts
%3 = and i32 %2, -2
store i32 %3, i32* @ncopts
%4 = load i32, i32* @ncopts
%5 = and i32 %4, -3
store i32 %5, i32* @ncopts
%6 = call i32 @test_nccreate(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%7 = call i32 @test_ncopen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%8 = call i32 @test_ncredef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%9 = call i32 @test_ncendef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%10 = call i32 @test_ncclose(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%11 = call i32 @test_ncinquire(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%12 = call i32 @test_ncsync(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%13 = call i32 @test_ncabort(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%14 = call i32 @test_ncdimdef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%15 = call i32 @test_ncdimid(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%16 = call i32 @test_ncdiminq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%17 = call i32 @test_ncdimrename(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%18 = call i32 @test_ncvardef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%19 = call i32 @test_ncvarid(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%20 = call i32 @test_ncvarinq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%21 = call i32 @test_ncvarput1(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%22 = call i32 @test_ncvarget1(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%23 = call i32 @test_ncvarput(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%24 = call i32 @test_ncvarget(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%25 = call i32 @test_ncvarputg(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%26 = call i32 @test_ncvargetg(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%27 = call i32 @test_ncrecinq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%28 = call i32 @test_ncrecput(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%29 = call i32 @test_ncrecget(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%30 = call i32 @test_ncvarrename(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%31 = call i32 @test_ncattput(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%32 = call i32 @test_ncattinq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%33 = call i32 @test_ncattget(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%34 = call i32 @test_ncattcopy(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%35 = call i32 @test_ncattname(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%36 = call i32 @test_ncattrename(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%37 = call i32 @test_ncattdel(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%38 = call i32 (...) @test_nctypelen()
ret i32 0
}

LLVM IR (-O2):
@main.testfile = internal global [12 x i8] c"testfile.nc\00"
@ncopts = external global i32
@.str = [9 x i8] c"test2.nc\00"
define i32 @main() {
%1 = load i32, i32* @ncopts
%2 = and i32 %1, -4
store i32 %2, i32* @ncopts
%3 = tail call i32 @test_nccreate(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%4 = tail call i32 @test_ncopen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%5 = tail call i32 @test_ncredef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%6 = tail call i32 @test_ncendef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%7 = tail call i32 @test_ncclose(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%8 = tail call i32 @test_ncinquire(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%9 = tail call i32 @test_ncsync(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%10 = tail call i32 @test_ncabort(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%11 = tail call i32 @test_ncdimdef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%12 = tail call i32 @test_ncdimid(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%13 = tail call i32 @test_ncdiminq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%14 = tail call i32 @test_ncdimrename(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%15 = tail call i32 @test_ncvardef(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%16 = tail call i32 @test_ncvarid(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%17 = tail call i32 @test_ncvarinq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%18 = tail call i32 @test_ncvarput1(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%19 = tail call i32 @test_ncvarget1(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%20 = tail call i32 @test_ncvarput(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%21 = tail call i32 @test_ncvarget(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%22 = tail call i32 @test_ncvarputg(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%23 = tail call i32 @test_ncvargetg(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%24 = tail call i32 @test_ncrecinq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%25 = tail call i32 @test_ncrecput(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%26 = tail call i32 @test_ncrecget(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%27 = tail call i32 @test_ncvarrename(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%28 = tail call i32 @test_ncattput(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%29 = tail call i32 @test_ncattinq(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%30 = tail call i32 @test_ncattget(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%31 = tail call i32 @test_ncattcopy(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%32 = tail call i32 @test_ncattname(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%33 = tail call i32 @test_ncattrename(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%34 = tail call i32 @test_ncattdel(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @main.testfile, i64 0, i64 0))
%35 = tail call i32 (...) @test_nctypelen()
ret i32 0
}