; LLVM IR from ponylang/ponyc :: src/libponyc/expr (lambda)

; 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.pass_opt_t = type { i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i64, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.typecheck_t, ptr, ptr }
%struct.typecheck_t = type { ptr, %struct.typecheck_stats_t, ptr }
%struct.typecheck_stats_t = type { i64, i64, i64, i64 }
%struct.printbuf_t = type { ptr, i64, i64 }

@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [75 x i8], align 1
@__func__.expr_lambda = external hidden unnamed_addr constant [12 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @expr_lambda(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca [10 x ptr], align 16
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca [7 x ptr], align 16
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i8, align 1
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca i8, align 1
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca i8, align 1
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = icmp ne ptr %77, null
  br i1 %78, label %79, label %80

79:                                               ; preds = %2
  br label %81

80:                                               ; preds = %2
  call void @ponyint_assert_fail(ptr noundef @.str, ptr noundef @.str.1, i64 noundef 220, ptr noundef @__func__.expr_lambda)
  br label %81

81:                                               ; preds = %80, %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = load ptr, ptr %82, align 8, !tbaa !5
  store ptr %83, ptr %6, align 8, !tbaa !5
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = icmp ne ptr %84, null
  br i1 %85, label %86, label %87

86:                                               ; preds = %81
  br label %88

87:                                               ; preds = %81
  call void @ponyint_assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i64 noundef 222, ptr noundef @__func__.expr_lambda)
  br label %88

88:                                               ; preds = %87, %86
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 80, ptr %16) #3
  store ptr %7, ptr %16, align 8, !tbaa !5
  %89 = getelementptr inbounds ptr, ptr %16, i64 1
  store ptr %8, ptr %89, align 8, !tbaa !5
  %90 = getelementptr inbounds ptr, ptr %16, i64 2
  store ptr %9, ptr %90, align 8, !tbaa !5
  %91 = getelementptr inbounds ptr, ptr %16, i64 3
  store ptr %10, ptr %91, align 8, !tbaa !5
  %92 = getelementptr inbounds ptr, ptr %16, i64 4
  store ptr %11, ptr %92, align 8, !tbaa !5
  %93 = getelementptr inbounds ptr, ptr %16, i64 5
  store ptr %12, ptr %93, align 8, !tbaa !5
  %94 = getelementptr inbounds ptr, ptr %16, i64 6
  store ptr %13, ptr %94, align 8, !tbaa !5
  %95 = getelementptr inbounds ptr, ptr %16, i64 7
  store ptr %14, ptr %95, align 8, !tbaa !5
  %96 = getelementptr inbounds ptr, ptr %16, i64 8
  store ptr %15, ptr %96, align 8, !tbaa !5
  %97 = getelementptr inbounds ptr, ptr %16, i64 9
  store ptr null, ptr %97, align 8, !tbaa !5
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = getelementptr inbounds [10 x ptr], ptr %16, i64 0, i64 0
  call void @ast_get_children(ptr noundef %98, i64 noundef 9, ptr noundef %99)
  call void @llvm.lifetime.end.p0(i64 80, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %100 = load ptr, ptr %6, align 8, !tbaa !5
  %101 = call ptr @ast_consumeannotation(ptr noundef %100)
  store ptr %101, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %102 = load ptr, ptr %4, align 8, !tbaa !5
  %103 = load ptr, ptr %6, align 8, !tbaa !5
  %104 = call ptr @find_antecedent_type(ptr noundef %102, ptr noundef %103, ptr noundef null)
  store ptr %104, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  store ptr null, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  store ptr null, ptr %20, align 8, !tbaa !5
  %105 = load ptr, ptr %18, align 8, !tbaa !5
  %106 = call zeroext i1 @is_typecheck_error(ptr noundef %105)
  br i1 %106, label %110, label %107

107:                                              ; preds = %88
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = load ptr, ptr %18, align 8, !tbaa !5
  call void @find_possible_fun_defs(ptr noundef %108, ptr noundef %109, ptr noundef %19, ptr noundef %20)
  br label %110

110:                                              ; preds = %107, %88
  %111 = load ptr, ptr %19, align 8, !tbaa !5
  %112 = call i64 @astlist_length(ptr noundef %111)
  %113 = icmp ugt i64 %112, 1
  br i1 %113, label %114, label %195

114:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  store ptr null, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  %115 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %115, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  %116 = load ptr, ptr %20, align 8, !tbaa !5
  store ptr %116, ptr %24, align 8, !tbaa !5
  br label %117

117:                                              ; preds = %185, %114
  %118 = load ptr, ptr %23, align 8, !tbaa !5
  %119 = icmp ne ptr %118, null
  br i1 %119, label %120, label %123

120:                                              ; preds = %117
  %121 = load ptr, ptr %24, align 8, !tbaa !5
  %122 = icmp ne ptr %121, null
  br label %123

123:                                              ; preds = %120, %117
  %124 = phi i1 [ false, %117 ], [ %122, %120 ]
  br i1 %124, label %125, label %190

125:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  %126 = load ptr, ptr %23, align 8, !tbaa !5
  %127 = call ptr @astlist_data(ptr noundef %126)
  store ptr %127, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  %128 = load ptr, ptr %24, align 8, !tbaa !5
  %129 = call ptr @astlist_data(ptr noundef %128)
  store ptr %129, ptr %26, align 8, !tbaa !5
  %130 = load ptr, ptr %25, align 8, !tbaa !5
  %131 = call zeroext i1 @is_typecheck_error(ptr noundef %130)
  br i1 %131, label %132, label %133

132:                                              ; preds = %125
  store i32 4, ptr %27, align 4
  br label %182

133:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 56, ptr %34) #3
  store ptr %28, ptr %34, align 8, !tbaa !5
  %134 = getelementptr inbounds ptr, ptr %34, i64 1
  store ptr %29, ptr %134, align 8, !tbaa !5
  %135 = getelementptr inbounds ptr, ptr %34, i64 2
  store ptr %30, ptr %135, align 8, !tbaa !5
  %136 = getelementptr inbounds ptr, ptr %34, i64 3
  store ptr %31, ptr %136, align 8, !tbaa !5
  %137 = getelementptr inbounds ptr, ptr %34, i64 4
  store ptr %32, ptr %137, align 8, !tbaa !5
  %138 = getelementptr inbounds ptr, ptr %34, i64 5
  store ptr %33, ptr %138, align 8, !tbaa !5
  %139 = getelementptr inbounds ptr, ptr %34, i64 6
  store ptr null, ptr %139, align 8, !tbaa !5
  %140 = load ptr, ptr %25, align 8, !tbaa !5
  %141 = getelementptr inbounds [7 x ptr], ptr %34, i64 0, i64 0
  call void @ast_get_children(ptr noundef %140, i64 noundef 6, ptr noundef %141)
  call void @llvm.lifetime.end.p0(i64 56, ptr %34) #3
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = call i64 @ast_childcount(ptr noundef %142)
  %144 = load ptr, ptr %31, align 8, !tbaa !5
  %145 = call i64 @ast_childcount(ptr noundef %144)
  %146 = icmp ne i64 %143, %145
  br i1 %146, label %147, label %148

147:                                              ; preds = %133
  store i32 4, ptr %27, align 4
  br label %181

148:                                              ; preds = %133
  %149 = load ptr, ptr %7, align 8, !tbaa !5
  %150 = call i32 @ast_id(ptr noundef %149)
  %151 = icmp ne i32 %150, 2
  br i1 %151, label %152, label %163

152:                                              ; preds = %148
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = call i32 @ast_id(ptr noundef %153)
  %155 = icmp ne i32 %154, 37
  br i1 %155, label %156, label %163

156:                                              ; preds = %152
  %157 = load ptr, ptr %28, align 8, !tbaa !5
  %158 = call i32 @ast_id(ptr noundef %157)
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  %160 = call i32 @ast_id(ptr noundef %159)
  %161 = call zeroext i1 @is_cap_sub_cap(i32 noundef %158, i32 noundef 2, i32 noundef %160, i32 noundef 2)
  br i1 %161, label %163, label %162

162:                                              ; preds = %156
  store i32 4, ptr %27, align 4
  br label %181

163:                                              ; preds = %156, %152, %148
  %164 = load ptr, ptr %15, align 8, !tbaa !5
  %165 = call i32 @ast_id(ptr noundef %164)
  %166 = icmp ne i32 %165, 2
  br i1 %166, label %167, label %174

167:                                              ; preds = %163
  %168 = load ptr, ptr %15, align 8, !tbaa !5
  %169 = call i32 @ast_id(ptr noundef %168)
  %170 = load ptr, ptr %26, align 8, !tbaa !5
  %171 = call i32 @ast_id(ptr noundef %170)
  %172 = call zeroext i1 @is_cap_sub_cap(i32 noundef %169, i32 noundef 2, i32 noundef %171, i32 noundef 2)
  br i1 %172, label %174, label %173

173:                                              ; preds = %167
  store i32 4, ptr %27, align 4
  br label %181

174:                                              ; preds = %167, %163
  %175 = load ptr, ptr %21, align 8, !tbaa !5
  %176 = load ptr, ptr %25, align 8, !tbaa !5
  %177 = call ptr @astlist_push(ptr noundef %175, ptr noundef %176)
  store ptr %177, ptr %21, align 8, !tbaa !5
  %178 = load ptr, ptr %22, align 8, !tbaa !5
  %179 = load ptr, ptr %26, align 8, !tbaa !5
  %180 = call ptr @astlist_push(ptr noundef %178, ptr noundef %179)
  store ptr %180, ptr %22, align 8, !tbaa !5
  store i32 0, ptr %27, align 4
  br label %181

181:                                              ; preds = %174, %173, %162, %147
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  br label %182

182:                                              ; preds = %181, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  %183 = load i32, ptr %27, align 4
  switch i32 %183, label %751 [
    i32 0, label %184
    i32 4, label %185
  ]

184:                                              ; preds = %182
  br label %185

185:                                              ; preds = %184, %182
  %186 = load ptr, ptr %23, align 8, !tbaa !5
  %187 = call ptr @astlist_next(ptr noundef %186)
  store ptr %187, ptr %23, align 8, !tbaa !5
  %188 = load ptr, ptr %24, align 8, !tbaa !5
  %189 = call ptr @astlist_next(ptr noundef %188)
  store ptr %189, ptr %24, align 8, !tbaa !5
  br label %117, !llvm.loop !9

190:                                              ; preds = %123
  %191 = load ptr, ptr %19, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %191)
  %192 = load ptr, ptr %20, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %192)
  %193 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %193, ptr %19, align 8, !tbaa !5
  %194 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %194, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  br label %195

195:                                              ; preds = %190, %110
  %196 = load ptr, ptr %19, align 8, !tbaa !5
  %197 = call i64 @astlist_length(ptr noundef %196)
  %198 = icmp eq i64 %197, 1
  br i1 %198, label %199, label %269

199:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  %200 = load ptr, ptr %19, align 8, !tbaa !5
  %201 = call ptr @astlist_data(ptr noundef %200)
  store ptr %201, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  %202 = load ptr, ptr %20, align 8, !tbaa !5
  %203 = call ptr @astlist_data(ptr noundef %202)
  store ptr %203, ptr %36, align 8, !tbaa !5
  %204 = load ptr, ptr %35, align 8, !tbaa !5
  %205 = call zeroext i1 @is_typecheck_error(ptr noundef %204)
  br i1 %205, label %267, label %206

206:                                              ; preds = %199
  %207 = load ptr, ptr %15, align 8, !tbaa !5
  %208 = call i32 @ast_id(ptr noundef %207)
  %209 = icmp eq i32 %208, 2
  br i1 %209, label %210, label %212

210:                                              ; preds = %206
  %211 = load ptr, ptr %36, align 8, !tbaa !5
  call void @ast_replace(ptr noundef %15, ptr noundef %211)
  br label %212

212:                                              ; preds = %210, %206
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = call i32 @ast_id(ptr noundef %213)
  %215 = icmp eq i32 %214, 2
  br i1 %215, label %216, label %219

