#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 */
struct sockaddr_un {
  char *sun_path;
  int /*<<< orphan*/ sun_family;
};
struct sockaddr {
  int dummy;
};
typedef int ssize_t;
typedef int /*<<< orphan*/ reply_len;
typedef int int32_t;

/* Variables and functions */
int /*<<< orphan*/ AF_UNIX;
int /*<<< orphan*/ EINVAL;
int /*<<< orphan*/ SOCK_STREAM;
int /*<<< orphan*/ close(int);
scalar_t__ connect(int, struct sockaddr const *, int);
int /*<<< orphan*/ errno;
int /*<<< orphan*/ memcpy(char *, int *, int);
int read_all(int, char *, int);
int socket(int /*<<< orphan*/, int /*<<< orphan*/, int /*<<< orphan*/);
int /*<<< orphan*/ strncpy(char *, char const *, int);
int write_all(int, char *, int);
int call_daemon(const char *socket_path, int op, char *buf, int buflen,
                int *num, const char **err_context) {
  char op_buf[8];
  int op_len;
  int s;
  ssize_t ret;
  int32_t reply_len = 0;
  struct sockaddr_un srv_addr;
  if (((op == 4) || (op == 5)) && !num) {
    if (err_context)
      *err_context = ("bad arguments");
    errno = EINVAL;
    return -1;
  }
  if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
    if (err_context)
      *err_context = ("socket");
    return -1;
  }
  srv_addr.sun_family = AF_UNIX;
  strncpy(srv_addr.sun_path, socket_path, sizeof(srv_addr.sun_path));
  srv_addr.sun_path[sizeof(srv_addr.sun_path) - 1] = '\0';
  if (connect(s, (const struct sockaddr *)&srv_addr,
              sizeof(struct sockaddr_un)) < 0) {
    if (err_context)
      *err_context = ("connect");
    close(s);
    return -1;
  }
  if (op == 5) {
    if ((*num) * 16 > buflen - 4)
      *num = (buflen - 4) / 16;
  }
  op_buf[0] = op;
  op_len = 1;
  if ((op == 4) || (op == 5)) {
    memcpy(op_buf + 1, num, sizeof(int));
    op_len += sizeof(int);
  }
  ret = write_all(s, op_buf, op_len);
  if (ret < op_len) {
    if (err_context)
      *err_context = ("write");
    close(s);
    return -1;
  }
  ret = read_all(s, (char *)&reply_len, sizeof(reply_len));
  if (ret < 0) {
    if (err_context)
      *err_context = ("read count");
    close(s);
    return -1;
  }
  if (reply_len < 0 || reply_len > buflen) {
    if (err_context)
      *err_context = ("bad response length");
    close(s);
    return -1;
  }
  ret = read_all(s, (char *)buf, reply_len);
  if ((ret > 0) && (op == 4)) {
    if (reply_len >= (int)(16 + sizeof(int)))
      memcpy(buf + 16, num, sizeof(int));
    else
      *num = -1;
  }
  if ((ret > 0) && (op == 5)) {
    if (*num >= (int)sizeof(int))
      memcpy(buf, num, sizeof(int));
    else
      *num = -1;
  }
  close(s);
  return ret;
}


