; LLVM IR from clibs/clib :: test/package (package-new)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.clib_package_t = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32 }
%struct.list_t = type { ptr, ptr, i32, ptr, ptr }
%struct.list_node = type { ptr, ptr, ptr }
%struct.clib_package_dependency_t = type { ptr, ptr, ptr }

@__assert_failures = external hidden global i32, align 4
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@__const.main.json = external hidden unnamed_addr constant [235 x i8], align 16
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external global ptr, align 8
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [71 x i8], align 1
@__assert_bail = external hidden global i32, align 4
@.str.10 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [51 x i8], align 1
@__const.main.json.32 = external hidden unnamed_addr constant [112 x i8], align 16
@.str.33 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @__describe_after_spec(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca [235 x i8], align 16
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca [112 x i8], align 16
  %18 = alloca ptr, align 8
  store i32 0, ptr %1, align 4
  %19 = call i32 @clib_cache_init(i64 noundef 100)
  %20 = call ptr @clib_cache_dir()
  %21 = call i32 @rimraf(ptr noundef %20)
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #7
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %22

22:                                               ; preds = %541, %0
  %23 = load i32, ptr %2, align 4, !tbaa !5
  %24 = add nsw i32 %23, 1
  store i32 %24, ptr %2, align 4, !tbaa !5
  %25 = icmp eq i32 %23, 0
  br i1 %25, label %26, label %29

26:                                               ; preds = %22
  %27 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, ptr noundef @.str.5)
  %28 = icmp ne i32 %27, 0
  br label %29

29:                                               ; preds = %26, %22
  %30 = phi i1 [ false, %22 ], [ %28, %26 ]
  br i1 %30, label %32, label %31

31:                                               ; preds = %29
  store i32 2, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #7
  br label %543

32:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 235, ptr %4) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %4, ptr align 16 @__const.main.json, i64 235, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %33 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  store i32 %33, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %34

34:                                               ; preds = %55, %32
  %35 = load i32, ptr %6, align 4, !tbaa !5
  %36 = add nsw i32 %35, 1
  store i32 %36, ptr %6, align 4, !tbaa !5
  %37 = icmp eq i32 %35, 0
  br i1 %37, label %39, label %38

38:                                               ; preds = %34
  store i32 5, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %57

39:                                               ; preds = %34
  br label %40

40:                                               ; preds = %39
  %41 = call ptr @clib_package_new(ptr noundef @.str.6, i32 noundef 0)
  %42 = icmp eq ptr null, %41
  br i1 %42, label %52, label %43

43:                                               ; preds = %40
  %44 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %45 = add nsw i32 %44, 1
  store i32 %45, ptr @__assert_failures, align 4, !tbaa !5
  %46 = load ptr, ptr @stderr, align 8, !tbaa !9
  %47 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %46, ptr noundef @.str.7, ptr noundef @.str.8, ptr noundef @.str.9, i32 noundef 29) #7
  %48 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %49 = icmp ne i32 %48, 0
  br i1 %49, label %50, label %51

50:                                               ; preds = %43
  call void @abort() #8
  unreachable

51:                                               ; preds = %43
  br label %52

52:                                               ; preds = %51, %40
  br label %53

53:                                               ; preds = %52
  br label %54

54:                                               ; preds = %53
  br label %55

55:                                               ; preds = %54
  %56 = load i32, ptr %5, align 4, !tbaa !5
  call void @__describe_after_spec(ptr noundef @.str.10, i32 noundef %56)
  br label %34, !llvm.loop !11

57:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %58 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  store i32 %58, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 0, ptr %8, align 4, !tbaa !5
  br label %59

59:                                               ; preds = %80, %57
  %60 = load i32, ptr %8, align 4, !tbaa !5
  %61 = add nsw i32 %60, 1
  store i32 %61, ptr %8, align 4, !tbaa !5
  %62 = icmp eq i32 %60, 0
  br i1 %62, label %64, label %63

63:                                               ; preds = %59
  store i32 10, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  br label %82

64:                                               ; preds = %59
  br label %65

65:                                               ; preds = %64
  %66 = call ptr @clib_package_new(ptr noundef null, i32 noundef 0)
  %67 = icmp eq ptr null, %66
  br i1 %67, label %77, label %68

68:                                               ; preds = %65
  %69 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %70 = add nsw i32 %69, 1
  store i32 %70, ptr @__assert_failures, align 4, !tbaa !5
  %71 = load ptr, ptr @stderr, align 8, !tbaa !9
  %72 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %71, ptr noundef @.str.7, ptr noundef @.str.11, ptr noundef @.str.9, i32 noundef 33) #7
  %73 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %75, label %76

75:                                               ; preds = %68
  call void @abort() #8
  unreachable

76:                                               ; preds = %68
  br label %77

77:                                               ; preds = %76, %65
  br label %78

78:                                               ; preds = %77
  br label %79

79:                                               ; preds = %78
  br label %80

80:                                               ; preds = %79
  %81 = load i32, ptr %7, align 4, !tbaa !5
  call void @__describe_after_spec(ptr noundef @.str.12, i32 noundef %81)
  br label %59, !llvm.loop !13

82:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  %83 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  store i32 %83, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %84

84:                                               ; preds = %510, %82
  %85 = load i32, ptr %10, align 4, !tbaa !5
  %86 = add nsw i32 %85, 1
  store i32 %86, ptr %10, align 4, !tbaa !5
  %87 = icmp eq i32 %85, 0
  br i1 %87, label %89, label %88

88:                                               ; preds = %84
  store i32 15, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %512

89:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %90 = getelementptr inbounds [235 x i8], ptr %4, i64 0, i64 0
  %91 = call ptr @clib_package_new(ptr noundef %90, i32 noundef 0)
  store ptr %91, ptr %11, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %89
  %93 = load ptr, ptr %11, align 8, !tbaa !9
  %94 = icmp ne ptr %93, null
  br i1 %94, label %104, label %95

95:                                               ; preds = %92
  %96 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr @__assert_failures, align 4, !tbaa !5
  %98 = load ptr, ptr @stderr, align 8, !tbaa !9
  %99 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %98, ptr noundef @.str.7, ptr noundef @.str.13, ptr noundef @.str.9, i32 noundef 38) #7
  %100 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %101 = icmp ne i32 %100, 0
  br i1 %101, label %102, label %103

102:                                              ; preds = %95
  call void @abort() #8
  unreachable

103:                                              ; preds = %95
  br label %104

104:                                              ; preds = %103, %92
  br label %105

105:                                              ; preds = %104
  br label %106

106:                                              ; preds = %105
  br label %107

107:                                              ; preds = %106
  %108 = getelementptr inbounds [235 x i8], ptr %4, i64 0, i64 0
  %109 = load ptr, ptr %11, align 8, !tbaa !9
  %110 = getelementptr inbounds %struct.clib_package_t, ptr %109, i32 0, i32 4
  %111 = load ptr, ptr %110, align 8, !tbaa !14
  %112 = call i32 @strcmp(ptr noundef %108, ptr noundef %111) #9
  %113 = icmp ne i32 0, %112
  br i1 %113, label %114, label %127

114:                                              ; preds = %107
  %115 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %116 = add nsw i32 %115, 1
  store i32 %116, ptr @__assert_failures, align 4, !tbaa !5
  %117 = load ptr, ptr @stderr, align 8, !tbaa !9
  %118 = getelementptr inbounds [235 x i8], ptr %4, i64 0, i64 0
  %119 = load ptr, ptr %11, align 8, !tbaa !9
  %120 = getelementptr inbounds %struct.clib_package_t, ptr %119, i32 0, i32 4
  %121 = load ptr, ptr %120, align 8, !tbaa !14
  %122 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %117, ptr noundef @.str.14, ptr noundef %118, ptr noundef %121, ptr noundef @.str.9, i32 noundef 40) #7
  %123 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %125, label %126

