#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 confctl_var {
  int dummy;
};
struct confctl {
  int dummy;
};

/* Variables and functions */
struct confctl *confctl_new();
struct confctl_var *confctl_root(struct confctl *);
struct confctl_var *confctl_var_new(struct confctl_var *, char *);
int /*<<< orphan*/ confctl_var_set_value(struct confctl_var *, char *);
int /*<<< orphan*/ err(int, char *);
int /*<<< orphan*/ errx(int, char *);
scalar_t__ isspace(char);
char *strdup(char const *);
int strunvis(char *, char *);
struct confctl *confctl_from_line(const char *line) {
  struct confctl *cc;
  struct confctl_var *cv, *parent;
  bool escaped = false, quoted = false, squoted = false;
  int i, j, len;
  char ch;
  char *copy, *name, *value;
  copy = name = strdup(line);
  if (copy == NULL)
    err(1, "strdup");
  cc = confctl_new();
  parent = confctl_root(cc);
  for (i = 0, j = 0;; i++, j++) {
    ch = copy[i];
    copy[j] = copy[i];
    if (ch == '\0') {
      len = strunvis(name, name);
      if (len < 0)
        err(1, "invalid escape sequence");
      confctl_var_new(parent, name);
      return (cc);
    }
    if (escaped) {
      escaped = false;
      continue;
    }
    if (ch == '\\') {
      escaped = true;
      j--;
      continue;
    }
    if (!squoted && ch == '"')
      quoted = !quoted;
    if (!quoted && ch == '\'')
      squoted = !squoted;
    if (quoted || squoted)
      continue;
    if (isspace(ch))
      errx(1, "whitespace inside variable specification");
    if (ch == '.' || ch == '=') {
      copy[j] = '\0';
      len = strunvis(name, name);
      if (len < 0)
        err(1, "invalid escape sequence");
      cv = confctl_var_new(parent, name);
      if (ch == '.') {
        parent = cv;
        name = &(copy[j + 1]);
        continue;
      }
      i++;
      j++;
      value = &(copy[i]);
      len = strunvis(value, value);
      if (len < 0)
        err(1, "invalid escape sequence");
      confctl_var_set_value(cv, value);
      return (cc);
    }
  }
}