216:                                              ; preds = %212
  %217 = load ptr, ptr %35, align 8, !tbaa !5
  %218 = call ptr @ast_child(ptr noundef %217)
  call void @ast_replace(ptr noundef %7, ptr noundef %218)
  br label %219

219:                                              ; preds = %216, %212
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = call i32 @ast_id(ptr noundef %220)
  %222 = icmp eq i32 %221, 2
  br i1 %222, label %223, label %226

223:                                              ; preds = %219
  %224 = load ptr, ptr %35, align 8, !tbaa !5
  %225 = call ptr @ast_childidx(ptr noundef %224, i64 noundef 4)
  call void @ast_replace(ptr noundef %12, ptr noundef %225)
  br label %226

226:                                              ; preds = %223, %219
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  %227 = load ptr, ptr %10, align 8, !tbaa !5
  %228 = call ptr @ast_child(ptr noundef %227)
  store ptr %228, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  %229 = load ptr, ptr %35, align 8, !tbaa !5
  %230 = call ptr @ast_childidx(ptr noundef %229, i64 noundef 3)
  %231 = call ptr @ast_child(ptr noundef %230)
  store ptr %231, ptr %38, align 8, !tbaa !5
  br label %232

232:                                              ; preds = %261, %226
  %233 = load ptr, ptr %37, align 8, !tbaa !5
  %234 = icmp ne ptr %233, null
  br i1 %234, label %235, label %238

235:                                              ; preds = %232
  %236 = load ptr, ptr %38, align 8, !tbaa !5
  %237 = icmp ne ptr %236, null
  br label %238

238:                                              ; preds = %235, %232
  %239 = phi i1 [ false, %232 ], [ %237, %235 ]
  br i1 %239, label %240, label %266

240:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  %241 = load ptr, ptr %37, align 8, !tbaa !5
  %242 = call ptr @ast_child(ptr noundef %241)
  store ptr %242, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  %243 = load ptr, ptr %39, align 8, !tbaa !5
  %244 = call ptr @ast_sibling(ptr noundef %243)
  store ptr %244, ptr %40, align 8, !tbaa !5
  %245 = load ptr, ptr %39, align 8, !tbaa !5
  %246 = call ptr @ast_name(ptr noundef %245)
  %247 = call zeroext i1 @is_name_dontcare(ptr noundef %246)
  br i1 %247, label %248, label %253

248:                                              ; preds = %240
  %249 = load ptr, ptr %38, align 8, !tbaa !5
  %250 = call ptr @ast_child(ptr noundef %249)
  call void @ast_replace(ptr noundef %39, ptr noundef %250)
  %251 = load ptr, ptr %38, align 8, !tbaa !5
  %252 = call ptr @ast_childidx(ptr noundef %251, i64 noundef 1)
  call void @ast_replace(ptr noundef %40, ptr noundef %252)
  br label %261

253:                                              ; preds = %240
  %254 = load ptr, ptr %40, align 8, !tbaa !5
  %255 = call i32 @ast_id(ptr noundef %254)
  %256 = icmp eq i32 %255, 2
  br i1 %256, label %257, label %260

257:                                              ; preds = %253
  %258 = load ptr, ptr %38, align 8, !tbaa !5
  %259 = call ptr @ast_childidx(ptr noundef %258, i64 noundef 1)
  call void @ast_replace(ptr noundef %40, ptr noundef %259)
  br label %260

260:                                              ; preds = %257, %253
  br label %261

261:                                              ; preds = %260, %248
  %262 = load ptr, ptr %37, align 8, !tbaa !5
  %263 = call ptr @ast_sibling(ptr noundef %262)
  store ptr %263, ptr %37, align 8, !tbaa !5
  %264 = load ptr, ptr %38, align 8, !tbaa !5
  %265 = call ptr @ast_sibling(ptr noundef %264)
  store ptr %265, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  br label %232, !llvm.loop !11

266:                                              ; preds = %238
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  br label %267

267:                                              ; preds = %266, %199
  %268 = load ptr, ptr %35, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %268)
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  br label %269

269:                                              ; preds = %267, %195
  %270 = load ptr, ptr %20, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %270)
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  %271 = load ptr, ptr %10, align 8, !tbaa !5
  %272 = call ptr @ast_child(ptr noundef %271)
  store ptr %272, ptr %41, align 8, !tbaa !5
  br label %273

273:                                              ; preds = %309, %269
  %274 = load ptr, ptr %41, align 8, !tbaa !5
  %275 = icmp ne ptr %274, null
  br i1 %275, label %276, label %312

276:                                              ; preds = %273
  %277 = load ptr, ptr %41, align 8, !tbaa !5
  %278 = call ptr @ast_childidx(ptr noundef %277, i64 noundef 1)
  %279 = call i32 @ast_id(ptr noundef %278)
  %280 = icmp eq i32 %279, 2
  br i1 %280, label %281, label %309

281:                                              ; preds = %276
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.pass_opt_t, ptr %282, i32 0, i32 36
  %284 = getelementptr inbounds %struct.typecheck_t, ptr %283, i32 0, i32 2
  %285 = load ptr, ptr %284, align 8, !tbaa !12
  %286 = load ptr, ptr %41, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %285, ptr noundef %286, ptr noundef @.str.3)
  %287 = load ptr, ptr %19, align 8, !tbaa !5
  %288 = call i64 @astlist_length(ptr noundef %287)
  %289 = icmp ugt i64 %288, 1
  br i1 %289, label %290, label %307

290:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  %291 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %291, ptr %42, align 8, !tbaa !5
  br label %292

292:                                              ; preds = %303, %290
  %293 = load ptr, ptr %42, align 8, !tbaa !5
  %294 = icmp ne ptr %293, null
  br i1 %294, label %296, label %295

295:                                              ; preds = %292
  store i32 9, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  br label %306

296:                                              ; preds = %292
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.pass_opt_t, ptr %297, i32 0, i32 36
  %299 = getelementptr inbounds %struct.typecheck_t, ptr %298, i32 0, i32 2
  %300 = load ptr, ptr %299, align 8, !tbaa !12
  %301 = load ptr, ptr %42, align 8, !tbaa !5
  %302 = call ptr @astlist_data(ptr noundef %301)
  call void (ptr, ptr, ptr, ...) @ast_error_continue(ptr noundef %300, ptr noundef %302, ptr noundef @.str.4)
  br label %303

303:                                              ; preds = %296
  %304 = load ptr, ptr %42, align 8, !tbaa !5
  %305 = call ptr @astlist_next(ptr noundef %304)
  store ptr %305, ptr %42, align 8, !tbaa !5
  br label %292, !llvm.loop !19

306:                                              ; preds = %295
  br label %307

307:                                              ; preds = %306, %281
  %308 = load ptr, ptr %19, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %308)
  store i1 false, ptr %3, align 1
  store i32 1, ptr %27, align 4
  br label %749

309:                                              ; preds = %276
  %310 = load ptr, ptr %41, align 8, !tbaa !5
  %311 = call ptr @ast_sibling(ptr noundef %310)
  store ptr %311, ptr %41, align 8, !tbaa !5
  br label %273, !llvm.loop !20

312:                                              ; preds = %273
  %313 = load ptr, ptr %19, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %313)
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #3
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = call i32 @ast_id(ptr noundef %314)
  %316 = icmp eq i32 %315, 80
  %317 = zext i1 %316 to i8
  store i8 %317, ptr %43, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  %318 = load ptr, ptr %6, align 8, !tbaa !5
  %319 = call ptr @ast_from(ptr noundef %318, i32 noundef 139)
  store ptr %319, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  store ptr null, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #3
  store i8 0, ptr %46, align 1, !tbaa !21
  %320 = load i8, ptr %43, align 1, !tbaa !21, !range !22, !noundef !23
  %321 = trunc i8 %320 to i1
  br i1 %321, label %322, label %329

322:                                              ; preds = %312
  %323 = load ptr, ptr %11, align 8, !tbaa !5
  %324 = call i32 @ast_id(ptr noundef %323)
  %325 = icmp eq i32 %324, 2
  br i1 %325, label %326, label %327

326:                                              ; preds = %322
  br label %328

327:                                              ; preds = %322
  call void @ponyint_assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i64 noundef 369, ptr noundef @__func__.expr_lambda)
  br label %328

328:                                              ; preds = %327, %326
  br label %329

329:                                              ; preds = %328, %312
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #3
  %330 = load ptr, ptr %11, align 8, !tbaa !5
  %331 = call ptr @ast_child(ptr noundef %330)
  store ptr %331, ptr %47, align 8, !tbaa !5
  br label %332

332:                                              ; preds = %353, %329
  %333 = load ptr, ptr %47, align 8, !tbaa !5
  %334 = icmp ne ptr %333, null
  br i1 %334, label %336, label %335

335:                                              ; preds = %332
  store i32 12, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  br label %356

336:                                              ; preds = %332
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  store ptr null, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #3
  %337 = load ptr, ptr %4, align 8, !tbaa !5
  %338 = load ptr, ptr %47, align 8, !tbaa !5
  %339 = call zeroext i1 @make_capture_field(ptr noundef %337, ptr noundef %338, ptr noundef %48)
  %340 = zext i1 %339 to i8
  store i8 %340, ptr %49, align 1, !tbaa !21
  %341 = load ptr, ptr %48, align 8, !tbaa !5
  %342 = icmp ne ptr %341, null
  br i1 %342, label %343, label %347

343:                                              ; preds = %336
  %344 = load ptr, ptr %44, align 8, !tbaa !5
  %345 = load ptr, ptr %48, align 8, !tbaa !5
  %346 = call ptr @ast_list_append(ptr noundef %344, ptr noundef %45, ptr noundef %345)
  br label %352

347:                                              ; preds = %336
  %348 = load i8, ptr %49, align 1, !tbaa !21, !range !22, !noundef !23
  %349 = trunc i8 %348 to i1
  br i1 %349, label %351, label %350

350:                                              ; preds = %347
  store i8 1, ptr %46, align 1, !tbaa !21
  br label %351

351:                                              ; preds = %350, %347
  br label %352

352:                                              ; preds = %351, %343
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  br label %353

353:                                              ; preds = %352
  %354 = load ptr, ptr %47, align 8, !tbaa !5
  %355 = call ptr @ast_sibling(ptr noundef %354)
  store ptr %355, ptr %47, align 8, !tbaa !5
  br label %332, !llvm.loop !24

356:                                              ; preds = %335
  %357 = load i8, ptr %46, align 1, !tbaa !21, !range !22, !noundef !23
  %358 = trunc i8 %357 to i1
  br i1 %358, label %359, label %361

359:                                              ; preds = %356
  %360 = load ptr, ptr %44, align 8, !tbaa !5
  call void @ast_free(ptr noundef %360)
  store i1 false, ptr %3, align 1
  store i32 1, ptr %27, align 4
  br label %748

361:                                              ; preds = %356
  %362 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %362, i32 noundef 8192)
  %363 = load ptr, ptr %10, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %363, i32 noundef 8192)
  %364 = load ptr, ptr %12, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %364, i32 noundef 8192)
  %365 = load ptr, ptr %14, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %365, i32 noundef 8192)
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #3
  store ptr @.str.6, ptr %50, align 8, !tbaa !5
  %366 = load ptr, ptr %8, align 8, !tbaa !5
  %367 = call i32 @ast_id(ptr noundef %366)
  %368 = icmp eq i32 %367, 8
  br i1 %368, label %369, label %372

369:                                              ; preds = %361
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  %371 = call ptr @ast_name(ptr noundef %370)
  store ptr %371, ptr %50, align 8, !tbaa !5
  br label %372

372:                                              ; preds = %369, %361
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #3
  %373 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %373, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #3
  store ptr null, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #3
  store ptr null, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #3
  store ptr null, ptr %55, align 8, !tbaa !5
  %374 = load ptr, ptr %52, align 8, !tbaa !5
  %375 = call ptr @ast_from(ptr noundef %374, i32 noundef 89)
  store ptr %375, ptr %55, align 8, !tbaa !5
  %376 = load ptr, ptr %53, align 8, !tbaa !5
  %377 = icmp eq ptr %376, null
  br i1 %377, label %378, label %380