x86 assembly (clang, -O0):
<call_daemon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
movl   $0x0,-0x50(%rbp)
cmpl   $0x4,-0x14(%rbp)
je     11a9 <call_daemon+0x39>
cmpl   $0x5,-0x14(%rbp)
jne    11eb <call_daemon+0x7b>
cmpq   $0x0,-0x30(%rbp)
jne    11eb <call_daemon+0x7b>
cmpq   $0x0,-0x38(%rbp)
je     11cd <call_daemon+0x5d>
mov    -0x38(%rbp),%rax
lea    0xe36(%rip),%rcx
mov    %rcx,(%rax)
mov    0x2df4(%rip),%rax
mov    (%rax),%ecx
mov    0x2df3(%rip),%rax
mov    %ecx,(%rax)
movl   $0xffffffff,-0x4(%rbp)
jmp    14a9 <call_daemon+0x339>
mov    0x2df6(%rip),%rax
mov    (%rax),%edi
mov    0x2ddd(%rip),%rax
mov    (%rax),%esi
xor    %edx,%edx
call   1090 <socket@plt>
mov    %eax,-0x48(%rbp)
cmp    $0x0,%eax
jge    1235 <call_daemon+0xc5>
cmpq   $0x0,-0x38(%rbp)
je     1229 <call_daemon+0xb9>
mov    -0x38(%rbp),%rax
lea    0xde8(%rip),%rcx
mov    %rcx,(%rax)
movl   $0xffffffff,-0x4(%rbp)
jmp    14a9 <call_daemon+0x339>
mov    0x2dac(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x58(%rbp)
mov    -0x60(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    $0x8,%edx
call   1030 <strncpy@plt>
mov    -0x60(%rbp),%rax
movb   $0x0,0x7(%rax)
mov    -0x48(%rbp),%edi
lea    -0x60(%rbp),%rsi
mov    $0x10,%edx
call   1070 <connect@plt>
cmp    $0x0,%rax
jge    12a3 <call_daemon+0x133>
cmpq   $0x0,-0x38(%rbp)
je     128f <call_daemon+0x11f>
mov    -0x38(%rbp),%rax
lea    0xd89(%rip),%rcx
mov    %rcx,(%rax)
mov    -0x48(%rbp),%edi
call   1040 <close@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    14a9 <call_daemon+0x339>
cmpl   $0x5,-0x14(%rbp)
jne    12df <call_daemon+0x16f>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
shl    $0x4,%eax
mov    -0x24(%rbp),%ecx
sub    $0x4,%ecx
cmp    %ecx,%eax
jle    12da <call_daemon+0x16a>
mov    -0x24(%rbp),%eax
sub    $0x4,%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
jmp    12df <call_daemon+0x16f>
mov    -0x14(%rbp),%eax
mov    %al,-0x40(%rbp)
movl   $0x1,-0x44(%rbp)
cmpl   $0x4,-0x14(%rbp)
je     1300 <call_daemon+0x190>
cmpl   $0x5,-0x14(%rbp)
jne    1321 <call_daemon+0x1b1>
lea    -0x40(%rbp),%rdi
add    $0x1,%rdi
mov    -0x30(%rbp),%rsi
mov    $0x4,%edx
call   1050 <memcpy@plt>
movslq -0x44(%rbp),%rax
add    $0x4,%rax
mov    %eax,-0x44(%rbp)
mov    -0x48(%rbp),%edi
lea    -0x40(%rbp),%rsi
mov    -0x44(%rbp),%edx
call   1060 <write_all@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    136c <call_daemon+0x1fc>
cmpq   $0x0,-0x38(%rbp)
je     1358 <call_daemon+0x1e8>
mov    -0x38(%rbp),%rax
lea    0xcc8(%rip),%rcx
mov    %rcx,(%rax)
mov    -0x48(%rbp),%edi
call   1040 <close@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    14a9 <call_daemon+0x339>
mov    -0x48(%rbp),%edi
lea    -0x50(%rbp),%rsi
mov    $0x4,%edx
call   1080 <read_all@plt>
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jge    13b7 <call_daemon+0x247>
cmpq   $0x0,-0x38(%rbp)
je     13a3 <call_daemon+0x233>
mov    -0x38(%rbp),%rax
lea    0xc83(%rip),%rcx
mov    %rcx,(%rax)
mov    -0x48(%rbp),%edi
call   1040 <close@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    14a9 <call_daemon+0x339>
cmpl   $0x0,-0x50(%rbp)
jl     13cd <call_daemon+0x25d>
mov    -0x50(%rbp),%eax
cmp    -0x24(%rbp),%eax
jle    13fa <call_daemon+0x28a>
cmpq   $0x0,-0x38(%rbp)
je     13e6 <call_daemon+0x276>
mov    -0x38(%rbp),%rax
lea    0xc4b(%rip),%rcx
mov    %rcx,(%rax)
mov    -0x48(%rbp),%edi
call   1040 <close@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    14a9 <call_daemon+0x339>
mov    -0x48(%rbp),%edi
mov    -0x20(%rbp),%rsi
mov    -0x50(%rbp),%edx
call   1080 <read_all@plt>
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jle    1454 <call_daemon+0x2e4>
cmpl   $0x4,-0x14(%rbp)
jne    1454 <call_daemon+0x2e4>
cmpl   $0x14,-0x50(%rbp)
jl     1445 <call_daemon+0x2d5>
mov    -0x20(%rbp),%rdi
add    $0x10,%rdi
mov    -0x30(%rbp),%rsi
mov    $0x4,%edx
call   1050 <memcpy@plt>
jmp    144f <call_daemon+0x2df>
mov    -0x30(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    1454 <call_daemon+0x2e4>
cmpl   $0x0,-0x4c(%rbp)
jle    149b <call_daemon+0x32b>
cmpl   $0x5,-0x14(%rbp)
jne    149b <call_daemon+0x32b>
mov    -0x30(%rbp),%rax
cmpl   $0x4,(%rax)
jl     148c <call_daemon+0x31c>
mov    -0x20(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    $0x4,%edx
call   1050 <memcpy@plt>
jmp    1496 <call_daemon+0x326>
mov    -0x30(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    149b <call_daemon+0x32b>
mov    -0x48(%rbp),%edi
call   1040 <close@plt>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<call_daemon>:
push   %r14
push   %rbx
push   %rax
mov    %r9,%rbx
mov    %rdi,%r14
and    $0xfffffffe,%esi
cmp    $0x4,%esi
jne    115a <call_daemon+0x3a>
test   %r8,%r8
jne    115a <call_daemon+0x3a>
test   %rbx,%rbx
je     1146 <call_daemon+0x26>
lea    0xebd(%rip),%rax
mov    %rax,(%rbx)
mov    0x2e7b(%rip),%rax
mov    (%rax),%eax
mov    0x2e7a(%rip),%rcx
mov    %eax,(%rcx)
jmp    1186 <call_daemon+0x66>
mov    0x2e87(%rip),%rax
mov    (%rax),%edi
mov    0x2e6e(%rip),%rax
mov    (%rax),%esi
xor    %edx,%edx
call   1040 <socket@plt>
test   %eax,%eax
jns    1193 <call_daemon+0x73>
test   %rbx,%rbx
je     1186 <call_daemon+0x66>
lea    0xe8b(%rip),%rax
mov    %rax,(%rbx)
mov    $0xffffffff,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret
mov    %r14,%rsi
mov    $0x8,%edx
call   1030 <strncpy@plt>

LLVM IR (-O0):
%struct.sockaddr_un = type { i8*, i32 }
%struct.sockaddr = type { i32 }
@.str = [14 x i8] c"bad arguments\00"
@EINVAL = global i32 0
@errno = global i32 0
@AF_UNIX = global i32 0
@SOCK_STREAM = global i32 0
@.str.1 = [7 x i8] c"socket\00"
@.str.2 = [8 x i8] c"connect\00"
@.str.3 = [6 x i8] c"write\00"
@.str.4 = [11 x i8] c"read count\00"
@.str.5 = [20 x i8] c"bad response length\00"
define i32 @call_daemon(i8* %0, i32 %1, i8* %2, i32 %3, i32* %4, i8** %5) {
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i32
%12 = alloca i32*
%13 = alloca i8**
%14 = alloca [8 x i8]
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca %struct.sockaddr_un
store i8* %0, i8** %8
store i32 %1, i32* %9
store i8* %2, i8** %10
store i32 %3, i32* %11
store i32* %4, i32** %12
store i8** %5, i8*** %13
store i32 0, i32* %18
%20 = load i32, i32* %9
%21 = icmp eq i32 %20, 4
br i1 %21, label %25, label %22
22: ; preds = %6
%23 = load i32, i32* %9
%24 = icmp eq i32 %23, 5
br i1 %24, label %25, label %35
25: ; preds = %22, %6
%26 = load i32*, i32** %12
%27 = icmp ne i32* %26, null
br i1 %27, label %35, label %28
28: ; preds = %25
%29 = load i8**, i8*** %13
%30 = icmp ne i8** %29, null
br i1 %30, label %31, label %33
31: ; preds = %28
%32 = load i8**, i8*** %13
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), i8** %32
br label %33
33: ; preds = %31, %28
%34 = load i32, i32* @EINVAL
store i32 %34, i32* @errno
store i32 -1, i32* %7
br label %189
35: ; preds = %25, %22
%36 = load i32, i32* @AF_UNIX
%37 = load i32, i32* @SOCK_STREAM
%38 = call i32 @socket(i32 %36, i32 %37, i32 0)
store i32 %38, i32* %16
%39 = icmp slt i32 %38, 0
br i1 %39, label %40, label %46
40: ; preds = %35
%41 = load i8**, i8*** %13
%42 = icmp ne i8** %41, null
br i1 %42, label %43, label %45
43: ; preds = %40
%44 = load i8**, i8*** %13
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i8** %44
br label %45
45: ; preds = %43, %40
store i32 -1, i32* %7
br label %189
46: ; preds = %35
%47 = load i32, i32* @AF_UNIX
%48 = getelementptr inbounds %struct.sockaddr_un, %struct.sockaddr_un* %19, i32 0, i32 1
store i32 %47, i32* %48
%49 = getelementptr inbounds %struct.sockaddr_un, %struct.sockaddr_un* %19, i32 0, i32 0
%50 = load i8*, i8** %49
%51 = load i8*, i8** %8
%52 = call i32 @strncpy(i8* %50, i8* %51, i32 8)
%53 = getelementptr inbounds %struct.sockaddr_un, %struct.sockaddr_un* %19, i32 0, i32 0
%54 = load i8*, i8** %53
%55 = getelementptr inbounds i8, i8* %54, i64 7
store i8 0, i8* %55
%56 = load i32, i32* %16
%57 = bitcast %struct.sockaddr_un* %19 to %struct.sockaddr*
%58 = call i64 @connect(i32 %56, %struct.sockaddr* %57, i32 16)
%59 = icmp slt i64 %58, 0
br i1 %59, label %60, label %68
60: ; preds = %46
%61 = load i8**, i8*** %13
%62 = icmp ne i8** %61, null
br i1 %62, label %63, label %65
63: ; preds = %60
%64 = load i8**, i8*** %13
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i8** %64
br label %65
65: ; preds = %63, %60
%66 = load i32, i32* %16
%67 = call i32 @close(i32 %66)
store i32 -1, i32* %7
br label %189
68: ; preds = %46
%69 = load i32, i32* %9
%70 = icmp eq i32 %69, 5
br i1 %70, label %71, label %84
71: ; preds = %68
%72 = load i32*, i32** %12
%73 = load i32, i32* %72
%74 = mul nsw i32 %73, 16
%75 = load i32, i32* %11
%76 = sub nsw i32 %75, 4
%77 = icmp sgt i32 %74, %76
br i1 %77, label %78, label %83
78: ; preds = %71
%79 = load i32, i32* %11
%80 = sub nsw i32 %79, 4
%81 = sdiv i32 %80, 16
%82 = load i32*, i32** %12
store i32 %81, i32* %82
br label %83
83: ; preds = %78, %71
br label %84
84: ; preds = %83, %68
%85 = load i32, i32* %9
%86 = trunc i32 %85 to i8
%87 = getelementptr inbounds [8 x i8], [8 x i8]* %14, i64 0, i64 0
store i8 %86, i8* %87
store i32 1, i32* %15
%88 = load i32, i32* %9
%89 = icmp eq i32 %88, 4
br i1 %89, label %93, label %90
90: ; preds = %84
%91 = load i32, i32* %9
%92 = icmp eq i32 %91, 5
br i1 %92, label %93, label %102
93: ; preds = %90, %84
%94 = getelementptr inbounds [8 x i8], [8 x i8]* %14, i64 0, i64 0
%95 = getelementptr inbounds i8, i8* %94, i64 1
%96 = load i32*, i32** %12
%97 = call i32 @memcpy(i8* %95, i32* %96, i32 4)
%98 = load i32, i32* %15
%99 = sext i32 %98 to i64
%100 = add i64 %99, 4
%101 = trunc i64 %100 to i32
store i32 %101, i32* %15
br label %102
102: ; preds = %93, %90
%103 = load i32, i32* %16
%104 = getelementptr inbounds [8 x i8], [8 x i8]* %14, i64 0, i64 0
%105 = load i32, i32* %15
%106 = call i32 @write_all(i32 %103, i8* %104, i32 %105)
store i32 %106, i32* %17
%107 = load i32, i32* %17
%108 = load i32, i32* %15
%109 = icmp slt i32 %107, %108
br i1 %109, label %110, label %118
110: ; preds = %102
%111 = load i8**, i8*** %13
%112 = icmp ne i8** %111, null
br i1 %112, label %113, label %115
113: ; preds = %110
%114 = load i8**, i8*** %13
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8** %114
br label %115
115: ; preds = %113, %110
%116 = load i32, i32* %16
%117 = call i32 @close(i32 %116)
store i32 -1, i32* %7
br label %189
118: ; preds = %102
%119 = load i32, i32* %16
%120 = bitcast i32* %18 to i8*
%121 = call i32 @read_all(i32 %119, i8* %120, i32 4)
store i32 %121, i32* %17
%122 = load i32, i32* %17
%123 = icmp slt i32 %122, 0
br i1 %123, label %124, label %132
124: ; preds = %118
%125 = load i8**, i8*** %13
%126 = icmp ne i8** %125, null
br i1 %126, label %127, label %129
127: ; preds = %124
%128 = load i8**, i8*** %13
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0), i8** %128
br label %129
129: ; preds = %127, %124
%130 = load i32, i32* %16
%131 = call i32 @close(i32 %130)
store i32 -1, i32* %7
br label %189
132: ; preds = %118
%133 = load i32, i32* %18
%134 = icmp slt i32 %133, 0
br i1 %134, label %139, label %135
135: ; preds = %132
%136 = load i32, i32* %18
%137 = load i32, i32* %11
%138 = icmp sgt i32 %136, %137
br i1 %138, label %139, label %147
139: ; preds = %135, %132
%140 = load i8**, i8*** %13
%141 = icmp ne i8** %140, null
br i1 %141, label %142, label %144
142: ; preds = %139
%143 = load i8**, i8*** %13
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), i8** %143
br label %144
144: ; preds = %142, %139
%145 = load i32, i32* %16
%146 = call i32 @close(i32 %145)
store i32 -1, i32* %7
br label %189
147: ; preds = %135
%148 = load i32, i32* %16
%149 = load i8*, i8** %10
%150 = load i32, i32* %18
%151 = call i32 @read_all(i32 %148, i8* %149, i32 %150)
store i32 %151, i32* %17
%152 = load i32, i32* %17
%153 = icmp sgt i32 %152, 0
br i1 %153, label %154, label %168
154: ; preds = %147
%155 = load i32, i32* %9
%156 = icmp eq i32 %155, 4
br i1 %156, label %157, label %168
157: ; preds = %154
%158 = load i32, i32* %18
%159 = icmp sge i32 %158, 20
br i1 %159, label %160, label %165
160: ; preds = %157
%161 = load i8*, i8** %10
%162 = getelementptr inbounds i8, i8* %161, i64 16
%163 = load i32*, i32** %12
%164 = call i32 @memcpy(i8* %162, i32* %163, i32 4)
br label %167
165: ; preds = %157
%166 = load i32*, i32** %12
store i32 -1, i32* %166
br label %167
167: ; preds = %165, %160
br label %168
168: ; preds = %167, %154, %147
%169 = load i32, i32* %17
%170 = icmp sgt i32 %169, 0
br i1 %170, label %171, label %185
171: ; preds = %168
%172 = load i32, i32* %9
%173 = icmp eq i32 %172, 5
br i1 %173, label %174, label %185
174: ; preds = %171
%175 = load i32*, i32** %12
%176 = load i32, i32* %175
%177 = icmp sge i32 %176, 4
br i1 %177, label %178, label %182
178: ; preds = %174
%179 = load i8*, i8** %10
%180 = load i32*, i32** %12
%181 = call i32 @memcpy(i8* %179, i32* %180, i32 4)
br label %184
182: ; preds = %174
%183 = load i32*, i32** %12
store i32 -1, i32* %183
br label %184
184: ; preds = %182, %178
br label %185
185: ; preds = %184, %171, %168
%186 = load i32, i32* %16
%187 = call i32 @close(i32 %186)
%188 = load i32, i32* %17
store i32 %188, i32* %7
br label %189
189: ; preds = %185, %144, %129, %115, %65, %45, %33
%190 = load i32, i32* %7
ret i32 %190
}

LLVM IR (-O2):
@.str = [14 x i8] c"bad arguments\00"
@EINVAL = global i32 0
@errno = global i32 0
@AF_UNIX = global i32 0
@SOCK_STREAM = global i32 0
@.str.1 = [7 x i8] c"socket\00"
define i32 @call_daemon(i8* %0, i32 %1, i8* %2, i32 %3, i32* %4, i8** writeonly %5) {
%7 = and i32 %1, -2
%8 = icmp eq i32 %7, 4
%9 = icmp eq i32* %4, null
%10 = and i1 %8, %9
br i1 %10, label %11, label %16
11: ; preds = %6
%12 = icmp eq i8** %5, null
br i1 %12, label %14, label %13
13: ; preds = %11
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), i8** %5
br label %14
14: ; preds = %13, %11
%15 = load i32, i32* @EINVAL
store i32 %15, i32* @errno
br label %26
16: ; preds = %6
%17 = load i32, i32* @AF_UNIX
%18 = load i32, i32* @SOCK_STREAM
%19 = tail call i32 @socket(i32 %17, i32 %18, i32 0)
%20 = icmp slt i32 %19, 0
br i1 %20, label %21, label %24
21: ; preds = %16
%22 = icmp eq i8** %5, null
br i1 %22, label %26, label %23
23: ; preds = %21
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i8** %5
br label %26
24: ; preds = %16
%25 = tail call i32 @strncpy(i8* undef, i8* %0, i32 8)
unreachable
26: ; preds = %21, %23, %14
ret i32 -1
}