#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 RTLD_GLOBAL;
int RTLD_LAZY;
int /*<<< orphan*/ dlclose(void *);
char *dlerror();
void *dlopen(char *, int);
void *dlsym(void *, char *);
int /*<<< orphan*/ printf(char *, ...);
int do_test(void) {
  unsigned int (*getfoo)(void);
  void (*setfoo)(unsigned int);
  unsigned int *foop;
  unsigned int foo;
  void *handle;
  handle = dlopen("modstatic3.so", RTLD_LAZY | RTLD_GLOBAL);
  if (handle == NULL) {
    printf("dlopen (modstatic3.so): %s\n", dlerror());
    return 1;
  }
  foop = dlsym(handle, "foo");
  if (foop == NULL) {
    printf("dlsym (foo): %s\n", dlerror());
    return 1;
  }
  getfoo = dlsym(handle, "getfoo");
  if (getfoo == NULL) {
    printf("dlsym (getfoo): %s\n", dlerror());
    return 1;
  }
  setfoo = dlsym(handle, "setfoo");
  if (setfoo == NULL) {
    printf("dlsym (setfoo): %s\n", dlerror());
    return 1;
  }
  foo = *foop;
  if (foo != 0) {
    printf("*foop: got %#x, expected %#x\n", foo, 0);
    return 1;
  }
  foo = getfoo();
  if (foo != 0) {
    printf("getfoo: got %#x, expected %#x\n", foo, 0);
    return 1;
  }
  setfoo(0x5500ffaa);
  foo = *foop;
  if (foo != 0x5500ffaa) {
    printf("*foop: got %#x, expected %#x\n", foo, 0x5500ffaa);
    return 1;
  }
  foo = getfoo();
  if (foo != 0x5500ffaa) {
    printf("getfoo: got %#x, expected %#x\n", foo, 0x5500ffaa);
    return 1;
  }
  setfoo(0xaaff0055);
  foo = *foop;
  if (foo != 0xaaff0055) {
    printf("*foop: got %#x, expected %#x\n", foo, 0xaaff0055);
    return 1;
  }
  foo = getfoo();
  if (foo != 0xaaff0055) {
    printf("getfoo: got %#x, expected %#x\n", foo, 0xaaff0055);
    return 1;
  }
  getfoo = NULL;
  setfoo = NULL;
  foop = NULL;
  dlclose(handle);
  return 0;
}