378:                                              ; preds = %372
  %379 = load ptr, ptr %55, align 8, !tbaa !5
  store ptr %379, ptr %53, align 8, !tbaa !5
  br label %392

380:                                              ; preds = %372
  %381 = load ptr, ptr %54, align 8, !tbaa !5
  %382 = icmp eq ptr %381, null
  br i1 %382, label %383, label %387

383:                                              ; preds = %380
  %384 = load ptr, ptr %53, align 8, !tbaa !5
  %385 = load ptr, ptr %55, align 8, !tbaa !5
  %386 = call ptr @ast_add(ptr noundef %384, ptr noundef %385)
  store ptr %386, ptr %54, align 8, !tbaa !5
  br label %391

387:                                              ; preds = %380
  %388 = load ptr, ptr %54, align 8, !tbaa !5
  %389 = load ptr, ptr %55, align 8, !tbaa !5
  %390 = call ptr @ast_add_sibling(ptr noundef %388, ptr noundef %389)
  store ptr %390, ptr %54, align 8, !tbaa !5
  br label %391

391:                                              ; preds = %387, %383
  br label %392

392:                                              ; preds = %391, %378
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  %393 = load ptr, ptr %55, align 8, !tbaa !5
  store ptr %393, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #3
  store ptr null, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #3
  store ptr null, ptr %58, align 8, !tbaa !5
  %394 = load ptr, ptr %56, align 8, !tbaa !5
  call void @ast_scope(ptr noundef %394)
  %395 = load ptr, ptr %56, align 8, !tbaa !5
  %396 = load ptr, ptr %17, align 8, !tbaa !5
  call void @ast_setannotation(ptr noundef %395, ptr noundef %396)
  %397 = load ptr, ptr %56, align 8, !tbaa !5
  %398 = icmp eq ptr %397, null
  br i1 %398, label %399, label %401

399:                                              ; preds = %392
  %400 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %400, ptr %56, align 8, !tbaa !5
  br label %413

401:                                              ; preds = %392
  %402 = load ptr, ptr %57, align 8, !tbaa !5
  %403 = icmp eq ptr %402, null
  br i1 %403, label %404, label %408

404:                                              ; preds = %401
  %405 = load ptr, ptr %56, align 8, !tbaa !5
  %406 = load ptr, ptr %7, align 8, !tbaa !5
  %407 = call ptr @ast_add(ptr noundef %405, ptr noundef %406)
  store ptr %407, ptr %57, align 8, !tbaa !5
  br label %412

408:                                              ; preds = %401
  %409 = load ptr, ptr %57, align 8, !tbaa !5
  %410 = load ptr, ptr %7, align 8, !tbaa !5
  %411 = call ptr @ast_add_sibling(ptr noundef %409, ptr noundef %410)
  store ptr %411, ptr %57, align 8, !tbaa !5
  br label %412

412:                                              ; preds = %408, %404
  br label %413

413:                                              ; preds = %412, %399
  %414 = load ptr, ptr %56, align 8, !tbaa !5
  %415 = icmp eq ptr %414, null
  br i1 %415, label %416, label %420

416:                                              ; preds = %413
  %417 = load ptr, ptr %52, align 8, !tbaa !5
  %418 = load ptr, ptr %50, align 8, !tbaa !5
  %419 = call ptr @ast_from_string(ptr noundef %417, ptr noundef %418)
  store ptr %419, ptr %56, align 8, !tbaa !5
  br label %436

420:                                              ; preds = %413
  %421 = load ptr, ptr %57, align 8, !tbaa !5
  %422 = icmp eq ptr %421, null
  br i1 %422, label %423, label %429

423:                                              ; preds = %420
  %424 = load ptr, ptr %56, align 8, !tbaa !5
  %425 = load ptr, ptr %52, align 8, !tbaa !5
  %426 = load ptr, ptr %50, align 8, !tbaa !5
  %427 = call ptr @ast_from_string(ptr noundef %425, ptr noundef %426)
  %428 = call ptr @ast_add(ptr noundef %424, ptr noundef %427)
  store ptr %428, ptr %57, align 8, !tbaa !5
  br label %435

429:                                              ; preds = %420
  %430 = load ptr, ptr %57, align 8, !tbaa !5
  %431 = load ptr, ptr %52, align 8, !tbaa !5
  %432 = load ptr, ptr %50, align 8, !tbaa !5
  %433 = call ptr @ast_from_string(ptr noundef %431, ptr noundef %432)
  %434 = call ptr @ast_add_sibling(ptr noundef %430, ptr noundef %433)
  store ptr %434, ptr %57, align 8, !tbaa !5
  br label %435

435:                                              ; preds = %429, %423
  br label %436

436:                                              ; preds = %435, %416
  %437 = load ptr, ptr %56, align 8, !tbaa !5
  %438 = icmp eq ptr %437, null
  br i1 %438, label %439, label %441

439:                                              ; preds = %436
  %440 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %440, ptr %56, align 8, !tbaa !5
  br label %453

441:                                              ; preds = %436
  %442 = load ptr, ptr %57, align 8, !tbaa !5
  %443 = icmp eq ptr %442, null
  br i1 %443, label %444, label %448

444:                                              ; preds = %441
  %445 = load ptr, ptr %56, align 8, !tbaa !5
  %446 = load ptr, ptr %9, align 8, !tbaa !5
  %447 = call ptr @ast_add(ptr noundef %445, ptr noundef %446)
  store ptr %447, ptr %57, align 8, !tbaa !5
  br label %452

448:                                              ; preds = %441
  %449 = load ptr, ptr %57, align 8, !tbaa !5
  %450 = load ptr, ptr %9, align 8, !tbaa !5
  %451 = call ptr @ast_add_sibling(ptr noundef %449, ptr noundef %450)
  store ptr %451, ptr %57, align 8, !tbaa !5
  br label %452

452:                                              ; preds = %448, %444
  br label %453

453:                                              ; preds = %452, %439
  %454 = load ptr, ptr %56, align 8, !tbaa !5
  %455 = icmp eq ptr %454, null
  br i1 %455, label %456, label %458

456:                                              ; preds = %453
  %457 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %457, ptr %56, align 8, !tbaa !5
  br label %470

458:                                              ; preds = %453
  %459 = load ptr, ptr %57, align 8, !tbaa !5
  %460 = icmp eq ptr %459, null
  br i1 %460, label %461, label %465

461:                                              ; preds = %458
  %462 = load ptr, ptr %56, align 8, !tbaa !5
  %463 = load ptr, ptr %10, align 8, !tbaa !5
  %464 = call ptr @ast_add(ptr noundef %462, ptr noundef %463)
  store ptr %464, ptr %57, align 8, !tbaa !5
  br label %469

465:                                              ; preds = %458
  %466 = load ptr, ptr %57, align 8, !tbaa !5
  %467 = load ptr, ptr %10, align 8, !tbaa !5
  %468 = call ptr @ast_add_sibling(ptr noundef %466, ptr noundef %467)
  store ptr %468, ptr %57, align 8, !tbaa !5
  br label %469

469:                                              ; preds = %465, %461
  br label %470

470:                                              ; preds = %469, %456
  %471 = load ptr, ptr %56, align 8, !tbaa !5
  %472 = icmp eq ptr %471, null
  br i1 %472, label %473, label %475

473:                                              ; preds = %470
  %474 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %474, ptr %56, align 8, !tbaa !5
  br label %487

475:                                              ; preds = %470
  %476 = load ptr, ptr %57, align 8, !tbaa !5
  %477 = icmp eq ptr %476, null
  br i1 %477, label %478, label %482

478:                                              ; preds = %475
  %479 = load ptr, ptr %56, align 8, !tbaa !5
  %480 = load ptr, ptr %12, align 8, !tbaa !5
  %481 = call ptr @ast_add(ptr noundef %479, ptr noundef %480)
  store ptr %481, ptr %57, align 8, !tbaa !5
  br label %486

482:                                              ; preds = %475
  %483 = load ptr, ptr %57, align 8, !tbaa !5
  %484 = load ptr, ptr %12, align 8, !tbaa !5
  %485 = call ptr @ast_add_sibling(ptr noundef %483, ptr noundef %484)
  store ptr %485, ptr %57, align 8, !tbaa !5
  br label %486

486:                                              ; preds = %482, %478
  br label %487

487:                                              ; preds = %486, %473
  %488 = load ptr, ptr %56, align 8, !tbaa !5
  %489 = icmp eq ptr %488, null
  br i1 %489, label %490, label %492

490:                                              ; preds = %487
  %491 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %491, ptr %56, align 8, !tbaa !5
  br label %504

492:                                              ; preds = %487
  %493 = load ptr, ptr %57, align 8, !tbaa !5
  %494 = icmp eq ptr %493, null
  br i1 %494, label %495, label %499

495:                                              ; preds = %492
  %496 = load ptr, ptr %56, align 8, !tbaa !5
  %497 = load ptr, ptr %13, align 8, !tbaa !5
  %498 = call ptr @ast_add(ptr noundef %496, ptr noundef %497)
  store ptr %498, ptr %57, align 8, !tbaa !5
  br label %503

499:                                              ; preds = %492
  %500 = load ptr, ptr %57, align 8, !tbaa !5
  %501 = load ptr, ptr %13, align 8, !tbaa !5
  %502 = call ptr @ast_add_sibling(ptr noundef %500, ptr noundef %501)
  store ptr %502, ptr %57, align 8, !tbaa !5
  br label %503

503:                                              ; preds = %499, %495
  br label %504

504:                                              ; preds = %503, %490
  %505 = load ptr, ptr %56, align 8, !tbaa !5
  %506 = icmp eq ptr %505, null
  br i1 %506, label %507, label %509

507:                                              ; preds = %504
  %508 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %508, ptr %56, align 8, !tbaa !5
  br label %521

509:                                              ; preds = %504
  %510 = load ptr, ptr %57, align 8, !tbaa !5
  %511 = icmp eq ptr %510, null
  br i1 %511, label %512, label %516

512:                                              ; preds = %509
  %513 = load ptr, ptr %56, align 8, !tbaa !5
  %514 = load ptr, ptr %14, align 8, !tbaa !5
  %515 = call ptr @ast_add(ptr noundef %513, ptr noundef %514)
  store ptr %515, ptr %57, align 8, !tbaa !5
  br label %520

516:                                              ; preds = %509
  %517 = load ptr, ptr %57, align 8, !tbaa !5
  %518 = load ptr, ptr %14, align 8, !tbaa !5
  %519 = call ptr @ast_add_sibling(ptr noundef %517, ptr noundef %518)
  store ptr %519, ptr %57, align 8, !tbaa !5
  br label %520

520:                                              ; preds = %516, %512
  br label %521

521:                                              ; preds = %520, %507
  %522 = load ptr, ptr %56, align 8, !tbaa !5
  %523 = icmp eq ptr %522, null
  br i1 %523, label %524, label %527

524:                                              ; preds = %521
  %525 = load ptr, ptr %52, align 8, !tbaa !5
  %526 = call ptr @ast_from(ptr noundef %525, i32 noundef 2)
  store ptr %526, ptr %56, align 8, !tbaa !5
  br label %541

527:                                              ; preds = %521
  %528 = load ptr, ptr %57, align 8, !tbaa !5
  %529 = icmp eq ptr %528, null
  br i1 %529, label %530, label %535

530:                                              ; preds = %527
  %531 = load ptr, ptr %56, align 8, !tbaa !5
  %532 = load ptr, ptr %52, align 8, !tbaa !5
  %533 = call ptr @ast_from(ptr noundef %532, i32 noundef 2)
  %534 = call ptr @ast_add(ptr noundef %531, ptr noundef %533)
  store ptr %534, ptr %57, align 8, !tbaa !5
  br label %540