125:                                              ; preds = %114
  call void @abort() #8
  unreachable

126:                                              ; preds = %114
  br label %127

127:                                              ; preds = %126, %107
  br label %128

128:                                              ; preds = %127
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129
  %131 = load ptr, ptr %11, align 8, !tbaa !9
  %132 = getelementptr inbounds %struct.clib_package_t, ptr %131, i32 0, i32 6
  %133 = load ptr, ptr %132, align 8, !tbaa !16
  %134 = call i32 @strcmp(ptr noundef @.str.15, ptr noundef %133) #9
  %135 = icmp ne i32 0, %134
  br i1 %135, label %136, label %148

136:                                              ; preds = %130
  %137 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr @__assert_failures, align 4, !tbaa !5
  %139 = load ptr, ptr @stderr, align 8, !tbaa !9
  %140 = load ptr, ptr %11, align 8, !tbaa !9
  %141 = getelementptr inbounds %struct.clib_package_t, ptr %140, i32 0, i32 6
  %142 = load ptr, ptr %141, align 8, !tbaa !16
  %143 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %139, ptr noundef @.str.14, ptr noundef @.str.15, ptr noundef %142, ptr noundef @.str.9, i32 noundef 42) #7
  %144 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %146, label %147

146:                                              ; preds = %136
  call void @abort() #8
  unreachable

147:                                              ; preds = %136
  br label %148

148:                                              ; preds = %147, %130
  br label %149

149:                                              ; preds = %148
  br label %150

150:                                              ; preds = %149
  br label %151

151:                                              ; preds = %150
  %152 = load ptr, ptr %11, align 8, !tbaa !9
  %153 = getelementptr inbounds %struct.clib_package_t, ptr %152, i32 0, i32 0
  %154 = load ptr, ptr %153, align 8, !tbaa !17
  %155 = call i32 @strcmp(ptr noundef @.str.16, ptr noundef %154) #9
  %156 = icmp ne i32 0, %155
  br i1 %156, label %157, label %169

157:                                              ; preds = %151
  %158 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %159 = add nsw i32 %158, 1
  store i32 %159, ptr @__assert_failures, align 4, !tbaa !5
  %160 = load ptr, ptr @stderr, align 8, !tbaa !9
  %161 = load ptr, ptr %11, align 8, !tbaa !9
  %162 = getelementptr inbounds %struct.clib_package_t, ptr %161, i32 0, i32 0
  %163 = load ptr, ptr %162, align 8, !tbaa !17
  %164 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %160, ptr noundef @.str.14, ptr noundef @.str.16, ptr noundef %163, ptr noundef @.str.9, i32 noundef 43) #7
  %165 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %168

167:                                              ; preds = %157
  call void @abort() #8
  unreachable

168:                                              ; preds = %157
  br label %169

169:                                              ; preds = %168, %151
  br label %170

170:                                              ; preds = %169
  br label %171

171:                                              ; preds = %170
  br label %172

172:                                              ; preds = %171
  %173 = load ptr, ptr %11, align 8, !tbaa !9
  %174 = getelementptr inbounds %struct.clib_package_t, ptr %173, i32 0, i32 10
  %175 = load ptr, ptr %174, align 8, !tbaa !18
  %176 = call i32 @strcmp(ptr noundef @.str.17, ptr noundef %175) #9
  %177 = icmp ne i32 0, %176
  br i1 %177, label %178, label %190

178:                                              ; preds = %172
  %179 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %180 = add nsw i32 %179, 1
  store i32 %180, ptr @__assert_failures, align 4, !tbaa !5
  %181 = load ptr, ptr @stderr, align 8, !tbaa !9
  %182 = load ptr, ptr %11, align 8, !tbaa !9
  %183 = getelementptr inbounds %struct.clib_package_t, ptr %182, i32 0, i32 10
  %184 = load ptr, ptr %183, align 8, !tbaa !18
  %185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %181, ptr noundef @.str.14, ptr noundef @.str.17, ptr noundef %184, ptr noundef @.str.9, i32 noundef 44) #7
  %186 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %189

188:                                              ; preds = %178
  call void @abort() #8
  unreachable

189:                                              ; preds = %178
  br label %190

190:                                              ; preds = %189, %172
  br label %191

191:                                              ; preds = %190
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  %194 = load ptr, ptr %11, align 8, !tbaa !9
  %195 = getelementptr inbounds %struct.clib_package_t, ptr %194, i32 0, i32 7
  %196 = load ptr, ptr %195, align 8, !tbaa !19
  %197 = call i32 @strcmp(ptr noundef @.str.18, ptr noundef %196) #9
  %198 = icmp ne i32 0, %197
  br i1 %198, label %199, label %211

199:                                              ; preds = %193
  %200 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %201 = add nsw i32 %200, 1
  store i32 %201, ptr @__assert_failures, align 4, !tbaa !5
  %202 = load ptr, ptr @stderr, align 8, !tbaa !9
  %203 = load ptr, ptr %11, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.clib_package_t, ptr %203, i32 0, i32 7
  %205 = load ptr, ptr %204, align 8, !tbaa !19
  %206 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %202, ptr noundef @.str.14, ptr noundef @.str.18, ptr noundef %205, ptr noundef @.str.9, i32 noundef 45) #7
  %207 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %210

209:                                              ; preds = %199
  call void @abort() #8
  unreachable

210:                                              ; preds = %199
  br label %211

211:                                              ; preds = %210, %193
  br label %212

212:                                              ; preds = %211
  br label %213

213:                                              ; preds = %212
  br label %214

214:                                              ; preds = %213
  %215 = load ptr, ptr %11, align 8, !tbaa !9
  %216 = getelementptr inbounds %struct.clib_package_t, ptr %215, i32 0, i32 5
  %217 = load ptr, ptr %216, align 8, !tbaa !20
  %218 = call i32 @strcmp(ptr noundef @.str.19, ptr noundef %217) #9
  %219 = icmp ne i32 0, %218
  br i1 %219, label %220, label %232

220:                                              ; preds = %214
  %221 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %222 = add nsw i32 %221, 1
  store i32 %222, ptr @__assert_failures, align 4, !tbaa !5
  %223 = load ptr, ptr @stderr, align 8, !tbaa !9
  %224 = load ptr, ptr %11, align 8, !tbaa !9
  %225 = getelementptr inbounds %struct.clib_package_t, ptr %224, i32 0, i32 5
  %226 = load ptr, ptr %225, align 8, !tbaa !20
  %227 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %223, ptr noundef @.str.14, ptr noundef @.str.19, ptr noundef %226, ptr noundef @.str.9, i32 noundef 46) #7
  %228 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %229 = icmp ne i32 %228, 0
  br i1 %229, label %230, label %231

230:                                              ; preds = %220
  call void @abort() #8
  unreachable

231:                                              ; preds = %220
  br label %232

232:                                              ; preds = %231, %214
  br label %233

233:                                              ; preds = %232
  br label %234

234:                                              ; preds = %233
  br label %235

235:                                              ; preds = %234
  %236 = load ptr, ptr %11, align 8, !tbaa !9
  %237 = getelementptr inbounds %struct.clib_package_t, ptr %236, i32 0, i32 1
  %238 = load ptr, ptr %237, align 8, !tbaa !21
  %239 = call i32 @strcmp(ptr noundef @.str.20, ptr noundef %238) #9
  %240 = icmp ne i32 0, %239
  br i1 %240, label %241, label %253