x86 assembly (clang, -O0):
<do_test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    0x2e79(%rip),%rax
mov    (%rax),%esi
mov    0x2e80(%rip),%rax
or     (%rax),%esi
lea    0xe8f(%rip),%rdi
call   1050 <dlopen@plt>
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jne    11a9 <do_test+0x59>
mov    $0x0,%al
call   1030 <dlerror@plt>
mov    %rax,%rsi
lea    0xe78(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
mov    -0x30(%rbp),%rdi
lea    0xe8a(%rip),%rsi
call   1060 <dlsym@plt>
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x20(%rbp)
jne    11ec <do_test+0x9c>
mov    $0x0,%al
call   1030 <dlerror@plt>
mov    %rax,%rsi
lea    0xe51(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
mov    -0x30(%rbp),%rdi
lea    0xe44(%rip),%rsi
call   1060 <dlsym@plt>
mov    %rax,-0x10(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    122f <do_test+0xdf>
mov    $0x0,%al
call   1030 <dlerror@plt>
mov    %rax,%rsi
lea    0xe26(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
mov    -0x30(%rbp),%rdi
lea    0xe1c(%rip),%rsi
call   1060 <dlsym@plt>
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    1272 <do_test+0x122>
mov    $0x0,%al
call   1030 <dlerror@plt>
mov    %rax,%rsi
lea    0xdfe(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     12a4 <do_test+0x154>
mov    -0x24(%rbp),%esi
lea    0xde2(%rip),%rdi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
call   *-0x10(%rbp)
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     12d3 <do_test+0x183>
mov    -0x24(%rbp),%esi
lea    0xdd1(%rip),%rdi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
mov    $0x5500ffaa,%edi
call   *-0x18(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x5500ffaa,-0x24(%rbp)
je     1313 <do_test+0x1c3>
mov    -0x24(%rbp),%esi
lea    0xd76(%rip),%rdi
mov    $0x5500ffaa,%edx
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
call   *-0x10(%rbp)
mov    %eax,-0x24(%rbp)
cmpl   $0x5500ffaa,-0x24(%rbp)
je     1348 <do_test+0x1f8>
mov    -0x24(%rbp),%esi
lea    0xd5f(%rip),%rdi
mov    $0x5500ffaa,%edx
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
mov    $0xaaff0055,%edi
call   *-0x18(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0xaaff0055,-0x24(%rbp)
je     1388 <do_test+0x238>
mov    -0x24(%rbp),%esi
lea    0xd01(%rip),%rdi
mov    $0xaaff0055,%edx
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
call   *-0x10(%rbp)
mov    %eax,-0x24(%rbp)
cmpl   $0xaaff0055,-0x24(%rbp)
je     13bd <do_test+0x26d>
mov    -0x24(%rbp),%esi
lea    0xcea(%rip),%rdi
mov    $0xaaff0055,%edx
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    13e5 <do_test+0x295>
movq   $0x0,-0x10(%rbp)
movq   $0x0,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
mov    -0x30(%rbp),%rdi
call   1070 <dlclose@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<do_test>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    0x2e79(%rip),%rax
mov    0x2e82(%rip),%rcx
mov    (%rcx),%esi
or     (%rax),%esi
lea    0xe8f(%rip),%rdi
call   1050 <dlopen@plt>
test   %rax,%rax
je     11d0 <do_test+0x80>
mov    %rax,%rbx
lea    0xeb9(%rip),%rsi
mov    %rax,%rdi
call   1060 <dlsym@plt>
test   %rax,%rax
je     11e0 <do_test+0x90>
mov    %rax,%r14
lea    0xe9f(%rip),%rsi
mov    %rbx,%rdi
call   1060 <dlsym@plt>
test   %rax,%rax
je     11f0 <do_test+0xa0>
mov    %rax,%r15
lea    0xea3(%rip),%rsi
mov    %rbx,%rdi
call   1060 <dlsym@plt>
test   %rax,%rax
je     1200 <do_test+0xb0>
mov    (%r14),%esi
test   %esi,%esi
je     1229 <do_test+0xd9>
lea    0xea3(%rip),%rdi
jmp    123c <do_test+0xec>
xor    %eax,%eax
call   1030 <dlerror@plt>
lea    0xe30(%rip),%rdi
jmp    120e <do_test+0xbe>
xor    %eax,%eax
call   1030 <dlerror@plt>
lea    0xe3c(%rip),%rdi
jmp    120e <do_test+0xbe>
xor    %eax,%eax
call   1030 <dlerror@plt>
lea    0xe44(%rip),%rdi
jmp    120e <do_test+0xbe>
xor    %eax,%eax
call   1030 <dlerror@plt>
lea    0xe4f(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret
mov    %rax,%r12
call   *%r15
test   %eax,%eax
je     1247 <do_test+0xf7>
lea    0xe55(%rip),%rdi
mov    %eax,%esi
xor    %edx,%edx
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1218 <do_test+0xc8>
mov    $0x5500ffaa,%edi
call   *%r12
mov    (%r14),%esi
cmp    $0x5500ffaa,%esi
jne    128d <do_test+0x13d>
call   *%r15
cmp    $0x5500ffaa,%eax
jne    129b <do_test+0x14b>
mov    $0xaaff0055,%edi
call   *%r12
mov    (%r14),%esi
cmp    $0xaaff0055,%esi
jne    12ab <do_test+0x15b>
call   *%r15
cmp    $0xaaff0055,%eax
jne    12b9 <do_test+0x169>
mov    %rbx,%rdi
call   1070 <dlclose@plt>
xor    %eax,%eax
jmp    121d <do_test+0xcd>
lea    0xddd(%rip),%rdi
mov    $0x5500ffaa,%edx
jmp    123e <do_test+0xee>
lea    0xded(%rip),%rdi
mov    %eax,%esi
mov    $0x5500ffaa,%edx
jmp    123e <do_test+0xee>
lea    0xdbf(%rip),%rdi
mov    $0xaaff0055,%edx
jmp    123e <do_test+0xee>
lea    0xdcf(%rip),%rdi
mov    %eax,%esi
mov    $0xaaff0055,%edx
jmp    123e <do_test+0xee>

LLVM IR (-O0):
@.str = [14 x i8] c"modstatic3.so\00"
@RTLD_LAZY = global i32 0
@RTLD_GLOBAL = global i32 0
@.str.1 = [28 x i8] c"dlopen (modstatic3.so): %s\0A\00"
@.str.2 = [4 x i8] c"foo\00"
@.str.3 = [17 x i8] c"dlsym (foo): %s\0A\00"
@.str.4 = [7 x i8] c"getfoo\00"
@.str.5 = [20 x i8] c"dlsym (getfoo): %s\0A\00"
@.str.6 = [7 x i8] c"setfoo\00"
@.str.7 = [20 x i8] c"dlsym (setfoo): %s\0A\00"
@.str.8 = [30 x i8] c"*foop: got %#x, expected %#x\0A\00"
@.str.9 = [31 x i8] c"getfoo: got %#x, expected %#x\0A\00"
define i32 @do_test() {
%1 = alloca i32
%2 = alloca i32 ()*
%3 = alloca void (i32)*
%4 = alloca i32*
%5 = alloca i32
%6 = alloca i8*
%7 = load i32, i32* @RTLD_LAZY
%8 = load i32, i32* @RTLD_GLOBAL
%9 = or i32 %7, %8
%10 = call i8* @dlopen(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), i32 %9)
store i8* %10, i8** %6
%11 = load i8*, i8** %6
%12 = icmp eq i8* %11, null
br i1 %12, label %13, label %16
13: ; preds = %0
%14 = call i8* (...) @dlerror()
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.1, i64 0, i64 0), i8* %14)
store i32 1, i32* %1
br label %96
16: ; preds = %0
%17 = load i8*, i8** %6
%18 = call i8* @dlsym(i8* %17, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%19 = bitcast i8* %18 to i32*
store i32* %19, i32** %4
%20 = load i32*, i32** %4
%21 = icmp eq i32* %20, null
br i1 %21, label %22, label %25
22: ; preds = %16
%23 = call i8* (...) @dlerror()
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.3, i64 0, i64 0), i8* %23)
store i32 1, i32* %1
br label %96
25: ; preds = %16
%26 = load i8*, i8** %6
%27 = call i8* @dlsym(i8* %26, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%28 = bitcast i8* %27 to i32 ()*
store i32 ()* %28, i32 ()** %2
%29 = load i32 ()*, i32 ()** %2
%30 = icmp eq i32 ()* %29, null
br i1 %30, label %31, label %34
31: ; preds = %25
%32 = call i8* (...) @dlerror()
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), i8* %32)
store i32 1, i32* %1
br label %96
34: ; preds = %25
%35 = load i8*, i8** %6
%36 = call i8* @dlsym(i8* %35, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0))
%37 = bitcast i8* %36 to void (i32)*
store void (i32)* %37, void (i32)** %3
%38 = load void (i32)*, void (i32)** %3
%39 = icmp eq void (i32)* %38, null
br i1 %39, label %40, label %43
40: ; preds = %34
%41 = call i8* (...) @dlerror()
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i64 0, i64 0), i8* %41)
store i32 1, i32* %1
br label %96
43: ; preds = %34
%44 = load i32*, i32** %4
%45 = load i32, i32* %44
store i32 %45, i32* %5
%46 = load i32, i32* %5
%47 = icmp ne i32 %46, 0
br i1 %47, label %48, label %51
48: ; preds = %43
%49 = load i32, i32* %5
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0), i32 %49, i32 0)
store i32 1, i32* %1
br label %96
51: ; preds = %43
%52 = load i32 ()*, i32 ()** %2
%53 = call i32 %52()
store i32 %53, i32* %5
%54 = load i32, i32* %5
%55 = icmp ne i32 %54, 0
br i1 %55, label %56, label %59
56: ; preds = %51
%57 = load i32, i32* %5
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 %57, i32 0)
store i32 1, i32* %1
br label %96
59: ; preds = %51
%60 = load void (i32)*, void (i32)** %3
%61 = load i32*, i32** %4
%62 = load i32, i32* %61
store i32 %62, i32* %5
%63 = load i32, i32* %5
%64 = icmp ne i32 %63, 1426128810
br i1 %64, label %65, label %68
65: ; preds = %59
%66 = load i32, i32* %5
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0), i32 %66, i32 1426128810)
store i32 1, i32* %1
br label %96
68: ; preds = %59
%69 = load i32 ()*, i32 ()** %2
%70 = call i32 %69()
store i32 %70, i32* %5
%71 = load i32, i32* %5
%72 = icmp ne i32 %71, 1426128810
br i1 %72, label %73, label %76
73: ; preds = %68
%74 = load i32, i32* %5
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 %74, i32 1426128810)
store i32 1, i32* %1
br label %96
76: ; preds = %68
%77 = load void (i32)*, void (i32)** %3
%78 = load i32*, i32** %4
%79 = load i32, i32* %78
store i32 %79, i32* %5
%80 = load i32, i32* %5
%81 = icmp ne i32 %80, -1426128811
br i1 %81, label %82, label %85
82: ; preds = %76
%83 = load i32, i32* %5
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0), i32 %83, i32 -1426128811)
store i32 1, i32* %1
br label %96
85: ; preds = %76
%86 = load i32 ()*, i32 ()** %2
%87 = call i32 %86()
store i32 %87, i32* %5
%88 = load i32, i32* %5
%89 = icmp ne i32 %88, -1426128811
br i1 %89, label %90, label %93
90: ; preds = %85
%91 = load i32, i32* %5
%92 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 %91, i32 -1426128811)
store i32 1, i32* %1
br label %96
93: ; preds = %85
store i32 ()* null, i32 ()** %2
store void (i32)* null, void (i32)** %3
store i32* null, i32** %4
%94 = load i8*, i8** %6
%95 = call i32 @dlclose(i8* %94)
store i32 0, i32* %1
br label %96
96: ; preds = %93, %90, %82, %73, %65, %56, %48, %40, %31, %22, %13
%97 = load i32, i32* %1
ret i32 %97
}