535:                                              ; preds = %527
  %536 = load ptr, ptr %57, align 8, !tbaa !5
  %537 = load ptr, ptr %52, align 8, !tbaa !5
  %538 = call ptr @ast_from(ptr noundef %537, i32 noundef 2)
  %539 = call ptr @ast_add_sibling(ptr noundef %536, ptr noundef %538)
  store ptr %539, ptr %57, align 8, !tbaa !5
  br label %540

540:                                              ; preds = %535, %530
  br label %541

541:                                              ; preds = %540, %524
  %542 = load ptr, ptr %56, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %542)
  %543 = load ptr, ptr %56, align 8, !tbaa !5
  %544 = load ptr, ptr %57, align 8, !tbaa !5
  %545 = load ptr, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  %546 = load ptr, ptr %53, align 8, !tbaa !5
  store ptr %546, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  %547 = load ptr, ptr %44, align 8, !tbaa !5
  %548 = load ptr, ptr %51, align 8, !tbaa !5
  %549 = call ptr @ast_list_append(ptr noundef %547, ptr noundef %45, ptr noundef %548)
  %550 = load ptr, ptr %44, align 8, !tbaa !5
  call void @ast_setflag(ptr noundef %550, i32 noundef 8192)
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #3
  %551 = call ptr (...) @printbuf_new()
  store ptr %551, ptr %59, align 8, !tbaa !5
  %552 = load ptr, ptr %59, align 8, !tbaa !5
  %553 = load i8, ptr %43, align 1, !tbaa !21, !range !22, !noundef !23
  %554 = trunc i8 %553 to i1
  %555 = zext i1 %554 to i64
  %556 = select i1 %554, ptr @.str.7, ptr @.str.8
  call void (ptr, ptr, ...) @printbuf(ptr noundef %552, ptr noundef %556)
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #3
  store i8 1, ptr %60, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #3
  %557 = load ptr, ptr %10, align 8, !tbaa !5
  %558 = call ptr @ast_child(ptr noundef %557)
  store ptr %558, ptr %61, align 8, !tbaa !5
  br label %559

559:                                              ; preds = %574, %541
  %560 = load ptr, ptr %61, align 8, !tbaa !5
  %561 = icmp ne ptr %560, null
  br i1 %561, label %563, label %562

562:                                              ; preds = %559
  store i32 15, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #3
  br label %577

563:                                              ; preds = %559
  %564 = load i8, ptr %60, align 1, !tbaa !21, !range !22, !noundef !23
  %565 = trunc i8 %564 to i1
  br i1 %565, label %566, label %567

566:                                              ; preds = %563
  store i8 0, ptr %60, align 1, !tbaa !21
  br label %569

567:                                              ; preds = %563
  %568 = load ptr, ptr %59, align 8, !tbaa !5
  call void (ptr, ptr, ...) @printbuf(ptr noundef %568, ptr noundef @.str.9)
  br label %569

569:                                              ; preds = %567, %566
  %570 = load ptr, ptr %59, align 8, !tbaa !5
  %571 = load ptr, ptr %61, align 8, !tbaa !5
  %572 = call ptr @ast_childidx(ptr noundef %571, i64 noundef 1)
  %573 = call ptr @ast_print_type(ptr noundef %572)
  call void (ptr, ptr, ...) @printbuf(ptr noundef %570, ptr noundef @.str.10, ptr noundef %573)
  br label %574

574:                                              ; preds = %569
  %575 = load ptr, ptr %61, align 8, !tbaa !5
  %576 = call ptr @ast_sibling(ptr noundef %575)
  store ptr %576, ptr %61, align 8, !tbaa !5
  br label %559, !llvm.loop !25

577:                                              ; preds = %562
  %578 = load ptr, ptr %59, align 8, !tbaa !5
  call void (ptr, ptr, ...) @printbuf(ptr noundef %578, ptr noundef @.str.11)
  %579 = load ptr, ptr %12, align 8, !tbaa !5
  %580 = call i32 @ast_id(ptr noundef %579)
  %581 = icmp ne i32 %580, 2
  br i1 %581, label %582, label %586

582:                                              ; preds = %577
  %583 = load ptr, ptr %59, align 8, !tbaa !5
  %584 = load ptr, ptr %12, align 8, !tbaa !5
  %585 = call ptr @ast_print_type(ptr noundef %584)
  call void (ptr, ptr, ...) @printbuf(ptr noundef %583, ptr noundef @.str.12, ptr noundef %585)
  br label %586

586:                                              ; preds = %582, %577
  %587 = load ptr, ptr %13, align 8, !tbaa !5
  %588 = call i32 @ast_id(ptr noundef %587)
  %589 = icmp ne i32 %588, 2
  br i1 %589, label %590, label %592

590:                                              ; preds = %586
  %591 = load ptr, ptr %59, align 8, !tbaa !5
  call void (ptr, ptr, ...) @printbuf(ptr noundef %591, ptr noundef @.str.13)
  br label %592

592:                                              ; preds = %590, %586
  %593 = load ptr, ptr %59, align 8, !tbaa !5
  call void (ptr, ptr, ...) @printbuf(ptr noundef %593, ptr noundef @.str.14)
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #3
  %594 = load ptr, ptr %5, align 8, !tbaa !5
  %595 = load ptr, ptr %594, align 8, !tbaa !5
  store ptr %595, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #3
  store ptr null, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #3
  store ptr null, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #3
  store ptr null, ptr %65, align 8, !tbaa !5
  %596 = load ptr, ptr %62, align 8, !tbaa !5
  %597 = call ptr @ast_from(ptr noundef %596, i32 noundef 78)
  store ptr %597, ptr %65, align 8, !tbaa !5
  %598 = load ptr, ptr %63, align 8, !tbaa !5
  %599 = icmp eq ptr %598, null
  br i1 %599, label %600, label %602

600:                                              ; preds = %592
  %601 = load ptr, ptr %65, align 8, !tbaa !5
  store ptr %601, ptr %63, align 8, !tbaa !5
  br label %614

602:                                              ; preds = %592
  %603 = load ptr, ptr %64, align 8, !tbaa !5
  %604 = icmp eq ptr %603, null
  br i1 %604, label %605, label %609

605:                                              ; preds = %602
  %606 = load ptr, ptr %63, align 8, !tbaa !5
  %607 = load ptr, ptr %65, align 8, !tbaa !5
  %608 = call ptr @ast_add(ptr noundef %606, ptr noundef %607)
  store ptr %608, ptr %64, align 8, !tbaa !5
  br label %613

609:                                              ; preds = %602
  %610 = load ptr, ptr %64, align 8, !tbaa !5
  %611 = load ptr, ptr %65, align 8, !tbaa !5
  %612 = call ptr @ast_add_sibling(ptr noundef %610, ptr noundef %611)
  store ptr %612, ptr %64, align 8, !tbaa !5
  br label %613

613:                                              ; preds = %609, %605
  br label %614

614:                                              ; preds = %613, %600
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #3
  %615 = load ptr, ptr %65, align 8, !tbaa !5
  store ptr %615, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  store ptr null, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #3
  store ptr null, ptr %68, align 8, !tbaa !5
  %616 = load ptr, ptr %66, align 8, !tbaa !5
  %617 = load ptr, ptr %59, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.printbuf_t, ptr %617, i32 0, i32 0
  %619 = load ptr, ptr %618, align 8, !tbaa !26
  %620 = call ptr @stringtab(ptr noundef %619)
  %621 = call ptr @ast_setdata(ptr noundef %616, ptr noundef %620)
  %622 = load ptr, ptr %66, align 8, !tbaa !5
  %623 = icmp eq ptr %622, null
  br i1 %623, label %624, label %626

624:                                              ; preds = %614
  %625 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %625, ptr %66, align 8, !tbaa !5
  br label %638

626:                                              ; preds = %614
  %627 = load ptr, ptr %67, align 8, !tbaa !5
  %628 = icmp eq ptr %627, null
  br i1 %628, label %629, label %633

629:                                              ; preds = %626
  %630 = load ptr, ptr %66, align 8, !tbaa !5
  %631 = load ptr, ptr %15, align 8, !tbaa !5
  %632 = call ptr @ast_add(ptr noundef %630, ptr noundef %631)
  store ptr %632, ptr %67, align 8, !tbaa !5
  br label %637

633:                                              ; preds = %626
  %634 = load ptr, ptr %67, align 8, !tbaa !5
  %635 = load ptr, ptr %15, align 8, !tbaa !5
  %636 = call ptr @ast_add_sibling(ptr noundef %634, ptr noundef %635)
  store ptr %636, ptr %67, align 8, !tbaa !5
  br label %637

637:                                              ; preds = %633, %629
  br label %638

638:                                              ; preds = %637, %624
  %639 = load ptr, ptr %66, align 8, !tbaa !5
  %640 = icmp eq ptr %639, null
  br i1 %640, label %641, label %644

641:                                              ; preds = %638
  %642 = load ptr, ptr %62, align 8, !tbaa !5
  %643 = call ptr @ast_from(ptr noundef %642, i32 noundef 2)
  store ptr %643, ptr %66, align 8, !tbaa !5
  br label %658

644:                                              ; preds = %638
  %645 = load ptr, ptr %67, align 8, !tbaa !5
  %646 = icmp eq ptr %645, null
  br i1 %646, label %647, label %652

647:                                              ; preds = %644
  %648 = load ptr, ptr %66, align 8, !tbaa !5
  %649 = load ptr, ptr %62, align 8, !tbaa !5
  %650 = call ptr @ast_from(ptr noundef %649, i32 noundef 2)
  %651 = call ptr @ast_add(ptr noundef %648, ptr noundef %650)
  store ptr %651, ptr %67, align 8, !tbaa !5
  br label %657

652:                                              ; preds = %644
  %653 = load ptr, ptr %67, align 8, !tbaa !5
  %654 = load ptr, ptr %62, align 8, !tbaa !5
  %655 = call ptr @ast_from(ptr noundef %654, i32 noundef 2)
  %656 = call ptr @ast_add_sibling(ptr noundef %653, ptr noundef %655)
  store ptr %656, ptr %67, align 8, !tbaa !5
  br label %657

657:                                              ; preds = %652, %647
  br label %658

658:                                              ; preds = %657, %641
  %659 = load ptr, ptr %66, align 8, !tbaa !5
  %660 = icmp eq ptr %659, null
  br i1 %660, label %661, label %663

661:                                              ; preds = %658
  %662 = load ptr, ptr %44, align 8, !tbaa !5
  store ptr %662, ptr %66, align 8, !tbaa !5
  br label %675

663:                                              ; preds = %658
  %664 = load ptr, ptr %67, align 8, !tbaa !5
  %665 = icmp eq ptr %664, null
  br i1 %665, label %666, label %670

666:                                              ; preds = %663
  %667 = load ptr, ptr %66, align 8, !tbaa !5
  %668 = load ptr, ptr %44, align 8, !tbaa !5
  %669 = call ptr @ast_add(ptr noundef %667, ptr noundef %668)
  store ptr %669, ptr %67, align 8, !tbaa !5
  br label %674

670:                                              ; preds = %663
  %671 = load ptr, ptr %67, align 8, !tbaa !5
  %672 = load ptr, ptr %44, align 8, !tbaa !5
  %673 = call ptr @ast_add_sibling(ptr noundef %671, ptr noundef %672)
  store ptr %673, ptr %67, align 8, !tbaa !5
  br label %674

674:                                              ; preds = %670, %666
  br label %675

675:                                              ; preds = %674, %661
  %676 = load ptr, ptr %66, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %676)
  %677 = load ptr, ptr %66, align 8, !tbaa !5
  %678 = load ptr, ptr %67, align 8, !tbaa !5
  %679 = load ptr, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  %680 = load ptr, ptr %5, align 8, !tbaa !5
  %681 = load ptr, ptr %63, align 8, !tbaa !5
  call void @ast_replace(ptr noundef %680, ptr noundef %681)
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #3
  %682 = load ptr, ptr %59, align 8, !tbaa !5
  call void @printbuf_free(ptr noundef %682)
  %683 = load i8, ptr %43, align 1, !tbaa !21, !range !22, !noundef !23
  %684 = trunc i8 %683 to i1
  br i1 %684, label %685, label %737