241:                                              ; preds = %235
  %242 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr @__assert_failures, align 4, !tbaa !5
  %244 = load ptr, ptr @stderr, align 8, !tbaa !9
  %245 = load ptr, ptr %11, align 8, !tbaa !9
  %246 = getelementptr inbounds %struct.clib_package_t, ptr %245, i32 0, i32 1
  %247 = load ptr, ptr %246, align 8, !tbaa !21
  %248 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %244, ptr noundef @.str.14, ptr noundef @.str.20, ptr noundef %247, ptr noundef @.str.9, i32 noundef 47) #7
  %249 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %250 = icmp ne i32 %249, 0
  br i1 %250, label %251, label %252

251:                                              ; preds = %241
  call void @abort() #8
  unreachable

252:                                              ; preds = %241
  br label %253

253:                                              ; preds = %252, %235
  br label %254

254:                                              ; preds = %253
  br label %255

255:                                              ; preds = %254
  br label %256

256:                                              ; preds = %255
  %257 = load ptr, ptr %11, align 8, !tbaa !9
  %258 = getelementptr inbounds %struct.clib_package_t, ptr %257, i32 0, i32 2
  %259 = load ptr, ptr %258, align 8, !tbaa !22
  %260 = icmp eq ptr null, %259
  br i1 %260, label %270, label %261

261:                                              ; preds = %256
  %262 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %263 = add nsw i32 %262, 1
  store i32 %263, ptr @__assert_failures, align 4, !tbaa !5
  %264 = load ptr, ptr @stderr, align 8, !tbaa !9
  %265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %264, ptr noundef @.str.7, ptr noundef @.str.21, ptr noundef @.str.9, i32 noundef 48) #7
  %266 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %268, label %269

268:                                              ; preds = %261
  call void @abort() #8
  unreachable

269:                                              ; preds = %261
  br label %270

270:                                              ; preds = %269, %256
  br label %271

271:                                              ; preds = %270
  br label %272

272:                                              ; preds = %271
  br label %273

273:                                              ; preds = %272
  %274 = load ptr, ptr %11, align 8, !tbaa !9
  %275 = getelementptr inbounds %struct.clib_package_t, ptr %274, i32 0, i32 17
  %276 = load ptr, ptr %275, align 8, !tbaa !23
  %277 = getelementptr inbounds %struct.list_t, ptr %276, i32 0, i32 2
  %278 = load i32, ptr %277, align 8, !tbaa !24
  %279 = icmp eq i32 2, %278
  br i1 %279, label %289, label %280

280:                                              ; preds = %273
  %281 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %282 = add nsw i32 %281, 1
  store i32 %282, ptr @__assert_failures, align 4, !tbaa !5
  %283 = load ptr, ptr @stderr, align 8, !tbaa !9
  %284 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %283, ptr noundef @.str.7, ptr noundef @.str.22, ptr noundef @.str.9, i32 noundef 50) #7
  %285 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %286 = icmp ne i32 %285, 0
  br i1 %286, label %287, label %288

287:                                              ; preds = %280
  call void @abort() #8
  unreachable

288:                                              ; preds = %280
  br label %289

289:                                              ; preds = %288, %273
  br label %290

290:                                              ; preds = %289
  br label %291

291:                                              ; preds = %290
  br label %292

292:                                              ; preds = %291
  %293 = load ptr, ptr %11, align 8, !tbaa !9
  %294 = getelementptr inbounds %struct.clib_package_t, ptr %293, i32 0, i32 17
  %295 = load ptr, ptr %294, align 8, !tbaa !23
  %296 = call ptr @list_at(ptr noundef %295, i32 noundef 0)
  %297 = getelementptr inbounds %struct.list_node, ptr %296, i32 0, i32 2
  %298 = load ptr, ptr %297, align 8, !tbaa !26
  %299 = call i32 @strcmp(ptr noundef @.str.23, ptr noundef %298) #9
  %300 = icmp ne i32 0, %299
  br i1 %300, label %301, label %316

301:                                              ; preds = %292
  %302 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr @__assert_failures, align 4, !tbaa !5
  %304 = load ptr, ptr @stderr, align 8, !tbaa !9
  %305 = load ptr, ptr %11, align 8, !tbaa !9
  %306 = getelementptr inbounds %struct.clib_package_t, ptr %305, i32 0, i32 17
  %307 = load ptr, ptr %306, align 8, !tbaa !23
  %308 = call ptr @list_at(ptr noundef %307, i32 noundef 0)
  %309 = getelementptr inbounds %struct.list_node, ptr %308, i32 0, i32 2
  %310 = load ptr, ptr %309, align 8, !tbaa !26
  %311 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %304, ptr noundef @.str.14, ptr noundef @.str.23, ptr noundef %310, ptr noundef @.str.9, i32 noundef 51) #7
  %312 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %313 = icmp ne i32 %312, 0
  br i1 %313, label %314, label %315

314:                                              ; preds = %301
  call void @abort() #8
  unreachable

315:                                              ; preds = %301
  br label %316

316:                                              ; preds = %315, %292
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  br label %319

319:                                              ; preds = %318
  %320 = load ptr, ptr %11, align 8, !tbaa !9
  %321 = getelementptr inbounds %struct.clib_package_t, ptr %320, i32 0, i32 17
  %322 = load ptr, ptr %321, align 8, !tbaa !23
  %323 = call ptr @list_at(ptr noundef %322, i32 noundef 1)
  %324 = getelementptr inbounds %struct.list_node, ptr %323, i32 0, i32 2
  %325 = load ptr, ptr %324, align 8, !tbaa !26
  %326 = call i32 @strcmp(ptr noundef @.str.24, ptr noundef %325) #9
  %327 = icmp ne i32 0, %326
  br i1 %327, label %328, label %343

328:                                              ; preds = %319
  %329 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr @__assert_failures, align 4, !tbaa !5
  %331 = load ptr, ptr @stderr, align 8, !tbaa !9
  %332 = load ptr, ptr %11, align 8, !tbaa !9
  %333 = getelementptr inbounds %struct.clib_package_t, ptr %332, i32 0, i32 17
  %334 = load ptr, ptr %333, align 8, !tbaa !23
  %335 = call ptr @list_at(ptr noundef %334, i32 noundef 1)
  %336 = getelementptr inbounds %struct.list_node, ptr %335, i32 0, i32 2
  %337 = load ptr, ptr %336, align 8, !tbaa !26
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef @.str.14, ptr noundef @.str.24, ptr noundef %337, ptr noundef @.str.9, i32 noundef 52) #7
  %339 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %340 = icmp ne i32 %339, 0
  br i1 %340, label %341, label %342

341:                                              ; preds = %328
  call void @abort() #8
  unreachable

342:                                              ; preds = %328
  br label %343

343:                                              ; preds = %342, %319
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  br label %346

346:                                              ; preds = %345
  %347 = load ptr, ptr %11, align 8, !tbaa !9
  %348 = getelementptr inbounds %struct.clib_package_t, ptr %347, i32 0, i32 15
  %349 = load ptr, ptr %348, align 8, !tbaa !28
  %350 = getelementptr inbounds %struct.list_t, ptr %349, i32 0, i32 2
  %351 = load i32, ptr %350, align 8, !tbaa !24
  %352 = icmp eq i32 3, %351
  br i1 %352, label %362, label %353