LLVM IR (-O2):
@.str = [14 x i8] c"modstatic3.so\00"
@RTLD_LAZY = global i32 0
@RTLD_GLOBAL = global i32 0
@.str.1 = [28 x i8] c"dlopen (modstatic3.so): %s\0A\00"
@.str.2 = [4 x i8] c"foo\00"
@.str.3 = [17 x i8] c"dlsym (foo): %s\0A\00"
@.str.4 = [7 x i8] c"getfoo\00"
@.str.5 = [20 x i8] c"dlsym (getfoo): %s\0A\00"
@.str.6 = [7 x i8] c"setfoo\00"
@.str.7 = [20 x i8] c"dlsym (setfoo): %s\0A\00"
@.str.8 = [30 x i8] c"*foop: got %#x, expected %#x\0A\00"
@.str.9 = [31 x i8] c"getfoo: got %#x, expected %#x\0A\00"
define i32 @do_test() {
%1 = load i32, i32* @RTLD_LAZY
%2 = load i32, i32* @RTLD_GLOBAL
%3 = or i32 %2, %1
%4 = tail call i8* @dlopen(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), i32 %3)
%5 = icmp eq i8* %4, null
br i1 %5, label %6, label %9
6: ; preds = %0
%7 = tail call i8* (...) @dlerror()
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str.1, i64 0, i64 0), i8* %7)
br label %62
9: ; preds = %0
%10 = tail call i8* @dlsym(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%11 = bitcast i8* %10 to i32*
%12 = icmp eq i8* %10, null
br i1 %12, label %13, label %16
13: ; preds = %9
%14 = tail call i8* (...) @dlerror()
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.3, i64 0, i64 0), i8* %14)
br label %62
16: ; preds = %9
%17 = tail call i8* @dlsym(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%18 = bitcast i8* %17 to i32 ()*
%19 = icmp eq i8* %17, null
br i1 %19, label %20, label %23
20: ; preds = %16
%21 = tail call i8* (...) @dlerror()
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), i8* %21)
br label %62
23: ; preds = %16
%24 = tail call i8* @dlsym(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0))
%25 = bitcast i8* %24 to void (i32)*
%26 = icmp eq i8* %24, null
br i1 %26, label %27, label %30
27: ; preds = %23
%28 = tail call i8* (...) @dlerror()
%29 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i64 0, i64 0), i8* %28)
br label %62
30: ; preds = %23
%31 = load i32, i32* %11
%32 = icmp eq i32 %31, 0
br i1 %32, label %35, label %33
33: ; preds = %30
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0), i32 %31, i32 0)
br label %62
35: ; preds = %30
%36 = tail call i32 %18()
%37 = icmp eq i32 %36, 0
br i1 %37, label %40, label %38
38: ; preds = %35
%39 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 %36, i32 0)
br label %62
40: ; preds = %35
tail call void %25(i32 1426128810)
%41 = load i32, i32* %11
%42 = icmp eq i32 %41, 1426128810
br i1 %42, label %45, label %43
43: ; preds = %40
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0), i32 %41, i32 1426128810)
br label %62
45: ; preds = %40
%46 = tail call i32 %18()
%47 = icmp eq i32 %46, 1426128810
br i1 %47, label %50, label %48
48: ; preds = %45
%49 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 %46, i32 1426128810)
br label %62
50: ; preds = %45
tail call void %25(i32 -1426128811)
%51 = load i32, i32* %11
%52 = icmp eq i32 %51, -1426128811
br i1 %52, label %55, label %53
53: ; preds = %50
%54 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0), i32 %51, i32 -1426128811)
br label %62
55: ; preds = %50
%56 = tail call i32 %18()
%57 = icmp eq i32 %56, -1426128811
br i1 %57, label %60, label %58
58: ; preds = %55
%59 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 %56, i32 -1426128811)
br label %62
60: ; preds = %55
%61 = tail call i32 @dlclose(i8* %4)
br label %62
62: ; preds = %60, %58, %53, %48, %43, %38, %33, %27, %20, %13, %6
%63 = phi i32 [ 1, %6 ], [ 1, %13 ], [ 1, %20 ], [ 1, %27 ], [ 1, %33 ], [ 1, %38 ], [ 1, %43 ], [ 1, %48 ], [ 1, %53 ], [ 1, %58 ], [ 0, %60 ]
ret i32 %63
}