685:                                              ; preds = %675
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #3
  %686 = load ptr, ptr %5, align 8, !tbaa !5
  %687 = load ptr, ptr %686, align 8, !tbaa !5
  store ptr %687, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #3
  store ptr null, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #3
  store ptr null, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #3
  store ptr null, ptr %73, align 8, !tbaa !5
  %688 = load ptr, ptr %70, align 8, !tbaa !5
  %689 = call ptr @ast_from(ptr noundef %688, i32 noundef 205)
  store ptr %689, ptr %73, align 8, !tbaa !5
  %690 = load ptr, ptr %71, align 8, !tbaa !5
  %691 = icmp eq ptr %690, null
  br i1 %691, label %692, label %694

692:                                              ; preds = %685
  %693 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %693, ptr %71, align 8, !tbaa !5
  br label %706

694:                                              ; preds = %685
  %695 = load ptr, ptr %72, align 8, !tbaa !5
  %696 = icmp eq ptr %695, null
  br i1 %696, label %697, label %701

697:                                              ; preds = %694
  %698 = load ptr, ptr %71, align 8, !tbaa !5
  %699 = load ptr, ptr %73, align 8, !tbaa !5
  %700 = call ptr @ast_add(ptr noundef %698, ptr noundef %699)
  store ptr %700, ptr %72, align 8, !tbaa !5
  br label %705

701:                                              ; preds = %694
  %702 = load ptr, ptr %72, align 8, !tbaa !5
  %703 = load ptr, ptr %73, align 8, !tbaa !5
  %704 = call ptr @ast_add_sibling(ptr noundef %702, ptr noundef %703)
  store ptr %704, ptr %72, align 8, !tbaa !5
  br label %705

705:                                              ; preds = %701, %697
  br label %706

706:                                              ; preds = %705, %692
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #3
  %707 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %707, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #3
  store ptr null, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #3
  store ptr null, ptr %76, align 8, !tbaa !5
  %708 = load ptr, ptr %74, align 8, !tbaa !5
  %709 = icmp eq ptr %708, null
  br i1 %709, label %710, label %713

710:                                              ; preds = %706
  %711 = load ptr, ptr %70, align 8, !tbaa !5
  %712 = call ptr @ast_from_string(ptr noundef %711, ptr noundef @.str.15)
  store ptr %712, ptr %74, align 8, !tbaa !5
  br label %727

713:                                              ; preds = %706
  %714 = load ptr, ptr %75, align 8, !tbaa !5
  %715 = icmp eq ptr %714, null
  br i1 %715, label %716, label %721

716:                                              ; preds = %713
  %717 = load ptr, ptr %74, align 8, !tbaa !5
  %718 = load ptr, ptr %70, align 8, !tbaa !5
  %719 = call ptr @ast_from_string(ptr noundef %718, ptr noundef @.str.15)
  %720 = call ptr @ast_add(ptr noundef %717, ptr noundef %719)
  store ptr %720, ptr %75, align 8, !tbaa !5
  br label %726

721:                                              ; preds = %713
  %722 = load ptr, ptr %75, align 8, !tbaa !5
  %723 = load ptr, ptr %70, align 8, !tbaa !5
  %724 = call ptr @ast_from_string(ptr noundef %723, ptr noundef @.str.15)
  %725 = call ptr @ast_add_sibling(ptr noundef %722, ptr noundef %724)
  store ptr %725, ptr %75, align 8, !tbaa !5
  br label %726

726:                                              ; preds = %721, %716
  br label %727

727:                                              ; preds = %726, %710
  %728 = load ptr, ptr %74, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %728)
  %729 = load ptr, ptr %74, align 8, !tbaa !5
  %730 = load ptr, ptr %75, align 8, !tbaa !5
  %731 = load ptr, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  %732 = load ptr, ptr %71, align 8, !tbaa !5
  store ptr %732, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  %733 = load ptr, ptr %69, align 8, !tbaa !5
  call void @ast_pass_record(ptr noundef %733, i32 noundef 1)
  %734 = load ptr, ptr %5, align 8, !tbaa !5
  %735 = load ptr, ptr %734, align 8, !tbaa !5
  %736 = load ptr, ptr %69, align 8, !tbaa !5
  call void @ast_setannotation(ptr noundef %735, ptr noundef %736)
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  br label %737

737:                                              ; preds = %727, %675
  %738 = load ptr, ptr %5, align 8, !tbaa !5
  %739 = load ptr, ptr %4, align 8, !tbaa !5
  %740 = call i32 @ast_visit(ptr noundef %738, ptr noundef @pass_syntax, ptr noundef null, ptr noundef %739, i32 noundef 1)
  %741 = icmp ne i32 %740, 0
  br i1 %741, label %742, label %743

742:                                              ; preds = %737
  store i1 false, ptr %3, align 1
  store i32 1, ptr %27, align 4
  br label %747

743:                                              ; preds = %737
  %744 = load ptr, ptr %5, align 8, !tbaa !5
  %745 = load ptr, ptr %4, align 8, !tbaa !5
  %746 = call zeroext i1 @ast_passes_subtree(ptr noundef %744, ptr noundef %745, i32 noundef 10)
  store i1 %746, ptr %3, align 1
  store i32 1, ptr %27, align 4
  br label %747

747:                                              ; preds = %743, %742
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  br label %748

748:                                              ; preds = %747, %359
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #3
  br label %749

749:                                              ; preds = %748, %307
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %750 = load i1, ptr %3, align 1
  ret i1 %750

751:                                              ; preds = %182
  unreachable
}

declare void @ponyint_assert_fail(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #1

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

declare void @ast_get_children(ptr noundef, i64 noundef, ptr noundef) #1

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

declare ptr @ast_consumeannotation(ptr noundef) #1

declare ptr @find_antecedent_type(ptr noundef, ptr noundef, ptr noundef) #1

declare zeroext i1 @is_typecheck_error(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @find_possible_fun_defs(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i64 @astlist_length(ptr noundef) #1

declare ptr @astlist_data(ptr noundef) #1

declare i64 @ast_childcount(ptr noundef) #1

declare i32 @ast_id(ptr noundef) #1

declare zeroext i1 @is_cap_sub_cap(i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare ptr @astlist_push(ptr noundef, ptr noundef) #1

declare ptr @astlist_next(ptr noundef) #1

declare void @astlist_free(ptr noundef) #1

declare void @ast_replace(ptr noundef, ptr noundef) #1

declare ptr @ast_child(ptr noundef) #1

declare ptr @ast_childidx(ptr noundef, i64 noundef) #1

declare ptr @ast_sibling(ptr noundef) #1

declare zeroext i1 @is_name_dontcare(ptr noundef) #1

declare ptr @ast_name(ptr noundef) #1

declare void @ast_free_unattached(ptr noundef) #1

declare void @ast_error(ptr noundef, ptr noundef, ptr noundef, ...) #1

declare void @ast_error_continue(ptr noundef, ptr noundef, ptr noundef, ...) #1

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

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @make_capture_field(ptr noundef, ptr noundef, ptr noundef) #0

declare ptr @ast_list_append(ptr noundef, ptr noundef, ptr noundef) #1

declare void @ast_free(ptr noundef) #1

declare void @ast_clearflag(ptr noundef, i32 noundef) #1

declare ptr @ast_add(ptr noundef, ptr noundef) #1

declare ptr @ast_add_sibling(ptr noundef, ptr noundef) #1

declare void @ast_scope(ptr noundef) #1

declare void @ast_setannotation(ptr noundef, ptr noundef) #1

declare ptr @ast_from_string(ptr noundef, ptr noundef) #1

declare void @ast_inheritflags(ptr noundef) #1

declare void @ast_setflag(ptr noundef, i32 noundef) #1

declare ptr @printbuf_new(...) #1

declare void @printbuf(ptr noundef, ptr noundef, ...) #1

declare ptr @ast_print_type(ptr noundef) #1

declare ptr @ast_setdata(ptr noundef, ptr noundef) #1

declare ptr @stringtab(ptr noundef) #1

declare void @printbuf_free(ptr noundef) #1

declare void @ast_pass_record(ptr noundef, i32 noundef) #1

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

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

declare zeroext i1 @ast_passes_subtree(ptr noundef, ptr noundef, i32 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 = { nounwind }

!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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!13, !6, i64 216}
!13 = !{!"pass_opt_t", !14, i64 0, !14, i64 4, !15, i64 8, !15, i64 9, !15, i64 10, !15, i64 11, !15, i64 12, !15, i64 13, !15, i64 14, !15, i64 15, !15, i64 16, !15, i64 17, !15, i64 18, !15, i64 19, !15, i64 20, !15, i64 21, !14, i64 24, !16, i64 32, !15, i64 40, !15, i64 41, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !17, i64 176, !6, i64 224, !6, i64 232}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!"typecheck_t", !6, i64 0, !18, i64 8, !6, i64 40}
!18 = !{!"typecheck_stats_t", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = !{!15, !15, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}
!26 = !{!27, !6, i64 0}
!27 = !{!"printbuf_t", !6, i64 0, !16, i64 8, !16, i64 16}


; 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"

@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [75 x i8], align 1
@__func__.expr_lambda = external hidden unnamed_addr constant [12 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @expr_lambda(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca [10 x ptr], align 16
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca [7 x ptr], align 16
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %26, label %27

26:                                               ; preds = %2
  tail call void @ponyint_assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i64 noundef 220, ptr noundef nonnull @__func__.expr_lambda) #3
  br label %27

27:                                               ; preds = %2, %26
  %28 = load ptr, ptr %1, align 8, !tbaa !5
  %.not245 = icmp eq ptr %28, null
  br i1 %.not245, label %29, label %30

29:                                               ; preds = %27
  tail call void @ponyint_assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i64 noundef 222, ptr noundef nonnull @__func__.expr_lambda) #3
  br label %30

30:                                               ; preds = %27, %29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #3
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %12) #3
  store ptr %3, ptr %12, align 16, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %12, i64 8
  store ptr %4, ptr %31, align 8, !tbaa !5
  %32 = getelementptr inbounds i8, ptr %12, i64 16
  store ptr %5, ptr %32, align 16, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %12, i64 24
  store ptr %6, ptr %33, align 8, !tbaa !5
  %34 = getelementptr inbounds i8, ptr %12, i64 32
  store ptr %7, ptr %34, align 16, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %12, i64 40
  store ptr %8, ptr %35, align 8, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %12, i64 48
  store ptr %9, ptr %36, align 16, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %12, i64 56
  store ptr %10, ptr %37, align 8, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %12, i64 64
  store ptr %11, ptr %38, align 16, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %12, i64 72
  store ptr null, ptr %39, align 8, !tbaa !5
  call void @ast_get_children(ptr noundef %28, i64 noundef 9, ptr noundef nonnull %12) #3
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %12) #3
  %40 = call ptr @ast_consumeannotation(ptr noundef %28) #3
  %41 = call ptr @find_antecedent_type(ptr noundef %0, ptr noundef %28, ptr noundef null) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #3
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #3
  store ptr null, ptr %14, align 8, !tbaa !5
  %42 = call zeroext i1 @is_typecheck_error(ptr noundef %41) #3
  br i1 %42, label %44, label %43

43:                                               ; preds = %30
  call void @find_possible_fun_defs(ptr noundef %0, ptr noundef %41, ptr noundef nonnull %13, ptr noundef nonnull %14)
  br label %44

44:                                               ; preds = %43, %30
  %45 = load ptr, ptr %13, align 8, !tbaa !5
  %46 = call i64 @astlist_length(ptr noundef %45) #3
  %47 = icmp ugt i64 %46, 1
  %.pre378 = load ptr, ptr %13, align 8, !tbaa !5
  br i1 %47, label %48, label %100

48:                                               ; preds = %44
  %49 = load ptr, ptr %14, align 8, !tbaa !5
  %50 = icmp ne ptr %.pre378, null
  %51 = icmp ne ptr %49, null
  %52 = select i1 %50, i1 %51, i1 false
  br i1 %52, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %48
  %53 = getelementptr inbounds i8, ptr %21, i64 8
  %54 = getelementptr inbounds i8, ptr %21, i64 16
  %55 = getelementptr inbounds i8, ptr %21, i64 24
  %56 = getelementptr inbounds i8, ptr %21, i64 32
  %57 = getelementptr inbounds i8, ptr %21, i64 40
  %58 = getelementptr inbounds i8, ptr %21, i64 48
  br label %59

59:                                               ; preds = %.lr.ph, %92
  %.0203349 = phi ptr [ null, %.lr.ph ], [ %.2205, %92 ]
  %.0206348 = phi ptr [ null, %.lr.ph ], [ %.2208, %92 ]
  %.0209347 = phi ptr [ %.pre378, %.lr.ph ], [ %93, %92 ]
  %.0217346 = phi ptr [ %49, %.lr.ph ], [ %94, %92 ]
  %60 = call ptr @astlist_data(ptr noundef nonnull %.0209347) #3
  %61 = call ptr @astlist_data(ptr noundef nonnull %.0217346) #3
  %62 = call zeroext i1 @is_typecheck_error(ptr noundef %60) #3
  br i1 %62, label %92, label %63

63:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #3
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %21) #3
  store ptr %15, ptr %21, align 16, !tbaa !5
  store ptr %16, ptr %53, align 8, !tbaa !5
  store ptr %17, ptr %54, align 16, !tbaa !5
  store ptr %18, ptr %55, align 8, !tbaa !5
  store ptr %19, ptr %56, align 16, !tbaa !5
  store ptr %20, ptr %57, align 8, !tbaa !5
  store ptr null, ptr %58, align 16, !tbaa !5
  call void @ast_get_children(ptr noundef %60, i64 noundef 6, ptr noundef nonnull %21) #3
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %21) #3
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = call i64 @ast_childcount(ptr noundef %64) #3
  %66 = load ptr, ptr %18, align 8, !tbaa !5
  %67 = call i64 @ast_childcount(ptr noundef %66) #3
  %.not254 = icmp eq i64 %65, %67
  br i1 %.not254, label %68, label %91