x86 assembly (clang, -O0):
<confctl_from_line>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x10(%rbp),%rdi
call   10a0 <strdup@plt>
mov    %rax,-0x58(%rbp)
mov    %rax,-0x50(%rbp)
cmpq   $0x0,-0x50(%rbp)
jne    11de <confctl_from_line+0x4e>
mov    $0x1,%edi
lea    0xe27(%rip),%rsi
call   1080 <err@plt>
mov    $0x0,%al
call   1090 <confctl_new@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <confctl_root@plt>
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x41(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x50(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movsbl -0x41(%rbp),%eax
cmp    $0x0,%eax
jne    127a <confctl_from_line+0xea>
mov    -0x58(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   10b0 <strunvis@plt>
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    1260 <confctl_from_line+0xd0>
mov    $0x1,%edi
lea    0xdac(%rip),%rsi
call   1080 <err@plt>
mov    -0x28(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   1070 <confctl_var_new@plt>
mov    -0x18(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1451 <confctl_from_line+0x2c1>
cmpl   $0x0,-0x2c(%rbp)
je     1290 <confctl_from_line+0x100>
movl   $0x0,-0x2c(%rbp)
jmp    143a <confctl_from_line+0x2aa>
movsbl -0x41(%rbp),%eax
cmp    $0x5c,%eax
jne    12b2 <confctl_from_line+0x122>
movl   $0x1,-0x2c(%rbp)
mov    -0x3c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3c(%rbp)
jmp    143a <confctl_from_line+0x2aa>
cmpl   $0x0,-0x34(%rbp)
jne    12da <confctl_from_line+0x14a>
movsbl -0x41(%rbp),%eax
cmp    $0x22,%eax
jne    12da <confctl_from_line+0x14a>
cmpl   $0x0,-0x30(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1302 <confctl_from_line+0x172>
movsbl -0x41(%rbp),%eax
cmp    $0x27,%eax
jne    1302 <confctl_from_line+0x172>
cmpl   $0x0,-0x34(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1316 <confctl_from_line+0x186>
cmpl   $0x0,-0x34(%rbp)
je     131b <confctl_from_line+0x18b>
jmp    143a <confctl_from_line+0x2aa>
movsbl -0x41(%rbp),%edi
call   1060 <isspace@plt>
cmp    $0x0,%rax
je     133f <confctl_from_line+0x1af>
mov    $0x1,%edi
lea    0xce5(%rip),%rsi
call   1030 <errx@plt>
movsbl -0x41(%rbp),%eax
cmp    $0x2e,%eax
je     1359 <confctl_from_line+0x1c9>
movsbl -0x41(%rbp),%eax
cmp    $0x3d,%eax
jne    1435 <confctl_from_line+0x2a5>
mov    -0x50(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x58(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   10b0 <strunvis@plt>
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    1390 <confctl_from_line+0x200>
mov    $0x1,%edi
lea    0xc7c(%rip),%rsi
call   1080 <err@plt>
mov    -0x28(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   1070 <confctl_var_new@plt>
mov    %rax,-0x20(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x2e,%eax
jne    13cf <confctl_from_line+0x23f>
mov    -0x20(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x50(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
jmp    143a <confctl_from_line+0x2aa>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x38(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rdi
mov    -0x60(%rbp),%rsi
call   10b0 <strunvis@plt>
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    141b <confctl_from_line+0x28b>
mov    $0x1,%edi
lea    0xbf1(%rip),%rsi
call   1080 <err@plt>
mov    -0x20(%rbp),%rdi
mov    -0x60(%rbp),%rsi
call   1040 <confctl_var_set_value@plt>
mov    -0x18(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1451 <confctl_from_line+0x2c1>
jmp    143a <confctl_from_line+0x2aa>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1204 <confctl_from_line+0x74>
mov    -0x8(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<confctl_from_line>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
call   10a0 <strdup@plt>
mov    %rax,%r14
test   %rax,%rax
jne    11bc <confctl_from_line+0x2c>
lea    0xe4e(%rip),%rsi
mov    $0x1,%edi
call   1080 <err@plt>
xor    %r15d,%r15d
xor    %eax,%eax
call   1090 <confctl_new@plt>
mov    %rax,%rbx
mov    %rax,%rdi
call   1050 <confctl_root@plt>
mov    %rax,0x8(%rsp)
mov    (%r14),%r12b
test   %r12b,%r12b
mov    %rbx,0x10(%rsp)
je     1303 <confctl_from_line+0x173>
mov    $0x1,%r13d
mov    %r14,%rbx
mov    %r14,(%rsp)
xor    %ebp,%ebp
xor    %eax,%eax
xor    %esi,%esi
jmp    1236 <confctl_from_line+0xa6>
add    $0xffffffff,%ebp
mov    $0x1,%r15d
cs nopw 0x0(%rax,%rax,1)
nop
movslq %ebp,%rcx
lea    0x1(%rcx),%rbp
movzbl (%r14,%r13,1),%r12d
lea    (%r14,%rcx,1),%rbx
add    $0x1,%rbx
mov    %r12b,0x1(%r14,%rcx,1)
add    $0x1,%r13
test   %r12b,%r12b
je     1307 <confctl_from_line+0x177>
mov    %r15d,%ecx
xor    %r15d,%r15d
test   %ecx,%ecx
jne    1210 <confctl_from_line+0x80>
cmp    $0x5c,%r12b
je     11fc <confctl_from_line+0x6c>
xor    %ecx,%ecx
test   %esi,%esi
sete   %cl
cmp    $0x22,%r12b
cmovne %esi,%ecx
xor    %edx,%edx
test   %eax,%eax
cmove  %ecx,%esi
sete   %dl
cmp    $0x27,%r12b
cmovne %eax,%edx
test   %esi,%esi
cmove  %edx,%eax
mov    %esi,%ecx
or     %eax,%ecx
jne    1210 <confctl_from_line+0x80>
movsbl %r12b,%edi
call   1060 <isspace@plt>
test   %rax,%rax
je     128f <confctl_from_line+0xff>
mov    $0x1,%edi
lea    0xd95(%rip),%rsi
call   1030 <errx@plt>
xor    %esi,%esi
cmp    $0x3d,%r12b
je     129d <confctl_from_line+0x10d>
cmp    $0x2e,%r12b
jne    12f9 <confctl_from_line+0x169>
movb   $0x0,(%rbx)
mov    (%rsp),%rbx
mov    %rbx,%rdi
mov    %rbx,%rsi
call   10b0 <strunvis@plt>
test   %eax,%eax
jns    12c4 <confctl_from_line+0x134>
mov    $0x1,%edi
lea    0xd48(%rip),%rsi
call   1080 <err@plt>
mov    0x8(%rsp),%rdi
mov    %rbx,%rsi
call   1070 <confctl_var_new@plt>
mov    %rax,%rbx
cmp    $0x2e,%r12b
jne    134c <confctl_from_line+0x1bc>
mov    %rbx,0x8(%rsp)
movslq %ebp,%rax
add    %r14,%rax
add    $0x1,%rax
mov    %rax,(%rsp)
xor    %eax,%eax
xor    %r15d,%r15d
xor    %esi,%esi
jmp    1210 <confctl_from_line+0x80>
xor    %eax,%eax
xor    %r15d,%r15d
jmp    1210 <confctl_from_line+0x80>
mov    %r14,(%rsp)
mov    (%rsp),%rbx
mov    %rbx,%rdi
mov    %rbx,%rsi
call   10b0 <strunvis@plt>
test   %eax,%eax
jns    132b <confctl_from_line+0x19b>
lea    0xce6(%rip),%rsi
mov    $0x1,%edi
call   1080 <err@plt>
mov    0x8(%rsp),%rdi
mov    %rbx,%rsi
call   1070 <confctl_var_new@plt>
mov    0x10(%rsp),%rax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r13d,%eax
add    %rax,%r14
mov    %r14,%rdi
mov    %r14,%rsi
call   10b0 <strunvis@plt>
test   %eax,%eax
jns    1372 <confctl_from_line+0x1e2>
lea    0xc9f(%rip),%rsi
mov    $0x1,%edi
call   1080 <err@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1040 <confctl_var_set_value@plt>
jmp    1338 <confctl_from_line+0x1a8>

LLVM IR (-O0):
%struct.confctl = type { i32 }
%struct.confctl_var = type { i32 }
@.str = [7 x i8] c"strdup\00"
@.str.1 = [24 x i8] c"invalid escape sequence\00"
@.str.2 = [41 x i8] c"whitespace inside variable specification\00"
define %struct.confctl* @confctl_from_line(i8* %0) {
%2 = alloca %struct.confctl*
%3 = alloca i8*
%4 = alloca %struct.confctl*
%5 = alloca %struct.confctl_var*
%6 = alloca %struct.confctl_var*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i8
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i8*
store i8* %0, i8** %3
store i32 0, i32* %7
store i32 0, i32* %8
store i32 0, i32* %9
%17 = load i8*, i8** %3
%18 = call i8* @strdup(i8* %17)
store i8* %18, i8** %15
store i8* %18, i8** %14
%19 = load i8*, i8** %14
%20 = icmp eq i8* %19, null
br i1 %20, label %21, label %23
21: ; preds = %1
%22 = call i32 @err(i32 1, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
br label %23
23: ; preds = %21, %1
%24 = call %struct.confctl* (...) @confctl_new()
store %struct.confctl* %24, %struct.confctl** %4
%25 = load %struct.confctl*, %struct.confctl** %4
%26 = call %struct.confctl_var* @confctl_root(%struct.confctl* %25)
store %struct.confctl_var* %26, %struct.confctl_var** %6
store i32 0, i32* %10
store i32 0, i32* %11
br label %27
27: ; preds = %162, %23
%28 = load i8*, i8** %14
%29 = load i32, i32* %10
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds i8, i8* %28, i64 %30
%32 = load i8, i8* %31
store i8 %32, i8* %13
%33 = load i8*, i8** %14
%34 = load i32, i32* %10
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i8, i8* %33, i64 %35
%37 = load i8, i8* %36
%38 = load i8*, i8** %14
%39 = load i32, i32* %11
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds i8, i8* %38, i64 %40
store i8 %37, i8* %41
%42 = load i8, i8* %13
%43 = sext i8 %42 to i32
%44 = icmp eq i32 %43, 0
br i1 %44, label %45, label %58
45: ; preds = %27
%46 = load i8*, i8** %15
%47 = load i8*, i8** %15
%48 = call i32 @strunvis(i8* %46, i8* %47)
store i32 %48, i32* %12
%49 = load i32, i32* %12
%50 = icmp slt i32 %49, 0
br i1 %50, label %51, label %53
51: ; preds = %45
%52 = call i32 @err(i32 1, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
br label %53
53: ; preds = %51, %45
%54 = load %struct.confctl_var*, %struct.confctl_var** %6
%55 = load i8*, i8** %15
%56 = call %struct.confctl_var* @confctl_var_new(%struct.confctl_var* %54, i8* %55)
%57 = load %struct.confctl*, %struct.confctl** %4
store %struct.confctl* %57, %struct.confctl** %2
br label %167
58: ; preds = %27
%59 = load i32, i32* %7
%60 = icmp ne i32 %59, 0
br i1 %60, label %61, label %62
61: ; preds = %58
store i32 0, i32* %7
br label %162
62: ; preds = %58
%63 = load i8, i8* %13
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %64, 92
br i1 %65, label %66, label %69
66: ; preds = %62
store i32 1, i32* %7
%67 = load i32, i32* %11
%68 = add nsw i32 %67, -1
store i32 %68, i32* %11
br label %162
69: ; preds = %62
%70 = load i32, i32* %9
%71 = icmp ne i32 %70, 0
br i1 %71, label %81, label %72
72: ; preds = %69
%73 = load i8, i8* %13
%74 = sext i8 %73 to i32
%75 = icmp eq i32 %74, 34
br i1 %75, label %76, label %81
76: ; preds = %72
%77 = load i32, i32* %8
%78 = icmp ne i32 %77, 0
%79 = xor i1 %78, true
%80 = zext i1 %79 to i32
store i32 %80, i32* %8
br label %81
81: ; preds = %76, %72, %69
%82 = load i32, i32* %8
%83 = icmp ne i32 %82, 0
br i1 %83, label %93, label %84
84: ; preds = %81
%85 = load i8, i8* %13
%86 = sext i8 %85 to i32
%87 = icmp eq i32 %86, 39
br i1 %87, label %88, label %93
88: ; preds = %84
%89 = load i32, i32* %9
%90 = icmp ne i32 %89, 0
%91 = xor i1 %90, true
%92 = zext i1 %91 to i32
store i32 %92, i32* %9
br label %93
93: ; preds = %88, %84, %81
%94 = load i32, i32* %8
%95 = icmp ne i32 %94, 0
br i1 %95, label %99, label %96
96: ; preds = %93
%97 = load i32, i32* %9
%98 = icmp ne i32 %97, 0
br i1 %98, label %99, label %100
99: ; preds = %96, %93
br label %162
100: ; preds = %96
%101 = load i8, i8* %13
%102 = call i64 @isspace(i8 signext %101)
%103 = icmp ne i64 %102, 0
br i1 %103, label %104, label %106
104: ; preds = %100
%105 = call i32 @errx(i32 1, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0))
br label %106
106: ; preds = %104, %100
%107 = load i8, i8* %13
%108 = sext i8 %107 to i32
%109 = icmp eq i32 %108, 46
br i1 %109, label %114, label %110
110: ; preds = %106
%111 = load i8, i8* %13
%112 = sext i8 %111 to i32
%113 = icmp eq i32 %112, 61
br i1 %113, label %114, label %161
114: ; preds = %110, %106
%115 = load i8*, i8** %14
%116 = load i32, i32* %11
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds i8, i8* %115, i64 %117
store i8 0, i8* %118
%119 = load i8*, i8** %15
%120 = load i8*, i8** %15
%121 = call i32 @strunvis(i8* %119, i8* %120)
store i32 %121, i32* %12
%122 = load i32, i32* %12
%123 = icmp slt i32 %122, 0
br i1 %123, label %124, label %126
124: ; preds = %114
%125 = call i32 @err(i32 1, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
br label %126
126: ; preds = %124, %114
%127 = load %struct.confctl_var*, %struct.confctl_var** %6
%128 = load i8*, i8** %15
%129 = call %struct.confctl_var* @confctl_var_new(%struct.confctl_var* %127, i8* %128)
store %struct.confctl_var* %129, %struct.confctl_var** %5
%130 = load i8, i8* %13
%131 = sext i8 %130 to i32
%132 = icmp eq i32 %131, 46
br i1 %132, label %133, label %140
133: ; preds = %126
%134 = load %struct.confctl_var*, %struct.confctl_var** %5
store %struct.confctl_var* %134, %struct.confctl_var** %6
%135 = load i8*, i8** %14
%136 = load i32, i32* %11
%137 = add nsw i32 %136, 1
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8, i8* %135, i64 %138
store i8* %139, i8** %15
br label %162
140: ; preds = %126
%141 = load i32, i32* %10
%142 = add nsw i32 %141, 1
store i32 %142, i32* %10
%143 = load i32, i32* %11
%144 = add nsw i32 %143, 1
store i32 %144, i32* %11
%145 = load i8*, i8** %14
%146 = load i32, i32* %10
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i8, i8* %145, i64 %147
store i8* %148, i8** %16
%149 = load i8*, i8** %16
%150 = load i8*, i8** %16
%151 = call i32 @strunvis(i8* %149, i8* %150)
store i32 %151, i32* %12
%152 = load i32, i32* %12
%153 = icmp slt i32 %152, 0
br i1 %153, label %154, label %156
154: ; preds = %140
%155 = call i32 @err(i32 1, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
br label %156
156: ; preds = %154, %140
%157 = load %struct.confctl_var*, %struct.confctl_var** %5
%158 = load i8*, i8** %16
%159 = call i32 @confctl_var_set_value(%struct.confctl_var* %157, i8* %158)
%160 = load %struct.confctl*, %struct.confctl** %4
store %struct.confctl* %160, %struct.confctl** %2
br label %167
161: ; preds = %110
br label %162
162: ; preds = %161, %133, %99, %66, %61
%163 = load i32, i32* %10
%164 = add nsw i32 %163, 1
store i32 %164, i32* %10
%165 = load i32, i32* %11
%166 = add nsw i32 %165, 1
store i32 %166, i32* %11
br label %27
167: ; preds = %156, %53
%168 = load %struct.confctl*, %struct.confctl** %2
ret %struct.confctl* %168
}

LLVM IR (-O2):
%struct.confctl = type { i32 }
%struct.confctl_var = type { i32 }
@.str = [7 x i8] c"strdup\00"
@.str.1 = [24 x i8] c"invalid escape sequence\00"
@.str.2 = [41 x i8] c"whitespace inside variable specification\00"
define %struct.confctl* @confctl_from_line(i8* nocapture %0) {
%2 = tail call i8* @strdup(i8* %0)
%3 = icmp eq i8* %2, null
br i1 %3, label %4, label %6
4: ; preds = %1
%5 = tail call i32 @err(i32 1, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
br label %6
6: ; preds = %4, %1
%7 = tail call %struct.confctl* (...) @confctl_new()
%8 = tail call %struct.confctl_var* @confctl_root(%struct.confctl* %7)
%9 = load i8, i8* %2
%10 = icmp eq i8 %9, 0
br i1 %10, label %11, label %20
11: ; preds = %78, %6
%12 = phi %struct.confctl_var* [ %8, %6 ], [ %83, %78 ]
%13 = phi i8* [ %2, %6 ], [ %84, %78 ]
%14 = tail call i32 @strunvis(i8* %13, i8* %13)
%15 = icmp slt i32 %14, 0
br i1 %15, label %16, label %18
16: ; preds = %11
%17 = tail call i32 @err(i32 1, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
br label %18
18: ; preds = %16, %11
%19 = tail call %struct.confctl_var* @confctl_var_new(%struct.confctl_var* %12, i8* %13)
br label %92
20: ; preds = %6, %78
%21 = phi i64 [ %85, %78 ], [ 0, %6 ]
%22 = phi i8* [ %90, %78 ], [ %2, %6 ]
%23 = phi i8 [ %88, %78 ], [ %9, %6 ]
%24 = phi i8* [ %84, %78 ], [ %2, %6 ]
%25 = phi %struct.confctl_var* [ %83, %78 ], [ %8, %6 ]
%26 = phi i32 [ %82, %78 ], [ 0, %6 ]
%27 = phi i32 [ %86, %78 ], [ 0, %6 ]
%28 = phi i32 [ %80, %78 ], [ 0, %6 ]
%29 = phi i32 [ %79, %78 ], [ 0, %6 ]
%30 = icmp eq i32 %26, 0
br i1 %30, label %31, label %78
31: ; preds = %20
%32 = icmp eq i8 %23, 92
br i1 %32, label %33, label %35
33: ; preds = %31
%34 = add nsw i32 %27, -1
br label %78
35: ; preds = %31
%36 = icmp eq i32 %28, 0
%37 = icmp eq i8 %23, 34
%38 = select i1 %36, i1 %37, i1 false
%39 = icmp eq i32 %29, 0
%40 = zext i1 %39 to i32
%41 = select i1 %38, i32 %40, i32 %29
%42 = icmp eq i32 %41, 0
%43 = icmp eq i8 %23, 39
%44 = select i1 %42, i1 %43, i1 false
%45 = zext i1 %36 to i32
%46 = select i1 %44, i32 %45, i32 %28
%47 = icmp ne i32 %41, 0
%48 = icmp ne i32 %46, 0
%49 = select i1 %47, i1 true, i1 %48
br i1 %49, label %78, label %50
50: ; preds = %35
%51 = tail call i64 @isspace(i8 signext %23)
%52 = icmp eq i64 %51, 0
br i1 %52, label %55, label %53
53: ; preds = %50
%54 = tail call i32 @errx(i32 1, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0))
br label %55
55: ; preds = %53, %50
%56 = icmp eq i8 %23, 46
switch i8 %23, label %78 [
i8 61, label %57
i8 46, label %57
]
57: ; preds = %55, %55
store i8 0, i8* %22
%58 = tail call i32 @strunvis(i8* %24, i8* %24)
%59 = icmp slt i32 %58, 0
br i1 %59, label %60, label %62
60: ; preds = %57
%61 = tail call i32 @err(i32 1, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
br label %62
62: ; preds = %60, %57
%63 = tail call %struct.confctl_var* @confctl_var_new(%struct.confctl_var* %25, i8* %24)
br i1 %56, label %64, label %68
64: ; preds = %62
%65 = add nsw i32 %27, 1
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %2, i64 %66
br label %78
68: ; preds = %62
%69 = add i64 %21, 1
%70 = and i64 %69, 4294967295
%71 = getelementptr inbounds i8, i8* %2, i64 %70
%72 = tail call i32 @strunvis(i8* %71, i8* %71)
%73 = icmp slt i32 %72, 0
br i1 %73, label %74, label %76
74: ; preds = %68
%75 = tail call i32 @err(i32 1, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
br label %76
76: ; preds = %74, %68
%77 = tail call i32 @confctl_var_set_value(%struct.confctl_var* %63, i8* %71)
br label %92
78: ; preds = %55, %20, %35, %64, %33
%79 = phi i32 [ %29, %33 ], [ %41, %35 ], [ 0, %64 ], [ 0, %55 ], [ %29, %20 ]
%80 = phi i32 [ %28, %33 ], [ %46, %35 ], [ 0, %64 ], [ 0, %55 ], [ %28, %20 ]
%81 = phi i32 [ %34, %33 ], [ %27, %35 ], [ %27, %64 ], [ %27, %55 ], [ %27, %20 ]
%82 = phi i32 [ 1, %33 ], [ 0, %35 ], [ 0, %64 ], [ 0, %55 ], [ 0, %20 ]
%83 = phi %struct.confctl_var* [ %25, %33 ], [ %25, %35 ], [ %63, %64 ], [ %25, %55 ], [ %25, %20 ]
%84 = phi i8* [ %24, %33 ], [ %24, %35 ], [ %67, %64 ], [ %24, %55 ], [ %24, %20 ]
%85 = add nuw i64 %21, 1
%86 = add nsw i32 %81, 1
%87 = getelementptr inbounds i8, i8* %2, i64 %85
%88 = load i8, i8* %87
%89 = sext i32 %86 to i64
%90 = getelementptr inbounds i8, i8* %2, i64 %89
store i8 %88, i8* %90
%91 = icmp eq i8 %88, 0
br i1 %91, label %11, label %20
92: ; preds = %76, %18
ret %struct.confctl* %7
}