353:                                              ; preds = %346
  %354 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr @__assert_failures, align 4, !tbaa !5
  %356 = load ptr, ptr @stderr, align 8, !tbaa !9
  %357 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %356, ptr noundef @.str.7, ptr noundef @.str.25, ptr noundef @.str.9, i32 noundef 54) #7
  %358 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %360, label %361

360:                                              ; preds = %353
  call void @abort() #8
  unreachable

361:                                              ; preds = %353
  br label %362

362:                                              ; preds = %361, %346
  br label %363

363:                                              ; preds = %362
  br label %364

364:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %365 = load ptr, ptr %11, align 8, !tbaa !9
  %366 = getelementptr inbounds %struct.clib_package_t, ptr %365, i32 0, i32 15
  %367 = load ptr, ptr %366, align 8, !tbaa !28
  %368 = call ptr @list_at(ptr noundef %367, i32 noundef 0)
  %369 = getelementptr inbounds %struct.list_node, ptr %368, i32 0, i32 2
  %370 = load ptr, ptr %369, align 8, !tbaa !26
  store ptr %370, ptr %12, align 8, !tbaa !9
  br label %371

371:                                              ; preds = %364
  %372 = load ptr, ptr %12, align 8, !tbaa !9
  %373 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %372, i32 0, i32 0
  %374 = load ptr, ptr %373, align 8, !tbaa !29
  %375 = call i32 @strcmp(ptr noundef @.str.26, ptr noundef %374) #9
  %376 = icmp ne i32 0, %375
  br i1 %376, label %377, label %389

377:                                              ; preds = %371
  %378 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %379 = add nsw i32 %378, 1
  store i32 %379, ptr @__assert_failures, align 4, !tbaa !5
  %380 = load ptr, ptr @stderr, align 8, !tbaa !9
  %381 = load ptr, ptr %12, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %381, i32 0, i32 0
  %383 = load ptr, ptr %382, align 8, !tbaa !29
  %384 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %380, ptr noundef @.str.14, ptr noundef @.str.26, ptr noundef %383, ptr noundef @.str.9, i32 noundef 57) #7
  %385 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %386 = icmp ne i32 %385, 0
  br i1 %386, label %387, label %388

387:                                              ; preds = %377
  call void @abort() #8
  unreachable

388:                                              ; preds = %377
  br label %389

389:                                              ; preds = %388, %371
  br label %390

390:                                              ; preds = %389
  br label %391

391:                                              ; preds = %390
  br label %392

392:                                              ; preds = %391
  %393 = load ptr, ptr %12, align 8, !tbaa !9
  %394 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %393, i32 0, i32 2
  %395 = load ptr, ptr %394, align 8, !tbaa !31
  %396 = call i32 @strcmp(ptr noundef @.str.27, ptr noundef %395) #9
  %397 = icmp ne i32 0, %396
  br i1 %397, label %398, label %410

398:                                              ; preds = %392
  %399 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr @__assert_failures, align 4, !tbaa !5
  %401 = load ptr, ptr @stderr, align 8, !tbaa !9
  %402 = load ptr, ptr %12, align 8, !tbaa !9
  %403 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %402, i32 0, i32 2
  %404 = load ptr, ptr %403, align 8, !tbaa !31
  %405 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %401, ptr noundef @.str.14, ptr noundef @.str.27, ptr noundef %404, ptr noundef @.str.9, i32 noundef 58) #7
  %406 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %408, label %409

408:                                              ; preds = %398
  call void @abort() #8
  unreachable

409:                                              ; preds = %398
  br label %410

410:                                              ; preds = %409, %392
  br label %411

411:                                              ; preds = %410
  br label %412

412:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %413 = load ptr, ptr %11, align 8, !tbaa !9
  %414 = getelementptr inbounds %struct.clib_package_t, ptr %413, i32 0, i32 15
  %415 = load ptr, ptr %414, align 8, !tbaa !28
  %416 = call ptr @list_at(ptr noundef %415, i32 noundef 1)
  %417 = getelementptr inbounds %struct.list_node, ptr %416, i32 0, i32 2
  %418 = load ptr, ptr %417, align 8, !tbaa !26
  store ptr %418, ptr %13, align 8, !tbaa !9
  br label %419

419:                                              ; preds = %412
  %420 = load ptr, ptr %13, align 8, !tbaa !9
  %421 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %420, i32 0, i32 0
  %422 = load ptr, ptr %421, align 8, !tbaa !29
  %423 = call i32 @strcmp(ptr noundef @.str.28, ptr noundef %422) #9
  %424 = icmp ne i32 0, %423
  br i1 %424, label %425, label %437

425:                                              ; preds = %419
  %426 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %427 = add nsw i32 %426, 1
  store i32 %427, ptr @__assert_failures, align 4, !tbaa !5
  %428 = load ptr, ptr @stderr, align 8, !tbaa !9
  %429 = load ptr, ptr %13, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %429, i32 0, i32 0
  %431 = load ptr, ptr %430, align 8, !tbaa !29
  %432 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %428, ptr noundef @.str.14, ptr noundef @.str.28, ptr noundef %431, ptr noundef @.str.9, i32 noundef 61) #7
  %433 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %434 = icmp ne i32 %433, 0
  br i1 %434, label %435, label %436

435:                                              ; preds = %425
  call void @abort() #8
  unreachable

436:                                              ; preds = %425
  br label %437

437:                                              ; preds = %436, %419
  br label %438

438:                                              ; preds = %437
  br label %439

439:                                              ; preds = %438
  br label %440

440:                                              ; preds = %439
  %441 = load ptr, ptr %13, align 8, !tbaa !9
  %442 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %441, i32 0, i32 2
  %443 = load ptr, ptr %442, align 8, !tbaa !31
  %444 = call i32 @strcmp(ptr noundef @.str.29, ptr noundef %443) #9
  %445 = icmp ne i32 0, %444
  br i1 %445, label %446, label %458

446:                                              ; preds = %440
  %447 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %448 = add nsw i32 %447, 1
  store i32 %448, ptr @__assert_failures, align 4, !tbaa !5
  %449 = load ptr, ptr @stderr, align 8, !tbaa !9
  %450 = load ptr, ptr %13, align 8, !tbaa !9
  %451 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %450, i32 0, i32 2
  %452 = load ptr, ptr %451, align 8, !tbaa !31
  %453 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %449, ptr noundef @.str.14, ptr noundef @.str.29, ptr noundef %452, ptr noundef @.str.9, i32 noundef 62) #7
  %454 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %457

456:                                              ; preds = %446
  call void @abort() #8
  unreachable

457:                                              ; preds = %446
  br label %458

458:                                              ; preds = %457, %440
  br label %459

459:                                              ; preds = %458
  br label %460

460:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %461 = load ptr, ptr %11, align 8, !tbaa !9
  %462 = getelementptr inbounds %struct.clib_package_t, ptr %461, i32 0, i32 15
  %463 = load ptr, ptr %462, align 8, !tbaa !28
  %464 = call ptr @list_at(ptr noundef %463, i32 noundef 2)
  %465 = getelementptr inbounds %struct.list_node, ptr %464, i32 0, i32 2
  %466 = load ptr, ptr %465, align 8, !tbaa !26
  store ptr %466, ptr %14, align 8, !tbaa !9
  br label %467

467:                                              ; preds = %460
  %468 = load ptr, ptr %14, align 8, !tbaa !9
  %469 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %468, i32 0, i32 0
  %470 = load ptr, ptr %469, align 8, !tbaa !29
  %471 = call i32 @strcmp(ptr noundef @.str.30, ptr noundef %470) #9
  %472 = icmp ne i32 0, %471
  br i1 %472, label %473, label %485