68:                                               ; preds = %63
  %69 = load ptr, ptr %3, align 8, !tbaa !5
  %70 = call i32 @ast_id(ptr noundef %69) #3
  %.not255 = icmp eq i32 %70, 2
  br i1 %.not255, label %80, label %71

71:                                               ; preds = %68
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = call i32 @ast_id(ptr noundef %72) #3
  %.not256 = icmp eq i32 %73, 37
  br i1 %.not256, label %80, label %74

74:                                               ; preds = %71
  %75 = load ptr, ptr %15, align 8, !tbaa !5
  %76 = call i32 @ast_id(ptr noundef %75) #3
  %77 = load ptr, ptr %3, align 8, !tbaa !5
  %78 = call i32 @ast_id(ptr noundef %77) #3
  %79 = call zeroext i1 @is_cap_sub_cap(i32 noundef %76, i32 noundef 2, i32 noundef %78, i32 noundef 2) #3
  br i1 %79, label %80, label %91

80:                                               ; preds = %74, %71, %68
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = call i32 @ast_id(ptr noundef %81) #3
  %.not257 = icmp eq i32 %82, 2
  br i1 %.not257, label %88, label %83

83:                                               ; preds = %80
  %84 = load ptr, ptr %11, align 8, !tbaa !5
  %85 = call i32 @ast_id(ptr noundef %84) #3
  %86 = call i32 @ast_id(ptr noundef %61) #3
  %87 = call zeroext i1 @is_cap_sub_cap(i32 noundef %85, i32 noundef 2, i32 noundef %86, i32 noundef 2) #3
  br i1 %87, label %88, label %91

88:                                               ; preds = %83, %80
  %89 = call ptr @astlist_push(ptr noundef %.0203349, ptr noundef %60) #3
  %90 = call ptr @astlist_push(ptr noundef %.0206348, ptr noundef %61) #3
  br label %91

91:                                               ; preds = %83, %74, %63, %88
  %.1207 = phi ptr [ %90, %88 ], [ %.0206348, %63 ], [ %.0206348, %74 ], [ %.0206348, %83 ]
  %.1204 = phi ptr [ %89, %88 ], [ %.0203349, %63 ], [ %.0203349, %74 ], [ %.0203349, %83 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #3
  br label %92

92:                                               ; preds = %59, %91
  %.2208 = phi ptr [ %.1207, %91 ], [ %.0206348, %59 ]
  %.2205 = phi ptr [ %.1204, %91 ], [ %.0203349, %59 ]
  %93 = call ptr @astlist_next(ptr noundef nonnull %.0209347) #3
  %94 = call ptr @astlist_next(ptr noundef nonnull %.0217346) #3
  %95 = icmp ne ptr %93, null
  %96 = icmp ne ptr %94, null
  %97 = select i1 %95, i1 %96, i1 false
  br i1 %97, label %59, label %._crit_edge.loopexit, !llvm.loop !9

._crit_edge.loopexit:                             ; preds = %92
  %.pre = load ptr, ptr %13, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %48
  %98 = phi ptr [ %.pre378, %48 ], [ %.pre, %._crit_edge.loopexit ]
  %.0206.lcssa = phi ptr [ null, %48 ], [ %.2208, %._crit_edge.loopexit ]
  %.0203.lcssa = phi ptr [ null, %48 ], [ %.2205, %._crit_edge.loopexit ]
  call void @astlist_free(ptr noundef %98) #3
  %99 = load ptr, ptr %14, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %99) #3
  store ptr %.0203.lcssa, ptr %13, align 8, !tbaa !5
  store ptr %.0206.lcssa, ptr %14, align 8, !tbaa !5
  br label %100

100:                                              ; preds = %._crit_edge, %44
  %101 = phi ptr [ %.0203.lcssa, %._crit_edge ], [ %.pre378, %44 ]
  %102 = call i64 @astlist_length(ptr noundef %101) #3
  %103 = icmp eq i64 %102, 1
  br i1 %103, label %104, label %153

104:                                              ; preds = %100
  %105 = load ptr, ptr %13, align 8, !tbaa !5
  %106 = call ptr @astlist_data(ptr noundef %105) #3
  %107 = load ptr, ptr %14, align 8, !tbaa !5
  %108 = call ptr @astlist_data(ptr noundef %107) #3
  %109 = call zeroext i1 @is_typecheck_error(ptr noundef %106) #3
  br i1 %109, label %.loopexit344, label %110

110:                                              ; preds = %104
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  %112 = call i32 @ast_id(ptr noundef %111) #3
  %113 = icmp eq i32 %112, 2
  br i1 %113, label %114, label %115

114:                                              ; preds = %110
  call void @ast_replace(ptr noundef nonnull %11, ptr noundef %108) #3
  br label %115

115:                                              ; preds = %114, %110
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = call i32 @ast_id(ptr noundef %116) #3
  %118 = icmp eq i32 %117, 2
  br i1 %118, label %119, label %121

119:                                              ; preds = %115
  %120 = call ptr @ast_child(ptr noundef %106) #3
  call void @ast_replace(ptr noundef nonnull %3, ptr noundef %120) #3
  br label %121

121:                                              ; preds = %119, %115
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = call i32 @ast_id(ptr noundef %122) #3
  %124 = icmp eq i32 %123, 2
  br i1 %124, label %125, label %127

125:                                              ; preds = %121
  %126 = call ptr @ast_childidx(ptr noundef %106, i64 noundef 4) #3
  call void @ast_replace(ptr noundef nonnull %8, ptr noundef %126) #3
  br label %127

127:                                              ; preds = %125, %121
  %128 = load ptr, ptr %6, align 8, !tbaa !5
  %129 = call ptr @ast_child(ptr noundef %128) #3
  %130 = call ptr @ast_childidx(ptr noundef %106, i64 noundef 3) #3
  %131 = call ptr @ast_child(ptr noundef %130) #3
  %132 = icmp ne ptr %129, null
  %133 = icmp ne ptr %131, null
  %134 = select i1 %132, i1 %133, i1 false
  br i1 %134, label %.lr.ph354, label %.loopexit344

.lr.ph354:                                        ; preds = %127, %147
  %.0221352 = phi ptr [ %148, %147 ], [ %129, %127 ]
  %.0234351 = phi ptr [ %149, %147 ], [ %131, %127 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #3
  %135 = call ptr @ast_child(ptr noundef nonnull %.0221352) #3
  store ptr %135, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #3
  %136 = call ptr @ast_sibling(ptr noundef %135) #3
  store ptr %136, ptr %23, align 8, !tbaa !5
  %137 = load ptr, ptr %22, align 8, !tbaa !5
  %138 = call ptr @ast_name(ptr noundef %137) #3
  %139 = call zeroext i1 @is_name_dontcare(ptr noundef %138) #3
  br i1 %139, label %140, label %142

140:                                              ; preds = %.lr.ph354
  %141 = call ptr @ast_child(ptr noundef nonnull %.0234351) #3
  call void @ast_replace(ptr noundef nonnull %22, ptr noundef %141) #3
  br label %.sink.split

142:                                              ; preds = %.lr.ph354
  %143 = load ptr, ptr %23, align 8, !tbaa !5
  %144 = call i32 @ast_id(ptr noundef %143) #3
  %145 = icmp eq i32 %144, 2
  br i1 %145, label %.sink.split, label %147

.sink.split:                                      ; preds = %142, %140
  %146 = call ptr @ast_childidx(ptr noundef nonnull %.0234351, i64 noundef 1) #3
  call void @ast_replace(ptr noundef nonnull %23, ptr noundef %146) #3
  br label %147

147:                                              ; preds = %.sink.split, %142
  %148 = call ptr @ast_sibling(ptr noundef nonnull %.0221352) #3
  %149 = call ptr @ast_sibling(ptr noundef nonnull %.0234351) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #3
  %150 = icmp ne ptr %148, null
  %151 = icmp ne ptr %149, null
  %152 = select i1 %150, i1 %151, i1 false
  br i1 %152, label %.lr.ph354, label %.loopexit344, !llvm.loop !11

.loopexit344:                                     ; preds = %147, %127, %104
  call void @ast_free_unattached(ptr noundef %106) #3
  br label %153

153:                                              ; preds = %.loopexit344, %100
  %154 = load ptr, ptr %14, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %154) #3
  %155 = load ptr, ptr %6, align 8, !tbaa !5
  %156 = call ptr @ast_child(ptr noundef %155) #3
  %.not246355 = icmp eq ptr %156, null
  br i1 %.not246355, label %._crit_edge359, label %.lr.ph358

.lr.ph358:                                        ; preds = %153, %171
  %.0235356 = phi ptr [ %172, %171 ], [ %156, %153 ]
  %157 = call ptr @ast_childidx(ptr noundef nonnull %.0235356, i64 noundef 1) #3
  %158 = call i32 @ast_id(ptr noundef %157) #3
  %159 = icmp eq i32 %158, 2
  br i1 %159, label %160, label %171

160:                                              ; preds = %.lr.ph358
  %161 = getelementptr inbounds i8, ptr %0, i64 216
  %162 = load ptr, ptr %161, align 8, !tbaa !12
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %162, ptr noundef nonnull %.0235356, ptr noundef nonnull @.str.3) #3
  %163 = load ptr, ptr %13, align 8, !tbaa !5
  %164 = call i64 @astlist_length(ptr noundef %163) #3
  %165 = icmp ult i64 %164, 2
  %166 = load ptr, ptr %13, align 8
  %.not253360 = icmp eq ptr %166, null
  %or.cond = select i1 %165, i1 true, i1 %.not253360
  br i1 %or.cond, label %.loopexit, label %.lr.ph363

.lr.ph363:                                        ; preds = %160, %.lr.ph363
  %.0237361 = phi ptr [ %169, %.lr.ph363 ], [ %166, %160 ]
  %167 = load ptr, ptr %161, align 8, !tbaa !12
  %168 = call ptr @astlist_data(ptr noundef nonnull %.0237361) #3
  call void (ptr, ptr, ptr, ...) @ast_error_continue(ptr noundef %167, ptr noundef %168, ptr noundef nonnull @.str.4) #3
  %169 = call ptr @astlist_next(ptr noundef nonnull %.0237361) #3
  %.not253 = icmp eq ptr %169, null
  br i1 %.not253, label %.loopexit.loopexit, label %.lr.ph363, !llvm.loop !19

.loopexit.loopexit:                               ; preds = %.lr.ph363
  %.pre379 = load ptr, ptr %13, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %160
  %170 = phi ptr [ %.pre379, %.loopexit.loopexit ], [ %166, %160 ]
  call void @astlist_free(ptr noundef %170) #3
  br label %341

171:                                              ; preds = %.lr.ph358
  %172 = call ptr @ast_sibling(ptr noundef nonnull %.0235356) #3
  %.not246 = icmp eq ptr %172, null
  br i1 %.not246, label %._crit_edge359, label %.lr.ph358, !llvm.loop !20

._crit_edge359:                                   ; preds = %171, %153
  %173 = load ptr, ptr %13, align 8, !tbaa !5
  call void @astlist_free(ptr noundef %173) #3
  %174 = call i32 @ast_id(ptr noundef %28) #3
  %175 = icmp eq i32 %174, 80
  %176 = call ptr @ast_from(ptr noundef %28, i32 noundef 139) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #3
  store ptr null, ptr %24, align 8, !tbaa !5
  br i1 %175, label %177, label %182

177:                                              ; preds = %._crit_edge359
  %178 = load ptr, ptr %7, align 8, !tbaa !5
  %179 = call i32 @ast_id(ptr noundef %178) #3
  %180 = icmp eq i32 %179, 2
  br i1 %180, label %182, label %181

181:                                              ; preds = %177
  call void @ponyint_assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i64 noundef 369, ptr noundef nonnull @__func__.expr_lambda) #3
  br label %182

182:                                              ; preds = %181, %177, %._crit_edge359
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = call ptr @ast_child(ptr noundef %183) #3
  %.not247364 = icmp eq ptr %184, null
  br i1 %.not247364, label %.critedge, label %.lr.ph368

._crit_edge369:                                   ; preds = %190
  br i1 %.1240, label %192, label %.critedge

.lr.ph368:                                        ; preds = %182, %190
  %.0238366 = phi ptr [ %191, %190 ], [ %184, %182 ]
  %.0239365 = phi i1 [ %.1240, %190 ], [ false, %182 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #3
  store ptr null, ptr %25, align 8, !tbaa !5
  %185 = call zeroext i1 @make_capture_field(ptr noundef %0, ptr noundef nonnull %.0238366, ptr noundef nonnull %25)
  %186 = load ptr, ptr %25, align 8, !tbaa !5
  %.not252 = icmp eq ptr %186, null
  br i1 %.not252, label %189, label %187

187:                                              ; preds = %.lr.ph368
  %188 = call ptr @ast_list_append(ptr noundef %176, ptr noundef nonnull %24, ptr noundef nonnull %186) #3
  br label %190

189:                                              ; preds = %.lr.ph368
  %not. = xor i1 %185, true
  %spec.select = select i1 %not., i1 true, i1 %.0239365
  br label %190

190:                                              ; preds = %189, %187
  %.1240 = phi i1 [ %.0239365, %187 ], [ %spec.select, %189 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #3
  %191 = call ptr @ast_sibling(ptr noundef nonnull %.0238366) #3
  %.not247 = icmp eq ptr %191, null
  br i1 %.not247, label %._crit_edge369, label %.lr.ph368, !llvm.loop !21

192:                                              ; preds = %._crit_edge369
  call void @ast_free(ptr noundef %176) #3
  br label %340

.critedge:                                        ; preds = %182, %._crit_edge369
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %193, i32 noundef 8192) #3
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %194, i32 noundef 8192) #3
  %195 = load ptr, ptr %8, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %195, i32 noundef 8192) #3
  %196 = load ptr, ptr %10, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %196, i32 noundef 8192) #3
  %197 = load ptr, ptr %4, align 8, !tbaa !5
  %198 = call i32 @ast_id(ptr noundef %197) #3
  %199 = icmp eq i32 %198, 8
  br i1 %199, label %200, label %203

200:                                              ; preds = %.critedge
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = call ptr @ast_name(ptr noundef %201) #3
  br label %203

203:                                              ; preds = %200, %.critedge
  %.0236 = phi ptr [ %202, %200 ], [ @.str.6, %.critedge ]
  %204 = call ptr @ast_from(ptr noundef %28, i32 noundef 89) #3
  call void @ast_scope(ptr noundef %204) #3
  call void @ast_setannotation(ptr noundef %204, ptr noundef %40) #3
  %205 = icmp eq ptr %204, null
  %206 = load ptr, ptr %3, align 8, !tbaa !5
  br i1 %205, label %207, label %209

207:                                              ; preds = %203
  %208 = icmp eq ptr %206, null
  br i1 %208, label %217, label %.thread262

209:                                              ; preds = %203
  %210 = call ptr @ast_add(ptr noundef nonnull %204, ptr noundef %206) #3
  %211 = icmp eq ptr %210, null
  br i1 %211, label %.thread262, label %214

.thread262:                                       ; preds = %207, %209
  %.0225260265 = phi ptr [ %204, %209 ], [ %206, %207 ]
  %212 = call ptr @ast_from_string(ptr noundef %28, ptr noundef %.0236) #3
  %213 = call ptr @ast_add(ptr noundef nonnull %.0225260265, ptr noundef %212) #3
  br label %220

214:                                              ; preds = %209
  %215 = call ptr @ast_from_string(ptr noundef %28, ptr noundef %.0236) #3
  %216 = call ptr @ast_add_sibling(ptr noundef nonnull %210, ptr noundef %215) #3
  br label %220

217:                                              ; preds = %207
  %218 = call ptr @ast_from_string(ptr noundef %28, ptr noundef %.0236) #3
  %219 = icmp eq ptr %218, null
  br i1 %219, label %227, label %.thread271

220:                                              ; preds = %.thread262, %214
  %.1226.ph = phi ptr [ %204, %214 ], [ %.0225260265, %.thread262 ]
  %.1223.ph = phi ptr [ %216, %214 ], [ %213, %.thread262 ]
  %221 = icmp eq ptr %.1223.ph, null
  br i1 %221, label %.thread271, label %224

.thread271:                                       ; preds = %217, %220
  %.1226269274 = phi ptr [ %.1226.ph, %220 ], [ %218, %217 ]
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = call ptr @ast_add(ptr noundef nonnull %.1226269274, ptr noundef %222) #3
  br label %230

224:                                              ; preds = %220
  %225 = load ptr, ptr %5, align 8, !tbaa !5
  %226 = call ptr @ast_add_sibling(ptr noundef nonnull %.1223.ph, ptr noundef %225) #3
  br label %230

227:                                              ; preds = %217
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  %229 = icmp eq ptr %228, null
  br i1 %229, label %237, label %.thread281

230:                                              ; preds = %.thread271, %224
  %.2227.ph = phi ptr [ %.1226.ph, %224 ], [ %.1226269274, %.thread271 ]
  %.2224.ph = phi ptr [ %226, %224 ], [ %223, %.thread271 ]
  %231 = icmp eq ptr %.2224.ph, null
  br i1 %231, label %.thread281, label %234

.thread281:                                       ; preds = %227, %230
  %.2227279284 = phi ptr [ %.2227.ph, %230 ], [ %228, %227 ]
  %232 = load ptr, ptr %6, align 8, !tbaa !5
  %233 = call ptr @ast_add(ptr noundef nonnull %.2227279284, ptr noundef %232) #3
  br label %240

234:                                              ; preds = %230
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  %236 = call ptr @ast_add_sibling(ptr noundef nonnull %.2224.ph, ptr noundef %235) #3
  br label %240

237:                                              ; preds = %227
  %238 = load ptr, ptr %6, align 8, !tbaa !5
  %239 = icmp eq ptr %238, null
  br i1 %239, label %247, label %.thread291

240:                                              ; preds = %.thread281, %234
  %.3228.ph = phi ptr [ %.2227.ph, %234 ], [ %.2227279284, %.thread281 ]
  %.3.ph = phi ptr [ %236, %234 ], [ %233, %.thread281 ]
  %241 = icmp eq ptr %.3.ph, null
  br i1 %241, label %.thread291, label %244

.thread291:                                       ; preds = %237, %240
  %.3228289294 = phi ptr [ %.3228.ph, %240 ], [ %238, %237 ]
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = call ptr @ast_add(ptr noundef nonnull %.3228289294, ptr noundef %242) #3
  br label %250

244:                                              ; preds = %240
  %245 = load ptr, ptr %8, align 8, !tbaa !5
  %246 = call ptr @ast_add_sibling(ptr noundef nonnull %.3.ph, ptr noundef %245) #3
  br label %250

247:                                              ; preds = %237
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = icmp eq ptr %248, null
  br i1 %249, label %257, label %.thread301

250:                                              ; preds = %.thread291, %244
  %.4229.ph = phi ptr [ %.3228.ph, %244 ], [ %.3228289294, %.thread291 ]
  %.4.ph = phi ptr [ %246, %244 ], [ %243, %.thread291 ]
  %251 = icmp eq ptr %.4.ph, null
  br i1 %251, label %.thread301, label %254

.thread301:                                       ; preds = %247, %250
  %.4229299304 = phi ptr [ %.4229.ph, %250 ], [ %248, %247 ]
  %252 = load ptr, ptr %9, align 8, !tbaa !5
  %253 = call ptr @ast_add(ptr noundef nonnull %.4229299304, ptr noundef %252) #3
  br label %260

254:                                              ; preds = %250
  %255 = load ptr, ptr %9, align 8, !tbaa !5
  %256 = call ptr @ast_add_sibling(ptr noundef nonnull %.4.ph, ptr noundef %255) #3
  br label %260

257:                                              ; preds = %247
  %258 = load ptr, ptr %9, align 8, !tbaa !5
  %259 = icmp eq ptr %258, null
  br i1 %259, label %267, label %.thread311

260:                                              ; preds = %.thread301, %254
  %.5230.ph = phi ptr [ %.4229.ph, %254 ], [ %.4229299304, %.thread301 ]
  %.5.ph = phi ptr [ %256, %254 ], [ %253, %.thread301 ]
  %261 = icmp eq ptr %.5.ph, null
  br i1 %261, label %.thread311, label %264

.thread311:                                       ; preds = %257, %260
  %.5230309314 = phi ptr [ %.5230.ph, %260 ], [ %258, %257 ]
  %262 = load ptr, ptr %10, align 8, !tbaa !5
  %263 = call ptr @ast_add(ptr noundef nonnull %.5230309314, ptr noundef %262) #3
  br label %272

264:                                              ; preds = %260
  %265 = load ptr, ptr %10, align 8, !tbaa !5
  %266 = call ptr @ast_add_sibling(ptr noundef nonnull %.5.ph, ptr noundef %265) #3
  br label %272

267:                                              ; preds = %257
  %268 = load ptr, ptr %10, align 8, !tbaa !5
  %269 = icmp eq ptr %268, null
  br i1 %269, label %270, label %.thread321

270:                                              ; preds = %267
  %271 = call ptr @ast_from(ptr noundef %28, i32 noundef 2) #3
  br label %279

272:                                              ; preds = %.thread311, %264
  %.6231.ph = phi ptr [ %.5230.ph, %264 ], [ %.5230309314, %.thread311 ]
  %.6.ph = phi ptr [ %266, %264 ], [ %263, %.thread311 ]
  %273 = icmp eq ptr %.6.ph, null
  br i1 %273, label %.thread321, label %276