473:                                              ; preds = %467
  %474 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %475 = add nsw i32 %474, 1
  store i32 %475, ptr @__assert_failures, align 4, !tbaa !5
  %476 = load ptr, ptr @stderr, align 8, !tbaa !9
  %477 = load ptr, ptr %14, align 8, !tbaa !9
  %478 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %477, i32 0, i32 0
  %479 = load ptr, ptr %478, align 8, !tbaa !29
  %480 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %476, ptr noundef @.str.14, ptr noundef @.str.30, ptr noundef %479, ptr noundef @.str.9, i32 noundef 65) #7
  %481 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %482 = icmp ne i32 %481, 0
  br i1 %482, label %483, label %484

483:                                              ; preds = %473
  call void @abort() #8
  unreachable

484:                                              ; preds = %473
  br label %485

485:                                              ; preds = %484, %467
  br label %486

486:                                              ; preds = %485
  br label %487

487:                                              ; preds = %486
  br label %488

488:                                              ; preds = %487
  %489 = load ptr, ptr %14, align 8, !tbaa !9
  %490 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %489, i32 0, i32 2
  %491 = load ptr, ptr %490, align 8, !tbaa !31
  %492 = call i32 @strcmp(ptr noundef @.str.29, ptr noundef %491) #9
  %493 = icmp ne i32 0, %492
  br i1 %493, label %494, label %506

494:                                              ; preds = %488
  %495 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %496 = add nsw i32 %495, 1
  store i32 %496, ptr @__assert_failures, align 4, !tbaa !5
  %497 = load ptr, ptr @stderr, align 8, !tbaa !9
  %498 = load ptr, ptr %14, align 8, !tbaa !9
  %499 = getelementptr inbounds %struct.clib_package_dependency_t, ptr %498, i32 0, i32 2
  %500 = load ptr, ptr %499, align 8, !tbaa !31
  %501 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %497, ptr noundef @.str.14, ptr noundef @.str.29, ptr noundef %500, ptr noundef @.str.9, i32 noundef 66) #7
  %502 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %503 = icmp ne i32 %502, 0
  br i1 %503, label %504, label %505

504:                                              ; preds = %494
  call void @abort() #8
  unreachable

505:                                              ; preds = %494
  br label %506

506:                                              ; preds = %505, %488
  br label %507

507:                                              ; preds = %506
  br label %508

508:                                              ; preds = %507
  %509 = load ptr, ptr %11, align 8, !tbaa !9
  call void @clib_package_free(ptr noundef %509)
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %510

510:                                              ; preds = %508
  %511 = load i32, ptr %9, align 4, !tbaa !5
  call void @__describe_after_spec(ptr noundef @.str.31, i32 noundef %511)
  br label %84, !llvm.loop !32

512:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %513 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  store i32 %513, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %514

514:                                              ; preds = %538, %512
  %515 = load i32, ptr %16, align 4, !tbaa !5
  %516 = add nsw i32 %515, 1
  store i32 %516, ptr %16, align 4, !tbaa !5
  %517 = icmp eq i32 %515, 0
  br i1 %517, label %519, label %518

518:                                              ; preds = %514
  store i32 56, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %540

519:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 112, ptr %17) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %17, ptr align 16 @__const.main.json.32, i64 112, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %520 = getelementptr inbounds [112 x i8], ptr %17, i64 0, i64 0
  %521 = call ptr @clib_package_new(ptr noundef %520, i32 noundef 0)
  store ptr %521, ptr %18, align 8, !tbaa !9
  br label %522

522:                                              ; preds = %519
  %523 = load ptr, ptr %18, align 8, !tbaa !9
  %524 = icmp ne ptr %523, null
  br i1 %524, label %534, label %525

525:                                              ; preds = %522
  %526 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %527 = add nsw i32 %526, 1
  store i32 %527, ptr @__assert_failures, align 4, !tbaa !5
  %528 = load ptr, ptr @stderr, align 8, !tbaa !9
  %529 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %528, ptr noundef @.str.7, ptr noundef @.str.13, ptr noundef @.str.9, i32 noundef 81) #7
  %530 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %531 = icmp ne i32 %530, 0
  br i1 %531, label %532, label %533

532:                                              ; preds = %525
  call void @abort() #8
  unreachable

533:                                              ; preds = %525
  br label %534

534:                                              ; preds = %533, %522
  br label %535

535:                                              ; preds = %534
  br label %536

536:                                              ; preds = %535
  %537 = load ptr, ptr %18, align 8, !tbaa !9
  call void @clib_package_free(ptr noundef %537)
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr %17) #7
  br label %538

538:                                              ; preds = %536
  %539 = load i32, ptr %15, align 4, !tbaa !5
  call void @__describe_after_spec(ptr noundef @.str.33, i32 noundef %539)
  br label %514, !llvm.loop !33

540:                                              ; preds = %518
  call void @llvm.lifetime.end.p0(i64 235, ptr %4) #7
  br label %541

541:                                              ; preds = %540
  %542 = call i32 (ptr, ...) @printf(ptr noundef @.str.34)
  br label %22, !llvm.loop !34

543:                                              ; preds = %31
  %544 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  ret i32 %544
}

declare i32 @clib_cache_init(i64 noundef) #1

declare i32 @rimraf(ptr noundef) #1

declare ptr @clib_cache_dir() #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare ptr @clib_package_new(ptr noundef, i32 noundef) #1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #4

; Function Attrs: noreturn nounwind
declare void @abort() #5

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #6

declare ptr @list_at(ptr noundef, i32 noundef) #1

declare void @clib_package_free(ptr noundef) #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn nounwind }
attributes #9 = { nounwind willreturn memory(read) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !10, i64 32}
!15 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !6, i64 152}
!16 = !{!15, !10, i64 48}
!17 = !{!15, !10, i64 0}
!18 = !{!15, !10, i64 80}
!19 = !{!15, !10, i64 56}
!20 = !{!15, !10, i64 40}
!21 = !{!15, !10, i64 8}
!22 = !{!15, !10, i64 16}
!23 = !{!15, !10, i64 136}
!24 = !{!25, !6, i64 16}
!25 = !{!"", !10, i64 0, !10, i64 8, !6, i64 16, !10, i64 24, !10, i64 32}
!26 = !{!27, !10, i64 16}
!27 = !{!"list_node", !10, i64 0, !10, i64 8, !10, i64 16}
!28 = !{!15, !10, i64 120}
!29 = !{!30, !10, i64 0}
!30 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16}
!31 = !{!30, !10, i64 16}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@__assert_failures = external hidden local_unnamed_addr global i32, align 4
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@__const.main.json = external hidden unnamed_addr constant [235 x i8], align 16
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [71 x i8], align 1
@__assert_bail = external hidden local_unnamed_addr global i32, align 4
@.str.10 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [51 x i8], align 1
@__const.main.json.32 = external hidden unnamed_addr constant [112 x i8], align 16
@.str.33 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @__describe_after_spec(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
  %1 = alloca [235 x i8], align 16
  %2 = alloca [112 x i8], align 16
  %3 = tail call i32 @clib_cache_init(i64 noundef 100) #7
  %4 = tail call ptr @clib_cache_dir() #7
  %5 = tail call i32 @rimraf(ptr noundef %4) #7
  %6 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, ptr noundef nonnull @.str.5)
  %.not = icmp eq i32 %6, 0
  br i1 %.not, label %.critedge, label %.critedge92

.critedge:                                        ; preds = %268, %0
  %7 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  ret i32 %7

.critedge92:                                      ; preds = %0
  call void @llvm.lifetime.start.p0(i64 235, ptr nonnull %1) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(235) %1, ptr noundef nonnull align 16 dereferenceable(235) @__const.main.json, i64 235, i1 false)
  %8 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %9 = tail call ptr @clib_package_new(ptr noundef nonnull @.str.6, i32 noundef 0) #7
  %10 = icmp eq ptr %9, null
  br i1 %10, label %.critedge94, label %11

11:                                               ; preds = %.critedge92
  %12 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %13 = add nsw i32 %12, 1
  store i32 %13, ptr @__assert_failures, align 4, !tbaa !5
  %14 = load ptr, ptr @stderr, align 8, !tbaa !9
  %15 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %14, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, i32 noundef 29) #8
  %16 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not90 = icmp eq i32 %16, 0
  br i1 %.not90, label %.critedge94, label %17

17:                                               ; preds = %11
  tail call void @abort() #9
  unreachable

.critedge94:                                      ; preds = %.critedge92, %11
  tail call void @__describe_after_spec(ptr noundef nonnull @.str.10, i32 noundef %8)
  %18 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %19 = tail call ptr @clib_package_new(ptr noundef null, i32 noundef 0) #7
  %20 = icmp eq ptr %19, null
  br i1 %20, label %.critedge96, label %21

21:                                               ; preds = %.critedge94
  %22 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %23 = add nsw i32 %22, 1
  store i32 %23, ptr @__assert_failures, align 4, !tbaa !5
  %24 = load ptr, ptr @stderr, align 8, !tbaa !9
  %25 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %24, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.9, i32 noundef 33) #8
  %26 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not89 = icmp eq i32 %26, 0
  br i1 %.not89, label %.critedge96, label %27

27:                                               ; preds = %21
  tail call void @abort() #9
  unreachable

.critedge96:                                      ; preds = %.critedge94, %21
  tail call void @__describe_after_spec(ptr noundef nonnull @.str.12, i32 noundef %18)
  %28 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %29 = call ptr @clib_package_new(ptr noundef nonnull %1, i32 noundef 0) #7
  %.not54 = icmp eq ptr %29, null
  br i1 %.not54, label %30, label %37

30:                                               ; preds = %.critedge96
  %31 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %32 = add nsw i32 %31, 1
  store i32 %32, ptr @__assert_failures, align 4, !tbaa !5
  %33 = load ptr, ptr @stderr, align 8, !tbaa !9
  %34 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %33, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.9, i32 noundef 38) #8
  %35 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not55 = icmp eq i32 %35, 0
  br i1 %.not55, label %37, label %36

36:                                               ; preds = %30
  call void @abort() #9
  unreachable

37:                                               ; preds = %.critedge96, %30
  %38 = getelementptr inbounds i8, ptr %29, i64 32
  %39 = load ptr, ptr %38, align 8, !tbaa !11
  %40 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %1, ptr noundef nonnull dereferenceable(1) %39) #10
  %.not56 = icmp eq i32 %40, 0
  br i1 %.not56, label %48, label %41

41:                                               ; preds = %37
  %42 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %43 = add nsw i32 %42, 1
  store i32 %43, ptr @__assert_failures, align 4, !tbaa !5
  %44 = load ptr, ptr @stderr, align 8, !tbaa !9
  %45 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %44, ptr noundef nonnull @.str.14, ptr noundef nonnull %1, ptr noundef %39, ptr noundef nonnull @.str.9, i32 noundef 40) #8
  %46 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not57 = icmp eq i32 %46, 0
  br i1 %.not57, label %48, label %47

47:                                               ; preds = %41
  call void @abort() #9
  unreachable

48:                                               ; preds = %37, %41
  %49 = getelementptr inbounds i8, ptr %29, i64 48
  %50 = load ptr, ptr %49, align 8, !tbaa !13
  %51 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.15, ptr noundef nonnull dereferenceable(1) %50) #10
  %.not58 = icmp eq i32 %51, 0
  br i1 %.not58, label %59, label %52

52:                                               ; preds = %48
  %53 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %54 = add nsw i32 %53, 1
  store i32 %54, ptr @__assert_failures, align 4, !tbaa !5
  %55 = load ptr, ptr @stderr, align 8, !tbaa !9
  %56 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %55, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, ptr noundef %50, ptr noundef nonnull @.str.9, i32 noundef 42) #8
  %57 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not59 = icmp eq i32 %57, 0
  br i1 %.not59, label %59, label %58

58:                                               ; preds = %52
  call void @abort() #9
  unreachable

59:                                               ; preds = %48, %52
  %60 = load ptr, ptr %29, align 8, !tbaa !14
  %61 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.16, ptr noundef nonnull dereferenceable(1) %60) #10
  %.not60 = icmp eq i32 %61, 0
  br i1 %.not60, label %69, label %62

62:                                               ; preds = %59
  %63 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %64 = add nsw i32 %63, 1
  store i32 %64, ptr @__assert_failures, align 4, !tbaa !5
  %65 = load ptr, ptr @stderr, align 8, !tbaa !9
  %66 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %65, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.16, ptr noundef %60, ptr noundef nonnull @.str.9, i32 noundef 43) #8
  %67 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not61 = icmp eq i32 %67, 0
  br i1 %.not61, label %69, label %68

68:                                               ; preds = %62
  call void @abort() #9
  unreachable

69:                                               ; preds = %59, %62
  %70 = getelementptr inbounds i8, ptr %29, i64 80
  %71 = load ptr, ptr %70, align 8, !tbaa !15
  %72 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.17, ptr noundef nonnull dereferenceable(1) %71) #10
  %.not62 = icmp eq i32 %72, 0
  br i1 %.not62, label %80, label %73

73:                                               ; preds = %69
  %74 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %75 = add nsw i32 %74, 1
  store i32 %75, ptr @__assert_failures, align 4, !tbaa !5
  %76 = load ptr, ptr @stderr, align 8, !tbaa !9
  %77 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %76, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.17, ptr noundef %71, ptr noundef nonnull @.str.9, i32 noundef 44) #8
  %78 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not63 = icmp eq i32 %78, 0
  br i1 %.not63, label %80, label %79

79:                                               ; preds = %73
  call void @abort() #9
  unreachable

80:                                               ; preds = %69, %73
  %81 = getelementptr inbounds i8, ptr %29, i64 56
  %82 = load ptr, ptr %81, align 8, !tbaa !16
  %83 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull dereferenceable(1) %82) #10
  %.not64 = icmp eq i32 %83, 0
  br i1 %.not64, label %91, label %84

84:                                               ; preds = %80
  %85 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %86 = add nsw i32 %85, 1
  store i32 %86, ptr @__assert_failures, align 4, !tbaa !5
  %87 = load ptr, ptr @stderr, align 8, !tbaa !9
  %88 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %87, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.18, ptr noundef %82, ptr noundef nonnull @.str.9, i32 noundef 45) #8
  %89 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not65 = icmp eq i32 %89, 0
  br i1 %.not65, label %91, label %90

90:                                               ; preds = %84
  call void @abort() #9
  unreachable

91:                                               ; preds = %80, %84
  %92 = getelementptr inbounds i8, ptr %29, i64 40
  %93 = load ptr, ptr %92, align 8, !tbaa !17
  %94 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.19, ptr noundef nonnull dereferenceable(1) %93) #10
  %.not66 = icmp eq i32 %94, 0
  br i1 %.not66, label %102, label %95

95:                                               ; preds = %91
  %96 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr @__assert_failures, align 4, !tbaa !5
  %98 = load ptr, ptr @stderr, align 8, !tbaa !9
  %99 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %98, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.19, ptr noundef %93, ptr noundef nonnull @.str.9, i32 noundef 46) #8
  %100 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not67 = icmp eq i32 %100, 0
  br i1 %.not67, label %102, label %101

101:                                              ; preds = %95
  call void @abort() #9
  unreachable

102:                                              ; preds = %91, %95
  %103 = getelementptr inbounds i8, ptr %29, i64 8
  %104 = load ptr, ptr %103, align 8, !tbaa !18
  %105 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.20, ptr noundef nonnull dereferenceable(1) %104) #10
  %.not68 = icmp eq i32 %105, 0
  br i1 %.not68, label %113, label %106

106:                                              ; preds = %102
  %107 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %108 = add nsw i32 %107, 1
  store i32 %108, ptr @__assert_failures, align 4, !tbaa !5
  %109 = load ptr, ptr @stderr, align 8, !tbaa !9
  %110 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %109, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.20, ptr noundef %104, ptr noundef nonnull @.str.9, i32 noundef 47) #8
  %111 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not69 = icmp eq i32 %111, 0
  br i1 %.not69, label %113, label %112

112:                                              ; preds = %106
  call void @abort() #9
  unreachable

113:                                              ; preds = %102, %106
  %114 = getelementptr inbounds i8, ptr %29, i64 16
  %115 = load ptr, ptr %114, align 8, !tbaa !19
  %116 = icmp eq ptr %115, null
  br i1 %116, label %124, label %117

117:                                              ; preds = %113
  %118 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr @__assert_failures, align 4, !tbaa !5
  %120 = load ptr, ptr @stderr, align 8, !tbaa !9
  %121 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %120, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.9, i32 noundef 48) #8
  %122 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not70 = icmp eq i32 %122, 0
  br i1 %.not70, label %124, label %123

123:                                              ; preds = %117
  call void @abort() #9
  unreachable

124:                                              ; preds = %113, %117
  %125 = getelementptr inbounds i8, ptr %29, i64 136
  %126 = load ptr, ptr %125, align 8, !tbaa !20
  %127 = getelementptr inbounds i8, ptr %126, i64 16
  %128 = load i32, ptr %127, align 8, !tbaa !21
  %129 = icmp eq i32 %128, 2
  br i1 %129, label %137, label %130

130:                                              ; preds = %124
  %131 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr @__assert_failures, align 4, !tbaa !5
  %133 = load ptr, ptr @stderr, align 8, !tbaa !9
  %134 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %133, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.9, i32 noundef 50) #8
  %135 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not71 = icmp eq i32 %135, 0
  br i1 %.not71, label %._crit_edge, label %136

._crit_edge:                                      ; preds = %130
  %.pre = load ptr, ptr %125, align 8, !tbaa !20
  br label %137

136:                                              ; preds = %130
  call void @abort() #9
  unreachable

137:                                              ; preds = %._crit_edge, %124
  %138 = phi ptr [ %.pre, %._crit_edge ], [ %126, %124 ]
  %139 = call ptr @list_at(ptr noundef %138, i32 noundef 0) #7
  %140 = getelementptr inbounds i8, ptr %139, i64 16
  %141 = load ptr, ptr %140, align 8, !tbaa !23
  %142 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.23, ptr noundef nonnull dereferenceable(1) %141) #10
  %.not72 = icmp eq i32 %142, 0
  br i1 %.not72, label %154, label %143

143:                                              ; preds = %137
  %144 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %145 = add nsw i32 %144, 1
  store i32 %145, ptr @__assert_failures, align 4, !tbaa !5
  %146 = load ptr, ptr @stderr, align 8, !tbaa !9
  %147 = load ptr, ptr %125, align 8, !tbaa !20
  %148 = call ptr @list_at(ptr noundef %147, i32 noundef 0) #7
  %149 = getelementptr inbounds i8, ptr %148, i64 16
  %150 = load ptr, ptr %149, align 8, !tbaa !23
  %151 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %146, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.23, ptr noundef %150, ptr noundef nonnull @.str.9, i32 noundef 51) #8
  %152 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not73 = icmp eq i32 %152, 0
  br i1 %.not73, label %154, label %153

153:                                              ; preds = %143
  call void @abort() #9
  unreachable

154:                                              ; preds = %137, %143
  %155 = load ptr, ptr %125, align 8, !tbaa !20
  %156 = call ptr @list_at(ptr noundef %155, i32 noundef 1) #7
  %157 = getelementptr inbounds i8, ptr %156, i64 16
  %158 = load ptr, ptr %157, align 8, !tbaa !23
  %159 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.24, ptr noundef nonnull dereferenceable(1) %158) #10
  %.not74 = icmp eq i32 %159, 0
  br i1 %.not74, label %171, label %160

160:                                              ; preds = %154
  %161 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr @__assert_failures, align 4, !tbaa !5
  %163 = load ptr, ptr @stderr, align 8, !tbaa !9
  %164 = load ptr, ptr %125, align 8, !tbaa !20
  %165 = call ptr @list_at(ptr noundef %164, i32 noundef 1) #7
  %166 = getelementptr inbounds i8, ptr %165, i64 16
  %167 = load ptr, ptr %166, align 8, !tbaa !23
  %168 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %163, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.24, ptr noundef %167, ptr noundef nonnull @.str.9, i32 noundef 52) #8
  %169 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not75 = icmp eq i32 %169, 0
  br i1 %.not75, label %171, label %170

170:                                              ; preds = %160
  call void @abort() #9
  unreachable

171:                                              ; preds = %154, %160
  %172 = getelementptr inbounds i8, ptr %29, i64 120
  %173 = load ptr, ptr %172, align 8, !tbaa !25
  %174 = getelementptr inbounds i8, ptr %173, i64 16
  %175 = load i32, ptr %174, align 8, !tbaa !21
  %176 = icmp eq i32 %175, 3
  br i1 %176, label %184, label %177

177:                                              ; preds = %171
  %178 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %179 = add nsw i32 %178, 1
  store i32 %179, ptr @__assert_failures, align 4, !tbaa !5
  %180 = load ptr, ptr @stderr, align 8, !tbaa !9
  %181 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %180, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.9, i32 noundef 54) #8
  %182 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not76 = icmp eq i32 %182, 0
  br i1 %.not76, label %._crit_edge99, label %183

._crit_edge99:                                    ; preds = %177
  %.pre100 = load ptr, ptr %172, align 8, !tbaa !25
  br label %184

183:                                              ; preds = %177
  call void @abort() #9
  unreachable

184:                                              ; preds = %._crit_edge99, %171
  %185 = phi ptr [ %.pre100, %._crit_edge99 ], [ %173, %171 ]
  %186 = call ptr @list_at(ptr noundef %185, i32 noundef 0) #7
  %187 = getelementptr inbounds i8, ptr %186, i64 16
  %188 = load ptr, ptr %187, align 8, !tbaa !23
  %189 = load ptr, ptr %188, align 8, !tbaa !26
  %190 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.26, ptr noundef nonnull dereferenceable(1) %189) #10
  %.not77 = icmp eq i32 %190, 0
  br i1 %.not77, label %198, label %191

191:                                              ; preds = %184
  %192 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr @__assert_failures, align 4, !tbaa !5
  %194 = load ptr, ptr @stderr, align 8, !tbaa !9
  %195 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %194, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.26, ptr noundef %189, ptr noundef nonnull @.str.9, i32 noundef 57) #8
  %196 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not78 = icmp eq i32 %196, 0
  br i1 %.not78, label %198, label %197

197:                                              ; preds = %191
  call void @abort() #9
  unreachable

198:                                              ; preds = %184, %191
  %199 = getelementptr inbounds i8, ptr %188, i64 16
  %200 = load ptr, ptr %199, align 8, !tbaa !28
  %201 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.27, ptr noundef nonnull dereferenceable(1) %200) #10
  %.not79 = icmp eq i32 %201, 0
  br i1 %.not79, label %209, label %202

202:                                              ; preds = %198
  %203 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr @__assert_failures, align 4, !tbaa !5
  %205 = load ptr, ptr @stderr, align 8, !tbaa !9
  %206 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %205, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.27, ptr noundef %200, ptr noundef nonnull @.str.9, i32 noundef 58) #8
  %207 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not80 = icmp eq i32 %207, 0
  br i1 %.not80, label %209, label %208

208:                                              ; preds = %202
  call void @abort() #9
  unreachable

209:                                              ; preds = %202, %198
  %210 = load ptr, ptr %172, align 8, !tbaa !25
  %211 = call ptr @list_at(ptr noundef %210, i32 noundef 1) #7
  %212 = getelementptr inbounds i8, ptr %211, i64 16
  %213 = load ptr, ptr %212, align 8, !tbaa !23
  %214 = load ptr, ptr %213, align 8, !tbaa !26
  %215 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.28, ptr noundef nonnull dereferenceable(1) %214) #10
  %.not81 = icmp eq i32 %215, 0
  br i1 %.not81, label %223, label %216

216:                                              ; preds = %209
  %217 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %218 = add nsw i32 %217, 1
  store i32 %218, ptr @__assert_failures, align 4, !tbaa !5
  %219 = load ptr, ptr @stderr, align 8, !tbaa !9
  %220 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %219, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.28, ptr noundef %214, ptr noundef nonnull @.str.9, i32 noundef 61) #8
  %221 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not82 = icmp eq i32 %221, 0
  br i1 %.not82, label %223, label %222

222:                                              ; preds = %216
  call void @abort() #9
  unreachable

223:                                              ; preds = %209, %216
  %224 = getelementptr inbounds i8, ptr %213, i64 16
  %225 = load ptr, ptr %224, align 8, !tbaa !28
  %226 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.29, ptr noundef nonnull dereferenceable(1) %225) #10
  %.not83 = icmp eq i32 %226, 0
  br i1 %.not83, label %234, label %227

227:                                              ; preds = %223
  %228 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr @__assert_failures, align 4, !tbaa !5
  %230 = load ptr, ptr @stderr, align 8, !tbaa !9
  %231 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %230, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.29, ptr noundef %225, ptr noundef nonnull @.str.9, i32 noundef 62) #8
  %232 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not84 = icmp eq i32 %232, 0
  br i1 %.not84, label %234, label %233

233:                                              ; preds = %227
  call void @abort() #9
  unreachable

234:                                              ; preds = %227, %223
  %235 = load ptr, ptr %172, align 8, !tbaa !25
  %236 = call ptr @list_at(ptr noundef %235, i32 noundef 2) #7
  %237 = getelementptr inbounds i8, ptr %236, i64 16
  %238 = load ptr, ptr %237, align 8, !tbaa !23
  %239 = load ptr, ptr %238, align 8, !tbaa !26
  %240 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.30, ptr noundef nonnull dereferenceable(1) %239) #10
  %.not85 = icmp eq i32 %240, 0
  br i1 %.not85, label %248, label %241

241:                                              ; preds = %234
  %242 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr @__assert_failures, align 4, !tbaa !5
  %244 = load ptr, ptr @stderr, align 8, !tbaa !9
  %245 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %244, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.30, ptr noundef %239, ptr noundef nonnull @.str.9, i32 noundef 65) #8
  %246 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not86 = icmp eq i32 %246, 0
  br i1 %.not86, label %248, label %247

247:                                              ; preds = %241
  call void @abort() #9
  unreachable

248:                                              ; preds = %234, %241
  %249 = getelementptr inbounds i8, ptr %238, i64 16
  %250 = load ptr, ptr %249, align 8, !tbaa !28
  %251 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.29, ptr noundef nonnull dereferenceable(1) %250) #10
  %.not87 = icmp eq i32 %251, 0
  br i1 %.not87, label %.critedge98, label %252

252:                                              ; preds = %248
  %253 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr @__assert_failures, align 4, !tbaa !5
  %255 = load ptr, ptr @stderr, align 8, !tbaa !9
  %256 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %255, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.29, ptr noundef %250, ptr noundef nonnull @.str.9, i32 noundef 66) #8
  %257 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not88 = icmp eq i32 %257, 0
  br i1 %.not88, label %.critedge98, label %258

258:                                              ; preds = %252
  call void @abort() #9
  unreachable

.critedge98:                                      ; preds = %252, %248
  call void @clib_package_free(ptr noundef nonnull %29) #7
  call void @__describe_after_spec(ptr noundef nonnull @.str.31, i32 noundef %28)
  %259 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %2) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(112) %2, ptr noundef nonnull align 16 dereferenceable(112) @__const.main.json.32, i64 112, i1 false)
  %260 = call ptr @clib_package_new(ptr noundef nonnull %2, i32 noundef 0) #7
  %.not52 = icmp eq ptr %260, null
  br i1 %.not52, label %261, label %268

261:                                              ; preds = %.critedge98
  %262 = load i32, ptr @__assert_failures, align 4, !tbaa !5
  %263 = add nsw i32 %262, 1
  store i32 %263, ptr @__assert_failures, align 4, !tbaa !5
  %264 = load ptr, ptr @stderr, align 8, !tbaa !9
  %265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %264, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.9, i32 noundef 81) #8
  %266 = load i32, ptr @__assert_bail, align 4, !tbaa !5
  %.not53 = icmp eq i32 %266, 0
  br i1 %.not53, label %268, label %267

267:                                              ; preds = %261
  call void @abort() #9
  unreachable

268:                                              ; preds = %261, %.critedge98
  call void @clib_package_free(ptr noundef %260) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %2) #7
  call void @__describe_after_spec(ptr noundef nonnull @.str.33, i32 noundef %259)
  call void @llvm.lifetime.end.p0(i64 235, ptr nonnull %1) #7
  %269 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.34)
  br label %.critedge
}

declare i32 @clib_cache_init(i64 noundef) local_unnamed_addr #1

declare i32 @rimraf(ptr noundef) local_unnamed_addr #1

declare ptr @clib_cache_dir() local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare ptr @clib_package_new(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

; Function Attrs: noreturn nounwind
declare void @abort() local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #6

declare ptr @list_at(ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @clib_package_free(ptr noundef) local_unnamed_addr #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { cold nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { nounwind willreturn memory(read) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 32}
!12 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !6, i64 152}
!13 = !{!12, !10, i64 48}
!14 = !{!12, !10, i64 0}
!15 = !{!12, !10, i64 80}
!16 = !{!12, !10, i64 56}
!17 = !{!12, !10, i64 40}
!18 = !{!12, !10, i64 8}
!19 = !{!12, !10, i64 16}
!20 = !{!12, !10, i64 136}
!21 = !{!22, !6, i64 16}
!22 = !{!"", !10, i64 0, !10, i64 8, !6, i64 16, !10, i64 24, !10, i64 32}
!23 = !{!24, !10, i64 16}
!24 = !{!"list_node", !10, i64 0, !10, i64 8, !10, i64 16}
!25 = !{!12, !10, i64 120}
!26 = !{!27, !10, i64 0}
!27 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16}
!28 = !{!27, !10, i64 16}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,LoopRotatePass,SROAPass,SimplifyCFGPass,TailCallElimPass