.thread321:                                       ; preds = %267, %272
  %.6231319324 = phi ptr [ %.6231.ph, %272 ], [ %268, %267 ]
  %274 = call ptr @ast_from(ptr noundef %28, i32 noundef 2) #3
  %275 = call ptr @ast_add(ptr noundef nonnull %.6231319324, ptr noundef %274) #3
  br label %279

276:                                              ; preds = %272
  %277 = call ptr @ast_from(ptr noundef %28, i32 noundef 2) #3
  %278 = call ptr @ast_add_sibling(ptr noundef nonnull %.6.ph, ptr noundef %277) #3
  br label %279

279:                                              ; preds = %.thread321, %276, %270
  %.7232 = phi ptr [ %271, %270 ], [ %.6231319324, %.thread321 ], [ %.6231.ph, %276 ]
  call void @ast_inheritflags(ptr noundef %.7232) #3
  %280 = call ptr @ast_list_append(ptr noundef %176, ptr noundef nonnull %24, ptr noundef %204) #3
  call void @ast_setflag(ptr noundef %176, i32 noundef 8192) #3
  %281 = call ptr (...) @printbuf_new() #3
  %282 = select i1 %175, ptr @.str.7, ptr @.str.8
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull %282) #3
  %283 = load ptr, ptr %6, align 8, !tbaa !5
  %284 = call ptr @ast_child(ptr noundef %283) #3
  %.not248371 = icmp eq ptr %284, null
  br i1 %.not248371, label %._crit_edge376, label %.lr.ph375.peel

.lr.ph375.peel:                                   ; preds = %279
  %285 = call ptr @ast_childidx(ptr noundef nonnull %284, i64 noundef 1) #3
  %286 = call ptr @ast_print_type(ptr noundef %285) #3
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull @.str.10, ptr noundef %286) #3
  %287 = call ptr @ast_sibling(ptr noundef nonnull %284) #3
  %.not248.peel = icmp eq ptr %287, null
  br i1 %.not248.peel, label %._crit_edge376, label %.lr.ph375

._crit_edge376:                                   ; preds = %.lr.ph375.peel, %.lr.ph375, %279
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull @.str.11) #3
  %288 = load ptr, ptr %8, align 8, !tbaa !5
  %289 = call i32 @ast_id(ptr noundef %288) #3
  %.not249 = icmp eq i32 %289, 2
  br i1 %.not249, label %296, label %293

.lr.ph375:                                        ; preds = %.lr.ph375.peel, %.lr.ph375
  %.0218373 = phi ptr [ %292, %.lr.ph375 ], [ %287, %.lr.ph375.peel ]
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull @.str.9) #3
  %290 = call ptr @ast_childidx(ptr noundef nonnull %.0218373, i64 noundef 1) #3
  %291 = call ptr @ast_print_type(ptr noundef %290) #3
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull @.str.10, ptr noundef %291) #3
  %292 = call ptr @ast_sibling(ptr noundef nonnull %.0218373) #3
  %.not248 = icmp eq ptr %292, null
  br i1 %.not248, label %._crit_edge376, label %.lr.ph375, !llvm.loop !22

293:                                              ; preds = %._crit_edge376
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = call ptr @ast_print_type(ptr noundef %294) #3
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull @.str.12, ptr noundef %295) #3
  br label %296

296:                                              ; preds = %293, %._crit_edge376
  %297 = load ptr, ptr %9, align 8, !tbaa !5
  %298 = call i32 @ast_id(ptr noundef %297) #3
  %.not250 = icmp eq i32 %298, 2
  br i1 %.not250, label %300, label %299

299:                                              ; preds = %296
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull @.str.13) #3
  br label %300

300:                                              ; preds = %299, %296
  call void (ptr, ptr, ...) @printbuf(ptr noundef %281, ptr noundef nonnull @.str.14) #3
  %301 = load ptr, ptr %1, align 8, !tbaa !5
  %302 = call ptr @ast_from(ptr noundef %301, i32 noundef 78) #3
  %303 = load ptr, ptr %281, align 8, !tbaa !24
  %304 = call ptr @stringtab(ptr noundef %303) #3
  %305 = call ptr @ast_setdata(ptr noundef %302, ptr noundef %304) #3
  %306 = icmp eq ptr %302, null
  %307 = load ptr, ptr %11, align 8, !tbaa !5
  br i1 %306, label %308, label %310

308:                                              ; preds = %300
  %309 = icmp eq ptr %307, null
  br i1 %309, label %318, label %.thread330

310:                                              ; preds = %300
  %311 = call ptr @ast_add(ptr noundef nonnull %302, ptr noundef %307) #3
  %312 = icmp eq ptr %311, null
  br i1 %312, label %.thread330, label %315

.thread330:                                       ; preds = %308, %310
  %.0213328333 = phi ptr [ %302, %310 ], [ %307, %308 ]
  %313 = call ptr @ast_from(ptr noundef %301, i32 noundef 2) #3
  %314 = call ptr @ast_add(ptr noundef nonnull %.0213328333, ptr noundef %313) #3
  br label %321

315:                                              ; preds = %310
  %316 = call ptr @ast_from(ptr noundef %301, i32 noundef 2) #3
  %317 = call ptr @ast_add_sibling(ptr noundef nonnull %311, ptr noundef %316) #3
  br label %321

318:                                              ; preds = %308
  %319 = call ptr @ast_from(ptr noundef %301, i32 noundef 2) #3
  %320 = icmp eq ptr %319, null
  br i1 %320, label %326, label %.thread340

321:                                              ; preds = %.thread330, %315
  %.1214.ph = phi ptr [ %302, %315 ], [ %.0213328333, %.thread330 ]
  %.1211.ph = phi ptr [ %317, %315 ], [ %314, %.thread330 ]
  %322 = icmp eq ptr %.1211.ph, null
  br i1 %322, label %.thread340, label %324

.thread340:                                       ; preds = %318, %321
  %.1214338343 = phi ptr [ %.1214.ph, %321 ], [ %319, %318 ]
  %323 = call ptr @ast_add(ptr noundef nonnull %.1214338343, ptr noundef %176) #3
  br label %326

324:                                              ; preds = %321
  %325 = call ptr @ast_add_sibling(ptr noundef nonnull %.1211.ph, ptr noundef %176) #3
  br label %326

326:                                              ; preds = %318, %.thread340, %324
  %.2215 = phi ptr [ %.1214338343, %.thread340 ], [ %.1214.ph, %324 ], [ %176, %318 ]
  call void @ast_inheritflags(ptr noundef %.2215) #3
  call void @ast_replace(ptr noundef nonnull %1, ptr noundef %302) #3
  call void @printbuf_free(ptr noundef nonnull %281) #3
  br i1 %175, label %327, label %336

327:                                              ; preds = %326
  %328 = load ptr, ptr %1, align 8, !tbaa !5
  %329 = call ptr @ast_from(ptr noundef %328, i32 noundef 205) #3
  %330 = icmp eq ptr %329, null
  %331 = call ptr @ast_from_string(ptr noundef %328, ptr noundef nonnull @.str.15) #3
  br i1 %330, label %334, label %332

332:                                              ; preds = %327
  %333 = call ptr @ast_add(ptr noundef nonnull %329, ptr noundef %331) #3
  br label %334

334:                                              ; preds = %327, %332
  %.0201 = phi ptr [ %329, %332 ], [ %331, %327 ]
  call void @ast_inheritflags(ptr noundef %.0201) #3
  call void @ast_pass_record(ptr noundef %329, i32 noundef 1) #3
  %335 = load ptr, ptr %1, align 8, !tbaa !5
  call void @ast_setannotation(ptr noundef %335, ptr noundef %329) #3
  br label %336

336:                                              ; preds = %334, %326
  %337 = call i32 @ast_visit(ptr noundef nonnull %1, ptr noundef nonnull @pass_syntax, ptr noundef null, ptr noundef %0, i32 noundef 1) #3
  %.not251 = icmp eq i32 %337, 0
  br i1 %.not251, label %338, label %340

338:                                              ; preds = %336
  %339 = call zeroext i1 @ast_passes_subtree(ptr noundef nonnull %1, ptr noundef %0, i32 noundef 10) #3
  br label %340

340:                                              ; preds = %338, %336, %192
  %.1 = phi i1 [ false, %192 ], [ %339, %338 ], [ false, %336 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #3
  br label %341

341:                                              ; preds = %340, %.loopexit
  %.2 = phi i1 [ false, %.loopexit ], [ %.1, %340 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #3
  ret i1 %.2
}

declare void @ponyint_assert_fail(ptr noundef, ptr noundef, i64 noundef, ptr noundef) 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

declare void @ast_get_children(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

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

declare ptr @ast_consumeannotation(ptr noundef) local_unnamed_addr #1

declare ptr @find_antecedent_type(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @is_typecheck_error(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @find_possible_fun_defs(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare i64 @astlist_length(ptr noundef) local_unnamed_addr #1

declare ptr @astlist_data(ptr noundef) local_unnamed_addr #1

declare i64 @ast_childcount(ptr noundef) local_unnamed_addr #1

declare i32 @ast_id(ptr noundef) local_unnamed_addr #1

declare zeroext i1 @is_cap_sub_cap(i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare ptr @astlist_push(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @astlist_next(ptr noundef) local_unnamed_addr #1

declare void @astlist_free(ptr noundef) local_unnamed_addr #1

declare void @ast_replace(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @ast_child(ptr noundef) local_unnamed_addr #1

declare ptr @ast_childidx(ptr noundef, i64 noundef) local_unnamed_addr #1

declare ptr @ast_sibling(ptr noundef) local_unnamed_addr #1

declare zeroext i1 @is_name_dontcare(ptr noundef) local_unnamed_addr #1

declare ptr @ast_name(ptr noundef) local_unnamed_addr #1

declare void @ast_free_unattached(ptr noundef) local_unnamed_addr #1

declare void @ast_error(ptr noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #1

declare void @ast_error_continue(ptr noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @make_capture_field(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @ast_list_append(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @ast_free(ptr noundef) local_unnamed_addr #1

declare void @ast_clearflag(ptr noundef, i32 noundef) local_unnamed_addr #1

declare ptr @ast_add(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @ast_add_sibling(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @ast_scope(ptr noundef) local_unnamed_addr #1

declare void @ast_setannotation(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @ast_from_string(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @ast_inheritflags(ptr noundef) local_unnamed_addr #1

declare void @ast_setflag(ptr noundef, i32 noundef) local_unnamed_addr #1

declare ptr @printbuf_new(...) local_unnamed_addr #1

declare void @printbuf(ptr noundef, ptr noundef, ...) local_unnamed_addr #1

declare ptr @ast_print_type(ptr noundef) local_unnamed_addr #1

declare ptr @ast_setdata(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @stringtab(ptr noundef) local_unnamed_addr #1

declare void @printbuf_free(ptr noundef) local_unnamed_addr #1

declare void @ast_pass_record(ptr noundef, i32 noundef) local_unnamed_addr #1

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

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

declare zeroext i1 @ast_passes_subtree(ptr noundef, ptr noundef, i32 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 = { nounwind }

!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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!13, !6, i64 216}
!13 = !{!"pass_opt_t", !14, i64 0, !14, i64 4, !15, i64 8, !15, i64 9, !15, i64 10, !15, i64 11, !15, i64 12, !15, i64 13, !15, i64 14, !15, i64 15, !15, i64 16, !15, i64 17, !15, i64 18, !15, i64 19, !15, i64 20, !15, i64 21, !14, i64 24, !16, i64 32, !15, i64 40, !15, i64 41, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !17, i64 176, !6, i64 224, !6, i64 232}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!"typecheck_t", !6, i64 0, !18, i64 8, !6, i64 40}
!18 = !{!"typecheck_stats_t", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10, !23}
!23 = !{!"llvm.loop.peeled.count", i32 1}
!24 = !{!25, !6, i64 0}
!25 = !{!"printbuf_t", !6, i64 0, !16, i64 8, !16, i64 16}


; Effective O3 passes: AggressiveInstCombinePass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass