; LLVM IR from aws/s2n-tls :: tests/unit (s2n_tls13_keys_test)

; 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.s2n_cipher_suite = type { i8, ptr, ptr, [2 x i8], ptr, i32, ptr, [2 x ptr], i8, ptr, ptr, i32, i8 }
%struct.s2n_debug_info = type { ptr, ptr }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_result = type { i32 }
%struct.s2n_tls13_keys = type { i32, i32, i8, %struct.s2n_blob, %struct.s2n_blob, [48 x i8], [48 x i8], %struct.s2n_hmac_state }
%struct.s2n_hmac_state = type { i32, i16, i32, i16, i8, %struct.s2n_hash_state, %struct.s2n_hash_state, %struct.s2n_hash_state, %struct.s2n_hash_state, [128 x i8], [64 x i8] }
%struct.s2n_hash_state = type { ptr, i32, i8, i64, %union.anon.0 }
%union.anon.0 = type { %struct.s2n_hash_evp_digest }
%struct.s2n_hash_evp_digest = type { %struct.s2n_evp_digest, %struct.s2n_evp_digest }
%struct.s2n_evp_digest = type { ptr, ptr }
%struct.s2n_connection = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, [22 x i8], [22 x i8], [22 x i8], i32, i32, %struct.s2n_timer, i64, i64, [32 x i8], i8, i8, i8, i8, i8, i8, i8, ptr, ptr, %struct.s2n_secrets, ptr, ptr, %struct.s2n_kex_parameters, %struct.s2n_handshake_parameters, %struct.s2n_psk_parameters, ptr, i8, i32, [5 x i8], %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, i32, i64, [2 x i8], %struct.s2n_stuffer, i8, i8, i8, i8, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, %struct.s2n_handshake, i16, i32, i16, i64, i8, i64, i64, i64, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, [256 x i8], [256 x i8], i32, %struct.s2n_blob, i32, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_client_hello, %struct.s2n_x509_validator, ptr, ptr, i8, i32, %struct.s2n_blob, i32, %struct.s2n_ticket_fields, [138 x i8], %struct.s2n_stuffer, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8, i16, i16, i32, i32, %struct.s2n_blob, i32, %struct.s2n_post_handshake, %struct.s2n_atomic_flag, i8, i8 }
%struct.s2n_timer = type { i64 }
%struct.s2n_secrets = type { %union.anon, i32 }
%union.anon = type { %struct.s2n_tls13_secrets }
%struct.s2n_tls13_secrets = type { [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], i32 }
%struct.s2n_kex_parameters = type { %struct.s2n_dh_params, %struct.s2n_ecc_evp_params, [4 x ptr], %struct.s2n_ecc_evp_params, %struct.s2n_kem_group_params, %struct.s2n_kem_group_params, [8 x ptr], %struct.s2n_kem_params, %struct.s2n_blob, %struct.s2n_blob }
%struct.s2n_dh_params = type { ptr }
%struct.s2n_ecc_evp_params = type { ptr, ptr }
%struct.s2n_kem_group_params = type { ptr, %struct.s2n_kem_params, %struct.s2n_ecc_evp_params }
%struct.s2n_kem_params = type { ptr, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8 }
%struct.s2n_handshake_parameters = type { %struct.s2n_pkey, %struct.s2n_pkey, %struct.s2n_blob, i32, %struct.s2n_sig_scheme_list, ptr, ptr, ptr, [4 x ptr], [4 x ptr], i8, i8, [32 x i8], [32 x i8] }
%struct.s2n_pkey = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.s2n_sig_scheme_list = type { [128 x i16], i8 }
%struct.s2n_psk_parameters = type { i32, %struct.s2n_array, i16, i16, ptr, i32 }
%struct.s2n_array = type { %struct.s2n_blob, i32, i32 }
%struct.s2n_handshake = type { %struct.s2n_stuffer, ptr, [8 x i8], [48 x i8], [48 x i8], i8, i32, i32, i32, i32, %struct.s2n_offered_early_data, i8, i32 }
%struct.s2n_offered_early_data = type { ptr }
%struct.s2n_client_hello = type { %struct.s2n_blob, %struct.s2n_parsed_extensions_list, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8 }
%struct.s2n_parsed_extensions_list = type { [21 x %struct.s2n_parsed_extension], %struct.s2n_blob, i16 }
%struct.s2n_parsed_extension = type { %struct.s2n_blob, i16, i16, i8 }
%struct.s2n_x509_validator = type { ptr, ptr, i8, i8, i16, ptr, i32, ptr, %struct.s2n_cert_validation_info, i8 }
%struct.s2n_cert_validation_info = type { i8, [3 x i8] }
%struct.s2n_ticket_fields = type { %struct.s2n_blob, i32 }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_post_handshake = type { %struct.s2n_stuffer, [4 x i8] }
%struct.s2n_atomic_flag = type { i32 }
%struct.s2n_crypto_parameters = type { ptr, %struct.s2n_session_key, %struct.s2n_session_key, %struct.s2n_hmac_state, %struct.s2n_hmac_state, [16 x i8], [16 x i8], [8 x i8], [8 x i8] }
%struct.s2n_session_key = type { ptr }

@s2n_use_color_in_output = external dso_local global i8, align 1
@test_count = external dso_local global i32, align 4
@stdout = external global ptr, align 8
@.str = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [78 x i8], align 1
@stderr = external global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [52 x i8], align 1
@s2n_errno = external thread_local global i32, align 4
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [79 x i8], align 1
@s2n_tls13_aes_256_gcm_sha384 = external global %struct.s2n_cipher_suite, align 8
@.str.11 = external hidden unnamed_addr constant [102 x i8], align 1
@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@.str.12 = external hidden unnamed_addr constant [120 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [118 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %struct.s2n_blob, align 8
  %10 = alloca %struct.s2n_result, align 4
  %11 = alloca i32, align 4
  %12 = alloca %struct.s2n_blob, align 8
  %13 = alloca %struct.s2n_result, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca %struct.s2n_tls13_keys, align 8
  %17 = alloca i64, align 8
  %18 = alloca [48 x i8], align 16
  %19 = alloca %struct.s2n_blob, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  br label %26

26:                                               ; preds = %2
  br label %27

27:                                               ; preds = %26
  store i32 0, ptr @test_count, align 4, !tbaa !5
  %28 = load ptr, ptr @stdout, align 8, !tbaa !9
  %29 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %28, ptr noundef @.str, ptr noundef @.str.1) #10
  %30 = load ptr, ptr @stdout, align 8, !tbaa !9
  %31 = call i32 @fflush(ptr noundef %30)
  br label %32

32:                                               ; preds = %27
  %33 = call i32 @s2n_in_unit_test_set(i1 noundef zeroext true)
  %34 = icmp eq i32 %33, -1
  br i1 %34, label %35, label %86

35:                                               ; preds = %32
  br label %36

36:                                               ; preds = %35
  br label %37

37:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  %38 = call ptr @__errno_location() #11
  %39 = load i32, ptr %38, align 4, !tbaa !5
  store i32 %39, ptr %6, align 4, !tbaa !5
  %40 = load ptr, ptr @stderr, align 8, !tbaa !9
  %41 = call i32 @s2n_print_stacktrace(ptr noundef %40)
  %42 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %43 = trunc i8 %42 to i1
  br i1 %43, label %44, label %66

44:                                               ; preds = %37
  %45 = load ptr, ptr @stderr, align 8, !tbaa !9
  %46 = call i32 @fileno(ptr noundef %45) #10
  %47 = call i32 @isatty(i32 noundef %46) #10
  %48 = icmp ne i32 %47, 0
  br i1 %48, label %49, label %66

49:                                               ; preds = %44
  %50 = load i32, ptr %6, align 4, !tbaa !5
  %51 = call ptr @__errno_location() #11
  store i32 %50, ptr %51, align 4, !tbaa !5
  %52 = load ptr, ptr @stderr, align 8, !tbaa !9
  %53 = load i32, ptr @test_count, align 4, !tbaa !5
  %54 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %55 = load i32, ptr %54, align 4, !tbaa !5
  %56 = call ptr @s2n_strerror(i32 noundef %55, ptr noundef @.str.4)
  %57 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %58 = load i32, ptr %57, align 4, !tbaa !5
  %59 = call ptr @s2n_strerror_debug(i32 noundef %58, ptr noundef @.str.4)
  %60 = call ptr @__errno_location() #11
  %61 = load i32, ptr %60, align 4, !tbaa !5
  %62 = call ptr @strerror(i32 noundef %61) #10
  %63 = call ptr @__errno_location() #11
  %64 = load i32, ptr %63, align 4, !tbaa !5
  %65 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %52, ptr noundef @.str.2, i32 noundef %53, ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 31, ptr noundef %56, ptr noundef %59, ptr noundef %62, i32 noundef %64) #10
  br label %83

66:                                               ; preds = %44, %37
  %67 = load i32, ptr %6, align 4, !tbaa !5
  %68 = call ptr @__errno_location() #11
  store i32 %67, ptr %68, align 4, !tbaa !5
  %69 = load ptr, ptr @stderr, align 8, !tbaa !9
  %70 = load i32, ptr @test_count, align 4, !tbaa !5
  %71 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %72 = load i32, ptr %71, align 4, !tbaa !5
  %73 = call ptr @s2n_strerror(i32 noundef %72, ptr noundef @.str.4)
  %74 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %75 = load i32, ptr %74, align 4, !tbaa !5
  %76 = call ptr @s2n_strerror_debug(i32 noundef %75, ptr noundef @.str.4)
  %77 = call ptr @__errno_location() #11
  %78 = load i32, ptr %77, align 4, !tbaa !5
  %79 = call ptr @strerror(i32 noundef %78) #10
  %80 = call ptr @__errno_location() #11
  %81 = load i32, ptr %80, align 4, !tbaa !5
  %82 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef @.str.5, i32 noundef %70, ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 31, ptr noundef %73, ptr noundef %76, ptr noundef %79, i32 noundef %81) #10
  br label %83

83:                                               ; preds = %66, %49
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  br label %84

84:                                               ; preds = %83
  call void @exit(i32 noundef 1) #12
  unreachable

85:                                               ; No predecessors!
  br label %86

86:                                               ; preds = %85, %32
  br label %87

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  %89 = load i32, ptr @test_count, align 4, !tbaa !5
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr @test_count, align 4, !tbaa !5
  %91 = call i32 @s2n_enable_atexit()
  %92 = icmp eq i32 %91, -1
  br i1 %92, label %93, label %144

93:                                               ; preds = %88
  br label %94

94:                                               ; preds = %93
  br label %95

95:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  %96 = call ptr @__errno_location() #11
  %97 = load i32, ptr %96, align 4, !tbaa !5
  store i32 %97, ptr %7, align 4, !tbaa !5
  %98 = load ptr, ptr @stderr, align 8, !tbaa !9
  %99 = call i32 @s2n_print_stacktrace(ptr noundef %98)
  %100 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %101 = trunc i8 %100 to i1
  br i1 %101, label %102, label %124

102:                                              ; preds = %95
  %103 = load ptr, ptr @stderr, align 8, !tbaa !9
  %104 = call i32 @fileno(ptr noundef %103) #10
  %105 = call i32 @isatty(i32 noundef %104) #10
  %106 = icmp ne i32 %105, 0
  br i1 %106, label %107, label %124

107:                                              ; preds = %102
  %108 = load i32, ptr %7, align 4, !tbaa !5
  %109 = call ptr @__errno_location() #11
  store i32 %108, ptr %109, align 4, !tbaa !5
  %110 = load ptr, ptr @stderr, align 8, !tbaa !9
  %111 = load i32, ptr @test_count, align 4, !tbaa !5
  %112 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %113 = load i32, ptr %112, align 4, !tbaa !5
  %114 = call ptr @s2n_strerror(i32 noundef %113, ptr noundef @.str.4)
  %115 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %116 = load i32, ptr %115, align 4, !tbaa !5
  %117 = call ptr @s2n_strerror_debug(i32 noundef %116, ptr noundef @.str.4)
  %118 = call ptr @__errno_location() #11
  %119 = load i32, ptr %118, align 4, !tbaa !5
  %120 = call ptr @strerror(i32 noundef %119) #10
  %121 = call ptr @__errno_location() #11
  %122 = load i32, ptr %121, align 4, !tbaa !5
  %123 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %110, ptr noundef @.str.2, i32 noundef %111, ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 31, ptr noundef %114, ptr noundef %117, ptr noundef %120, i32 noundef %122) #10
  br label %141

124:                                              ; preds = %102, %95
  %125 = load i32, ptr %7, align 4, !tbaa !5
  %126 = call ptr @__errno_location() #11
  store i32 %125, ptr %126, align 4, !tbaa !5
  %127 = load ptr, ptr @stderr, align 8, !tbaa !9
  %128 = load i32, ptr @test_count, align 4, !tbaa !5
  %129 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %130 = load i32, ptr %129, align 4, !tbaa !5
  %131 = call ptr @s2n_strerror(i32 noundef %130, ptr noundef @.str.4)
  %132 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %133 = load i32, ptr %132, align 4, !tbaa !5
  %134 = call ptr @s2n_strerror_debug(i32 noundef %133, ptr noundef @.str.4)
  %135 = call ptr @__errno_location() #11
  %136 = load i32, ptr %135, align 4, !tbaa !5
  %137 = call ptr @strerror(i32 noundef %136) #10
  %138 = call ptr @__errno_location() #11
  %139 = load i32, ptr %138, align 4, !tbaa !5
  %140 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %127, ptr noundef @.str.5, i32 noundef %128, ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 31, ptr noundef %131, ptr noundef %134, ptr noundef %137, i32 noundef %139) #10
  br label %141

141:                                              ; preds = %124, %107
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  br label %142

142:                                              ; preds = %141
  call void @exit(i32 noundef 1) #12
  unreachable

143:                                              ; No predecessors!
  br label %144

144:                                              ; preds = %143, %88
  br label %145

145:                                              ; preds = %144
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146
  %148 = call i32 @s2n_init()
  %149 = icmp eq i32 %148, -1
  br i1 %149, label %150, label %201

150:                                              ; preds = %147
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  %153 = call ptr @__errno_location() #11
  %154 = load i32, ptr %153, align 4, !tbaa !5
  store i32 %154, ptr %8, align 4, !tbaa !5
  %155 = load ptr, ptr @stderr, align 8, !tbaa !9
  %156 = call i32 @s2n_print_stacktrace(ptr noundef %155)
  %157 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %158 = trunc i8 %157 to i1
  br i1 %158, label %159, label %181

159:                                              ; preds = %152
  %160 = load ptr, ptr @stderr, align 8, !tbaa !9
  %161 = call i32 @fileno(ptr noundef %160) #10
  %162 = call i32 @isatty(i32 noundef %161) #10
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %181

164:                                              ; preds = %159
  %165 = load i32, ptr %8, align 4, !tbaa !5
  %166 = call ptr @__errno_location() #11
  store i32 %165, ptr %166, align 4, !tbaa !5
  %167 = load ptr, ptr @stderr, align 8, !tbaa !9
  %168 = load i32, ptr @test_count, align 4, !tbaa !5
  %169 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %170 = load i32, ptr %169, align 4, !tbaa !5
  %171 = call ptr @s2n_strerror(i32 noundef %170, ptr noundef @.str.4)
  %172 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %173 = load i32, ptr %172, align 4, !tbaa !5
  %174 = call ptr @s2n_strerror_debug(i32 noundef %173, ptr noundef @.str.4)
  %175 = call ptr @__errno_location() #11
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %177 = call ptr @strerror(i32 noundef %176) #10
  %178 = call ptr @__errno_location() #11
  %179 = load i32, ptr %178, align 4, !tbaa !5
  %180 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %167, ptr noundef @.str.2, i32 noundef %168, ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 31, ptr noundef %171, ptr noundef %174, ptr noundef %177, i32 noundef %179) #10
  br label %198

181:                                              ; preds = %159, %152
  %182 = load i32, ptr %8, align 4, !tbaa !5
  %183 = call ptr @__errno_location() #11
  store i32 %182, ptr %183, align 4, !tbaa !5
  %184 = load ptr, ptr @stderr, align 8, !tbaa !9
  %185 = load i32, ptr @test_count, align 4, !tbaa !5
  %186 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %187 = load i32, ptr %186, align 4, !tbaa !5
  %188 = call ptr @s2n_strerror(i32 noundef %187, ptr noundef @.str.4)
  %189 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %190 = load i32, ptr %189, align 4, !tbaa !5
  %191 = call ptr @s2n_strerror_debug(i32 noundef %190, ptr noundef @.str.4)
  %192 = call ptr @__errno_location() #11
  %193 = load i32, ptr %192, align 4, !tbaa !5
  %194 = call ptr @strerror(i32 noundef %193) #10
  %195 = call ptr @__errno_location() #11
  %196 = load i32, ptr %195, align 4, !tbaa !5
  %197 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %184, ptr noundef @.str.5, i32 noundef %185, ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 31, ptr noundef %188, ptr noundef %191, ptr noundef %194, i32 noundef %196) #10
  br label %198

198:                                              ; preds = %181, %164
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  br label %199

199:                                              ; preds = %198
  call void @exit(i32 noundef 1) #12
  unreachable

200:                                              ; No predecessors!
  br label %201

201:                                              ; preds = %200, %147
  br label %202

202:                                              ; preds = %201
  br label %203

203:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #10
  call void @llvm.memset.p0.i64(ptr align 8 %9, i8 0, i64 24, i1 false)
  br label %204

204:                                              ; preds = %203
  %205 = call i32 @s2n_blob_alloc_from_hex_with_whitespace(ptr noundef %9, ptr noundef @.str.8)
  %206 = getelementptr inbounds %struct.s2n_result, ptr %10, i32 0, i32 0
  store i32 %205, ptr %206, align 4
  %207 = getelementptr inbounds %struct.s2n_result, ptr %10, i32 0, i32 0
  %208 = load i32, ptr %207, align 4
  %209 = call zeroext i1 @s2n_result_is_ok(i32 %208)
  br i1 %209, label %211, label %210

210:                                              ; preds = %204
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %11, align 4
  br label %623

211:                                              ; preds = %204
  br label %212

212:                                              ; preds = %211
  br label %213

213:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #10
  call void @llvm.memset.p0.i64(ptr align 8 %12, i8 0, i64 24, i1 false)
  br label %214

214:                                              ; preds = %213
  %215 = call i32 @s2n_blob_alloc_from_hex_with_whitespace(ptr noundef %12, ptr noundef @.str.9)
  %216 = getelementptr inbounds %struct.s2n_result, ptr %13, i32 0, i32 0
  store i32 %215, ptr %216, align 4
  %217 = getelementptr inbounds %struct.s2n_result, ptr %13, i32 0, i32 0
  %218 = load i32, ptr %217, align 4
  %219 = call zeroext i1 @s2n_result_is_ok(i32 %218)
  br i1 %219, label %221, label %220

220:                                              ; preds = %214
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %11, align 4
  br label %621

221:                                              ; preds = %214
  br label %222

222:                                              ; preds = %221
  br label %223

223:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  store ptr null, ptr %14, align 8, !tbaa !9
  br label %224

224:                                              ; preds = %223
  %225 = load i32, ptr @test_count, align 4, !tbaa !5
  %226 = add nsw i32 %225, 1
  store i32 %226, ptr @test_count, align 4, !tbaa !5
  %227 = call ptr @s2n_connection_new(i32 noundef 0)
  store ptr %227, ptr %14, align 8, !tbaa !9
  %228 = icmp eq ptr %227, null
  br i1 %228, label %229, label %282

229:                                              ; preds = %224
  br label %230

230:                                              ; preds = %229
  br label %231

231:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  %232 = call ptr @__errno_location() #11
  %233 = load i32, ptr %232, align 4, !tbaa !5
  store i32 %233, ptr %15, align 4, !tbaa !5
  %234 = load ptr, ptr @stderr, align 8, !tbaa !9
  %235 = call i32 @s2n_print_stacktrace(ptr noundef %234)
  %236 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %237 = trunc i8 %236 to i1
  br i1 %237, label %238, label %260

238:                                              ; preds = %231
  %239 = load ptr, ptr @stderr, align 8, !tbaa !9
  %240 = call i32 @fileno(ptr noundef %239) #10
  %241 = call i32 @isatty(i32 noundef %240) #10
  %242 = icmp ne i32 %241, 0
  br i1 %242, label %243, label %260

243:                                              ; preds = %238
  %244 = load i32, ptr %15, align 4, !tbaa !5
  %245 = call ptr @__errno_location() #11
  store i32 %244, ptr %245, align 4, !tbaa !5
  %246 = load ptr, ptr @stderr, align 8, !tbaa !9
  %247 = load i32, ptr @test_count, align 4, !tbaa !5
  %248 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %249 = load i32, ptr %248, align 4, !tbaa !5
  %250 = call ptr @s2n_strerror(i32 noundef %249, ptr noundef @.str.4)
  %251 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %252 = load i32, ptr %251, align 4, !tbaa !5
  %253 = call ptr @s2n_strerror_debug(i32 noundef %252, ptr noundef @.str.4)
  %254 = call ptr @__errno_location() #11
  %255 = load i32, ptr %254, align 4, !tbaa !5
  %256 = call ptr @strerror(i32 noundef %255) #10
  %257 = call ptr @__errno_location() #11
  %258 = load i32, ptr %257, align 4, !tbaa !5
  %259 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %246, ptr noundef @.str.2, i32 noundef %247, ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 51, ptr noundef %250, ptr noundef %253, ptr noundef %256, i32 noundef %258) #10
  br label %277

260:                                              ; preds = %238, %231
  %261 = load i32, ptr %15, align 4, !tbaa !5
  %262 = call ptr @__errno_location() #11
  store i32 %261, ptr %262, align 4, !tbaa !5
  %263 = load ptr, ptr @stderr, align 8, !tbaa !9
  %264 = load i32, ptr @test_count, align 4, !tbaa !5
  %265 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %266 = load i32, ptr %265, align 4, !tbaa !5
  %267 = call ptr @s2n_strerror(i32 noundef %266, ptr noundef @.str.4)
  %268 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %269 = load i32, ptr %268, align 4, !tbaa !5
  %270 = call ptr @s2n_strerror_debug(i32 noundef %269, ptr noundef @.str.4)
  %271 = call ptr @__errno_location() #11
  %272 = load i32, ptr %271, align 4, !tbaa !5
  %273 = call ptr @strerror(i32 noundef %272) #10
  %274 = call ptr @__errno_location() #11
  %275 = load i32, ptr %274, align 4, !tbaa !5
  %276 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %263, ptr noundef @.str.5, i32 noundef %264, ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 51, ptr noundef %267, ptr noundef %270, ptr noundef %273, i32 noundef %275) #10
  br label %277

277:                                              ; preds = %260, %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  br label %278

278:                                              ; preds = %277
  br label %279

279:                                              ; preds = %278
  call void @exit(i32 noundef 1) #12
  unreachable

280:                                              ; No predecessors!
  br label %281

281:                                              ; preds = %280
  br label %282

282:                                              ; preds = %281, %224
  br label %283

283:                                              ; preds = %282
  br label %284

284:                                              ; preds = %283
  %285 = load ptr, ptr %14, align 8, !tbaa !9
  %286 = getelementptr inbounds %struct.s2n_connection, ptr %285, i32 0, i32 23
  store i8 34, ptr %286, align 4, !tbaa !15
  %287 = load ptr, ptr %14, align 8, !tbaa !9
  %288 = getelementptr inbounds %struct.s2n_connection, ptr %287, i32 0, i32 27
  %289 = load ptr, ptr %288, align 8, !tbaa !42
  %290 = getelementptr inbounds %struct.s2n_crypto_parameters, ptr %289, i32 0, i32 0
  store ptr @s2n_tls13_aes_256_gcm_sha384, ptr %290, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 592, ptr %16) #10
  call void @llvm.memset.p0.i64(ptr align 8 %16, i8 0, i64 592, i1 false)
  br label %291

291:                                              ; preds = %284
  %292 = load ptr, ptr %14, align 8, !tbaa !9
  %293 = call i32 @s2n_tls13_keys_from_conn(ptr noundef %16, ptr noundef %292)
  %294 = icmp sgt i32 %293, -1
  br i1 %294, label %296, label %295

295:                                              ; preds = %291
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %11, align 4
  br label %619

296:                                              ; preds = %291
  br label %297

297:                                              ; preds = %296
  br label %298

298:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %299 = getelementptr inbounds %struct.s2n_tls13_keys, ptr %16, i32 0, i32 2
  %300 = load i8, ptr %299, align 8, !tbaa !48
  %301 = zext i8 %300 to i64
  store i64 %301, ptr %17, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 48, ptr %18) #10
  call void @llvm.memset.p0.i64(ptr align 16 %18, i8 0, i64 48, i1 false)
  br label %302

302:                                              ; preds = %298
  %303 = load i64, ptr %17, align 8, !tbaa !50
  %304 = icmp ule i64 %303, 48
  br i1 %304, label %338, label %305

305:                                              ; preds = %302
  br label %306

306:                                              ; preds = %305
  br label %307

307:                                              ; preds = %306
  %308 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %309 = getelementptr inbounds %struct.s2n_debug_info, ptr %308, i32 0, i32 0
  store ptr @.str.11, ptr %309, align 8, !tbaa !51
  %310 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %311 = getelementptr inbounds %struct.s2n_debug_info, ptr %310, i32 0, i32 0
  %312 = load ptr, ptr %311, align 8, !tbaa !51
  %313 = getelementptr inbounds i8, ptr %312, i64 21
  %314 = call ptr @strrchr(ptr noundef %313, i32 noundef 47) #13
  %315 = icmp ne ptr %314, null
  br i1 %315, label %316, label %323

316:                                              ; preds = %307
  %317 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %318 = getelementptr inbounds %struct.s2n_debug_info, ptr %317, i32 0, i32 0
  %319 = load ptr, ptr %318, align 8, !tbaa !51
  %320 = getelementptr inbounds i8, ptr %319, i64 21
  %321 = call ptr @strrchr(ptr noundef %320, i32 noundef 47) #13
  %322 = getelementptr inbounds i8, ptr %321, i64 1
  br label %328

323:                                              ; preds = %307
  %324 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %325 = getelementptr inbounds %struct.s2n_debug_info, ptr %324, i32 0, i32 0
  %326 = load ptr, ptr %325, align 8, !tbaa !51
  %327 = getelementptr inbounds i8, ptr %326, i64 21
  br label %328

328:                                              ; preds = %323, %316
  %329 = phi ptr [ %322, %316 ], [ %327, %323 ]
  %330 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %331 = getelementptr inbounds %struct.s2n_debug_info, ptr %330, i32 0, i32 1
  store ptr %329, ptr %331, align 8, !tbaa !53
  %332 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653194, ptr %332, align 4, !tbaa !5
  %333 = call i32 @s2n_calculate_stacktrace()
  br label %334

334:                                              ; preds = %328
  br label %335

335:                                              ; preds = %334
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %11, align 4
  br label %618

336:                                              ; No predecessors!
  br label %337

337:                                              ; preds = %336
  br label %338

338:                                              ; preds = %337, %302
  br label %339

339:                                              ; preds = %338
  br label %340

340:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #10
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 24, i1 false)
  br label %341

341:                                              ; preds = %340
  %342 = getelementptr inbounds [48 x i8], ptr %18, i64 0, i64 0
  %343 = load i64, ptr %17, align 8, !tbaa !50
  %344 = trunc i64 %343 to i32
  %345 = call i32 @s2n_blob_init(ptr noundef %19, ptr noundef %342, i32 noundef %344)
  %346 = icmp sgt i32 %345, -1
  br i1 %346, label %348, label %347

347:                                              ; preds = %341
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %11, align 4
  br label %617

348:                                              ; preds = %341
  br label %349

349:                                              ; preds = %348
  br label %350

350:                                              ; preds = %349
  br label %351

351:                                              ; preds = %350
  %352 = load i32, ptr @test_count, align 4, !tbaa !5
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr @test_count, align 4, !tbaa !5
  %354 = call i32 @s2n_tls13_update_application_traffic_secret(ptr noundef %16, ptr noundef %9, ptr noundef %19)
  %355 = icmp eq i32 %354, -1
  br i1 %355, label %356, label %409

356:                                              ; preds = %351
  br label %357

357:                                              ; preds = %356
  br label %358

358:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  %359 = call ptr @__errno_location() #11
  %360 = load i32, ptr %359, align 4, !tbaa !5
  store i32 %360, ptr %20, align 4, !tbaa !5
  %361 = load ptr, ptr @stderr, align 8, !tbaa !9
  %362 = call i32 @s2n_print_stacktrace(ptr noundef %361)
  %363 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %364 = trunc i8 %363 to i1
  br i1 %364, label %365, label %387

365:                                              ; preds = %358
  %366 = load ptr, ptr @stderr, align 8, !tbaa !9
  %367 = call i32 @fileno(ptr noundef %366) #10
  %368 = call i32 @isatty(i32 noundef %367) #10
  %369 = icmp ne i32 %368, 0
  br i1 %369, label %370, label %387

370:                                              ; preds = %365
  %371 = load i32, ptr %20, align 4, !tbaa !5
  %372 = call ptr @__errno_location() #11
  store i32 %371, ptr %372, align 4, !tbaa !5
  %373 = load ptr, ptr @stderr, align 8, !tbaa !9
  %374 = load i32, ptr @test_count, align 4, !tbaa !5
  %375 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %376 = load i32, ptr %375, align 4, !tbaa !5
  %377 = call ptr @s2n_strerror(i32 noundef %376, ptr noundef @.str.4)
  %378 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %379 = load i32, ptr %378, align 4, !tbaa !5
  %380 = call ptr @s2n_strerror_debug(i32 noundef %379, ptr noundef @.str.4)
  %381 = call ptr @__errno_location() #11
  %382 = load i32, ptr %381, align 4, !tbaa !5
  %383 = call ptr @strerror(i32 noundef %382) #10
  %384 = call ptr @__errno_location() #11
  %385 = load i32, ptr %384, align 4, !tbaa !5
  %386 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %373, ptr noundef @.str.2, i32 noundef %374, ptr noundef @.str.12, ptr noundef @.str.1, i32 noundef 61, ptr noundef %377, ptr noundef %380, ptr noundef %383, i32 noundef %385) #10
  br label %404

387:                                              ; preds = %365, %358
  %388 = load i32, ptr %20, align 4, !tbaa !5
  %389 = call ptr @__errno_location() #11
  store i32 %388, ptr %389, align 4, !tbaa !5
  %390 = load ptr, ptr @stderr, align 8, !tbaa !9
  %391 = load i32, ptr @test_count, align 4, !tbaa !5
  %392 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %393 = load i32, ptr %392, align 4, !tbaa !5
  %394 = call ptr @s2n_strerror(i32 noundef %393, ptr noundef @.str.4)
  %395 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %396 = load i32, ptr %395, align 4, !tbaa !5
  %397 = call ptr @s2n_strerror_debug(i32 noundef %396, ptr noundef @.str.4)
  %398 = call ptr @__errno_location() #11
  %399 = load i32, ptr %398, align 4, !tbaa !5
  %400 = call ptr @strerror(i32 noundef %399) #10
  %401 = call ptr @__errno_location() #11
  %402 = load i32, ptr %401, align 4, !tbaa !5
  %403 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %390, ptr noundef @.str.5, i32 noundef %391, ptr noundef @.str.12, ptr noundef @.str.1, i32 noundef 61, ptr noundef %394, ptr noundef %397, ptr noundef %400, i32 noundef %402) #10
  br label %404

404:                                              ; preds = %387, %370
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  br label %405

405:                                              ; preds = %404
  br label %406

406:                                              ; preds = %405
  call void @exit(i32 noundef 1) #12
  unreachable

407:                                              ; No predecessors!
  br label %408

408:                                              ; preds = %407
  br label %409

409:                                              ; preds = %408, %351
  br label %410

410:                                              ; preds = %409
  br label %411

411:                                              ; preds = %410
  br label %412

412:                                              ; preds = %411
  br label %413

413:                                              ; preds = %412
  %414 = load i32, ptr @test_count, align 4, !tbaa !5
  %415 = add nsw i32 %414, 1
  store i32 %415, ptr @test_count, align 4, !tbaa !5
  %416 = getelementptr inbounds %struct.s2n_blob, ptr %19, i32 0, i32 1
  %417 = load i32, ptr %416, align 8, !tbaa !54
  %418 = getelementptr inbounds %struct.s2n_blob, ptr %12, i32 0, i32 1
  %419 = load i32, ptr %418, align 8, !tbaa !54
  %420 = icmp eq i32 %417, %419
  br i1 %420, label %474, label %421

421:                                              ; preds = %413
  br label %422

422:                                              ; preds = %421
  br label %423

423:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  %424 = call ptr @__errno_location() #11
  %425 = load i32, ptr %424, align 4, !tbaa !5
  store i32 %425, ptr %21, align 4, !tbaa !5
  %426 = load ptr, ptr @stderr, align 8, !tbaa !9
  %427 = call i32 @s2n_print_stacktrace(ptr noundef %426)
  %428 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %429 = trunc i8 %428 to i1
  br i1 %429, label %430, label %452

430:                                              ; preds = %423
  %431 = load ptr, ptr @stderr, align 8, !tbaa !9
  %432 = call i32 @fileno(ptr noundef %431) #10
  %433 = call i32 @isatty(i32 noundef %432) #10
  %434 = icmp ne i32 %433, 0
  br i1 %434, label %435, label %452

435:                                              ; preds = %430
  %436 = load i32, ptr %21, align 4, !tbaa !5
  %437 = call ptr @__errno_location() #11
  store i32 %436, ptr %437, align 4, !tbaa !5
  %438 = load ptr, ptr @stderr, align 8, !tbaa !9
  %439 = load i32, ptr @test_count, align 4, !tbaa !5
  %440 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %441 = load i32, ptr %440, align 4, !tbaa !5
  %442 = call ptr @s2n_strerror(i32 noundef %441, ptr noundef @.str.4)
  %443 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %444 = load i32, ptr %443, align 4, !tbaa !5
  %445 = call ptr @s2n_strerror_debug(i32 noundef %444, ptr noundef @.str.4)
  %446 = call ptr @__errno_location() #11
  %447 = load i32, ptr %446, align 4, !tbaa !5
  %448 = call ptr @strerror(i32 noundef %447) #10
  %449 = call ptr @__errno_location() #11
  %450 = load i32, ptr %449, align 4, !tbaa !5
  %451 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %438, ptr noundef @.str.2, i32 noundef %439, ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 64, ptr noundef %442, ptr noundef %445, ptr noundef %448, i32 noundef %450) #10
  br label %469

452:                                              ; preds = %430, %423
  %453 = load i32, ptr %21, align 4, !tbaa !5
  %454 = call ptr @__errno_location() #11
  store i32 %453, ptr %454, align 4, !tbaa !5
  %455 = load ptr, ptr @stderr, align 8, !tbaa !9
  %456 = load i32, ptr @test_count, align 4, !tbaa !5
  %457 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %458 = load i32, ptr %457, align 4, !tbaa !5
  %459 = call ptr @s2n_strerror(i32 noundef %458, ptr noundef @.str.4)
  %460 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %461 = load i32, ptr %460, align 4, !tbaa !5
  %462 = call ptr @s2n_strerror_debug(i32 noundef %461, ptr noundef @.str.4)
  %463 = call ptr @__errno_location() #11
  %464 = load i32, ptr %463, align 4, !tbaa !5
  %465 = call ptr @strerror(i32 noundef %464) #10
  %466 = call ptr @__errno_location() #11
  %467 = load i32, ptr %466, align 4, !tbaa !5
  %468 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %455, ptr noundef @.str.5, i32 noundef %456, ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 64, ptr noundef %459, ptr noundef %462, ptr noundef %465, i32 noundef %467) #10
  br label %469

469:                                              ; preds = %452, %435
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  br label %470

470:                                              ; preds = %469
  br label %471

471:                                              ; preds = %470
  call void @exit(i32 noundef 1) #12
  unreachable

472:                                              ; No predecessors!
  br label %473

473:                                              ; preds = %472
  br label %474

474:                                              ; preds = %473, %413
  br label %475

475:                                              ; preds = %474
  br label %476

476:                                              ; preds = %475
  br label %477

477:                                              ; preds = %476
  %478 = getelementptr inbounds %struct.s2n_blob, ptr %19, i32 0, i32 1
  %479 = load i32, ptr %478, align 8, !tbaa !54
  %480 = icmp ne i32 %479, 0
  br i1 %480, label %481, label %550

481:                                              ; preds = %477
  br label %482

482:                                              ; preds = %481
  %483 = load i32, ptr @test_count, align 4, !tbaa !5
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr @test_count, align 4, !tbaa !5
  %485 = getelementptr inbounds %struct.s2n_blob, ptr %19, i32 0, i32 0
  %486 = load ptr, ptr %485, align 8, !tbaa !55
  %487 = getelementptr inbounds %struct.s2n_blob, ptr %12, i32 0, i32 0
  %488 = load ptr, ptr %487, align 8, !tbaa !55
  %489 = getelementptr inbounds %struct.s2n_blob, ptr %19, i32 0, i32 1
  %490 = load i32, ptr %489, align 8, !tbaa !54
  %491 = zext i32 %490 to i64
  %492 = call i32 @memcmp(ptr noundef %486, ptr noundef %488, i64 noundef %491) #13
  %493 = icmp eq i32 %492, 0
  br i1 %493, label %547, label %494

494:                                              ; preds = %482
  br label %495

495:                                              ; preds = %494
  br label %496

496:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  %497 = call ptr @__errno_location() #11
  %498 = load i32, ptr %497, align 4, !tbaa !5
  store i32 %498, ptr %22, align 4, !tbaa !5
  %499 = load ptr, ptr @stderr, align 8, !tbaa !9
  %500 = call i32 @s2n_print_stacktrace(ptr noundef %499)
  %501 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %502 = trunc i8 %501 to i1
  br i1 %502, label %503, label %525

503:                                              ; preds = %496
  %504 = load ptr, ptr @stderr, align 8, !tbaa !9
  %505 = call i32 @fileno(ptr noundef %504) #10
  %506 = call i32 @isatty(i32 noundef %505) #10
  %507 = icmp ne i32 %506, 0
  br i1 %507, label %508, label %525

508:                                              ; preds = %503
  %509 = load i32, ptr %22, align 4, !tbaa !5
  %510 = call ptr @__errno_location() #11
  store i32 %509, ptr %510, align 4, !tbaa !5
  %511 = load ptr, ptr @stderr, align 8, !tbaa !9
  %512 = load i32, ptr @test_count, align 4, !tbaa !5
  %513 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %514 = load i32, ptr %513, align 4, !tbaa !5
  %515 = call ptr @s2n_strerror(i32 noundef %514, ptr noundef @.str.4)
  %516 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %517 = load i32, ptr %516, align 4, !tbaa !5
  %518 = call ptr @s2n_strerror_debug(i32 noundef %517, ptr noundef @.str.4)
  %519 = call ptr @__errno_location() #11
  %520 = load i32, ptr %519, align 4, !tbaa !5
  %521 = call ptr @strerror(i32 noundef %520) #10
  %522 = call ptr @__errno_location() #11
  %523 = load i32, ptr %522, align 4, !tbaa !5
  %524 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %511, ptr noundef @.str.2, i32 noundef %512, ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 64, ptr noundef %515, ptr noundef %518, ptr noundef %521, i32 noundef %523) #10
  br label %542

525:                                              ; preds = %503, %496
  %526 = load i32, ptr %22, align 4, !tbaa !5
  %527 = call ptr @__errno_location() #11
  store i32 %526, ptr %527, align 4, !tbaa !5
  %528 = load ptr, ptr @stderr, align 8, !tbaa !9
  %529 = load i32, ptr @test_count, align 4, !tbaa !5
  %530 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %531 = load i32, ptr %530, align 4, !tbaa !5
  %532 = call ptr @s2n_strerror(i32 noundef %531, ptr noundef @.str.4)
  %533 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %534 = load i32, ptr %533, align 4, !tbaa !5
  %535 = call ptr @s2n_strerror_debug(i32 noundef %534, ptr noundef @.str.4)
  %536 = call ptr @__errno_location() #11
  %537 = load i32, ptr %536, align 4, !tbaa !5
  %538 = call ptr @strerror(i32 noundef %537) #10
  %539 = call ptr @__errno_location() #11
  %540 = load i32, ptr %539, align 4, !tbaa !5
  %541 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %528, ptr noundef @.str.5, i32 noundef %529, ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 64, ptr noundef %532, ptr noundef %535, ptr noundef %538, i32 noundef %540) #10
  br label %542

542:                                              ; preds = %525, %508
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  br label %543

543:                                              ; preds = %542
  br label %544

544:                                              ; preds = %543
  call void @exit(i32 noundef 1) #12
  unreachable

545:                                              ; No predecessors!
  br label %546

546:                                              ; preds = %545
  br label %547

547:                                              ; preds = %546, %482
  br label %548

548:                                              ; preds = %547
  br label %549

549:                                              ; preds = %548
  br label %550

550:                                              ; preds = %549, %477
  br label %551

551:                                              ; preds = %550
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552
  br label %554

554:                                              ; preds = %553
  br label %555

555:                                              ; preds = %554
  %556 = load i32, ptr @test_count, align 4, !tbaa !5
  %557 = add nsw i32 %556, 1
  store i32 %557, ptr @test_count, align 4, !tbaa !5
  %558 = load ptr, ptr %14, align 8, !tbaa !9
  %559 = call i32 @s2n_connection_free(ptr noundef %558)
  %560 = icmp eq i32 %559, -1
  br i1 %560, label %561, label %614

561:                                              ; preds = %555
  br label %562

562:                                              ; preds = %561
  br label %563

563:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  %564 = call ptr @__errno_location() #11
  %565 = load i32, ptr %564, align 4, !tbaa !5
  store i32 %565, ptr %23, align 4, !tbaa !5
  %566 = load ptr, ptr @stderr, align 8, !tbaa !9
  %567 = call i32 @s2n_print_stacktrace(ptr noundef %566)
  %568 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %569 = trunc i8 %568 to i1
  br i1 %569, label %570, label %592

570:                                              ; preds = %563
  %571 = load ptr, ptr @stderr, align 8, !tbaa !9
  %572 = call i32 @fileno(ptr noundef %571) #10
  %573 = call i32 @isatty(i32 noundef %572) #10
  %574 = icmp ne i32 %573, 0
  br i1 %574, label %575, label %592

575:                                              ; preds = %570
  %576 = load i32, ptr %23, align 4, !tbaa !5
  %577 = call ptr @__errno_location() #11
  store i32 %576, ptr %577, align 4, !tbaa !5
  %578 = load ptr, ptr @stderr, align 8, !tbaa !9
  %579 = load i32, ptr @test_count, align 4, !tbaa !5
  %580 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %581 = load i32, ptr %580, align 4, !tbaa !5
  %582 = call ptr @s2n_strerror(i32 noundef %581, ptr noundef @.str.4)
  %583 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %584 = load i32, ptr %583, align 4, !tbaa !5
  %585 = call ptr @s2n_strerror_debug(i32 noundef %584, ptr noundef @.str.4)
  %586 = call ptr @__errno_location() #11
  %587 = load i32, ptr %586, align 4, !tbaa !5
  %588 = call ptr @strerror(i32 noundef %587) #10
  %589 = call ptr @__errno_location() #11
  %590 = load i32, ptr %589, align 4, !tbaa !5
  %591 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %578, ptr noundef @.str.2, i32 noundef %579, ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 66, ptr noundef %582, ptr noundef %585, ptr noundef %588, i32 noundef %590) #10
  br label %609

592:                                              ; preds = %570, %563
  %593 = load i32, ptr %23, align 4, !tbaa !5
  %594 = call ptr @__errno_location() #11
  store i32 %593, ptr %594, align 4, !tbaa !5
  %595 = load ptr, ptr @stderr, align 8, !tbaa !9
  %596 = load i32, ptr @test_count, align 4, !tbaa !5
  %597 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %598 = load i32, ptr %597, align 4, !tbaa !5
  %599 = call ptr @s2n_strerror(i32 noundef %598, ptr noundef @.str.4)
  %600 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %601 = load i32, ptr %600, align 4, !tbaa !5
  %602 = call ptr @s2n_strerror_debug(i32 noundef %601, ptr noundef @.str.4)
  %603 = call ptr @__errno_location() #11
  %604 = load i32, ptr %603, align 4, !tbaa !5
  %605 = call ptr @strerror(i32 noundef %604) #10
  %606 = call ptr @__errno_location() #11
  %607 = load i32, ptr %606, align 4, !tbaa !5
  %608 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %595, ptr noundef @.str.5, i32 noundef %596, ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 66, ptr noundef %599, ptr noundef %602, ptr noundef %605, i32 noundef %607) #10
  br label %609

609:                                              ; preds = %592, %575
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %610

610:                                              ; preds = %609
  br label %611

611:                                              ; preds = %610
  call void @exit(i32 noundef 1) #12
  unreachable

612:                                              ; No predecessors!
  br label %613

613:                                              ; preds = %612
  br label %614

614:                                              ; preds = %613, %555
  br label %615

615:                                              ; preds = %614
  br label %616

616:                                              ; preds = %615
  store i32 0, ptr %11, align 4
  br label %617

617:                                              ; preds = %616, %347
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #10
  br label %618

618:                                              ; preds = %617, %335
  call void @llvm.lifetime.end.p0(i64 48, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  br label %619

619:                                              ; preds = %618, %295
  %620 = call i32 @s2n_tls13_keys_free(ptr noundef %16)
  call void @llvm.lifetime.end.p0(i64 592, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  br label %621

621:                                              ; preds = %619, %220
  %622 = call i32 @s2n_free(ptr noundef %12)
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #10
  br label %623

623:                                              ; preds = %621, %210
  %624 = call i32 @s2n_free(ptr noundef %9)
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #10
  %625 = load i32, ptr %11, align 4
  switch i32 %625, label %774 [
    i32 0, label %626
    i32 1, label %772
  ]

626:                                              ; preds = %623
  br label %627

627:                                              ; preds = %626
  br label %628

628:                                              ; preds = %627
  %629 = call i32 @s2n_cleanup()
  %630 = icmp eq i32 %629, -1
  br i1 %630, label %631, label %682

631:                                              ; preds = %628
  br label %632

632:                                              ; preds = %631
  br label %633

633:                                              ; preds = %632
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  %634 = call ptr @__errno_location() #11
  %635 = load i32, ptr %634, align 4, !tbaa !5
  store i32 %635, ptr %24, align 4, !tbaa !5
  %636 = load ptr, ptr @stderr, align 8, !tbaa !9
  %637 = call i32 @s2n_print_stacktrace(ptr noundef %636)
  %638 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %639 = trunc i8 %638 to i1
  br i1 %639, label %640, label %662

640:                                              ; preds = %633
  %641 = load ptr, ptr @stderr, align 8, !tbaa !9
  %642 = call i32 @fileno(ptr noundef %641) #10
  %643 = call i32 @isatty(i32 noundef %642) #10
  %644 = icmp ne i32 %643, 0
  br i1 %644, label %645, label %662

645:                                              ; preds = %640
  %646 = load i32, ptr %24, align 4, !tbaa !5
  %647 = call ptr @__errno_location() #11
  store i32 %646, ptr %647, align 4, !tbaa !5
  %648 = load ptr, ptr @stderr, align 8, !tbaa !9
  %649 = load i32, ptr @test_count, align 4, !tbaa !5
  %650 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %651 = load i32, ptr %650, align 4, !tbaa !5
  %652 = call ptr @s2n_strerror(i32 noundef %651, ptr noundef @.str.4)
  %653 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %654 = load i32, ptr %653, align 4, !tbaa !5
  %655 = call ptr @s2n_strerror_debug(i32 noundef %654, ptr noundef @.str.4)
  %656 = call ptr @__errno_location() #11
  %657 = load i32, ptr %656, align 4, !tbaa !5
  %658 = call ptr @strerror(i32 noundef %657) #10
  %659 = call ptr @__errno_location() #11
  %660 = load i32, ptr %659, align 4, !tbaa !5
  %661 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %648, ptr noundef @.str.2, i32 noundef %649, ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 69, ptr noundef %652, ptr noundef %655, ptr noundef %658, i32 noundef %660) #10
  br label %679

662:                                              ; preds = %640, %633
  %663 = load i32, ptr %24, align 4, !tbaa !5
  %664 = call ptr @__errno_location() #11
  store i32 %663, ptr %664, align 4, !tbaa !5
  %665 = load ptr, ptr @stderr, align 8, !tbaa !9
  %666 = load i32, ptr @test_count, align 4, !tbaa !5
  %667 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %668 = load i32, ptr %667, align 4, !tbaa !5
  %669 = call ptr @s2n_strerror(i32 noundef %668, ptr noundef @.str.4)
  %670 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %671 = load i32, ptr %670, align 4, !tbaa !5
  %672 = call ptr @s2n_strerror_debug(i32 noundef %671, ptr noundef @.str.4)
  %673 = call ptr @__errno_location() #11
  %674 = load i32, ptr %673, align 4, !tbaa !5
  %675 = call ptr @strerror(i32 noundef %674) #10
  %676 = call ptr @__errno_location() #11
  %677 = load i32, ptr %676, align 4, !tbaa !5
  %678 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %665, ptr noundef @.str.5, i32 noundef %666, ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 69, ptr noundef %669, ptr noundef %672, ptr noundef %675, i32 noundef %677) #10
  br label %679

679:                                              ; preds = %662, %645
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %680

680:                                              ; preds = %679
  call void @exit(i32 noundef 1) #12
  unreachable

681:                                              ; No predecessors!
  br label %682

682:                                              ; preds = %681, %628
  br label %683

683:                                              ; preds = %682
  br label %684

684:                                              ; preds = %683
  br label %685

685:                                              ; preds = %684
  %686 = call i32 @s2n_in_unit_test_set(i1 noundef zeroext false)
  %687 = icmp eq i32 %686, -1
  br i1 %687, label %688, label %739

688:                                              ; preds = %685
  br label %689

689:                                              ; preds = %688
  br label %690

690:                                              ; preds = %689
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  %691 = call ptr @__errno_location() #11
  %692 = load i32, ptr %691, align 4, !tbaa !5
  store i32 %692, ptr %25, align 4, !tbaa !5
  %693 = load ptr, ptr @stderr, align 8, !tbaa !9
  %694 = call i32 @s2n_print_stacktrace(ptr noundef %693)
  %695 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %696 = trunc i8 %695 to i1
  br i1 %696, label %697, label %719

697:                                              ; preds = %690
  %698 = load ptr, ptr @stderr, align 8, !tbaa !9
  %699 = call i32 @fileno(ptr noundef %698) #10
  %700 = call i32 @isatty(i32 noundef %699) #10
  %701 = icmp ne i32 %700, 0
  br i1 %701, label %702, label %719

702:                                              ; preds = %697
  %703 = load i32, ptr %25, align 4, !tbaa !5
  %704 = call ptr @__errno_location() #11
  store i32 %703, ptr %704, align 4, !tbaa !5
  %705 = load ptr, ptr @stderr, align 8, !tbaa !9
  %706 = load i32, ptr @test_count, align 4, !tbaa !5
  %707 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %708 = load i32, ptr %707, align 4, !tbaa !5
  %709 = call ptr @s2n_strerror(i32 noundef %708, ptr noundef @.str.4)
  %710 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %711 = load i32, ptr %710, align 4, !tbaa !5
  %712 = call ptr @s2n_strerror_debug(i32 noundef %711, ptr noundef @.str.4)
  %713 = call ptr @__errno_location() #11
  %714 = load i32, ptr %713, align 4, !tbaa !5
  %715 = call ptr @strerror(i32 noundef %714) #10
  %716 = call ptr @__errno_location() #11
  %717 = load i32, ptr %716, align 4, !tbaa !5
  %718 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %705, ptr noundef @.str.2, i32 noundef %706, ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 69, ptr noundef %709, ptr noundef %712, ptr noundef %715, i32 noundef %717) #10
  br label %736

719:                                              ; preds = %697, %690
  %720 = load i32, ptr %25, align 4, !tbaa !5
  %721 = call ptr @__errno_location() #11
  store i32 %720, ptr %721, align 4, !tbaa !5
  %722 = load ptr, ptr @stderr, align 8, !tbaa !9
  %723 = load i32, ptr @test_count, align 4, !tbaa !5
  %724 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %725 = load i32, ptr %724, align 4, !tbaa !5
  %726 = call ptr @s2n_strerror(i32 noundef %725, ptr noundef @.str.4)
  %727 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %728 = load i32, ptr %727, align 4, !tbaa !5
  %729 = call ptr @s2n_strerror_debug(i32 noundef %728, ptr noundef @.str.4)
  %730 = call ptr @__errno_location() #11
  %731 = load i32, ptr %730, align 4, !tbaa !5
  %732 = call ptr @strerror(i32 noundef %731) #10
  %733 = call ptr @__errno_location() #11
  %734 = load i32, ptr %733, align 4, !tbaa !5
  %735 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %722, ptr noundef @.str.5, i32 noundef %723, ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 69, ptr noundef %726, ptr noundef %729, ptr noundef %732, i32 noundef %734) #10
  br label %736

736:                                              ; preds = %719, %702
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %737

737:                                              ; preds = %736
  call void @exit(i32 noundef 1) #12
  unreachable

738:                                              ; No predecessors!
  br label %739

739:                                              ; preds = %738, %685
  br label %740

740:                                              ; preds = %739
  %741 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %742 = trunc i8 %741 to i1
  br i1 %742, label %743, label %759

743:                                              ; preds = %740
  %744 = load ptr, ptr @stdout, align 8, !tbaa !9
  %745 = call i32 @fileno(ptr noundef %744) #10
  %746 = call i32 @isatty(i32 noundef %745) #10
  %747 = icmp ne i32 %746, 0
  br i1 %747, label %748, label %759

748:                                              ; preds = %743
  %749 = load i32, ptr @test_count, align 4, !tbaa !5
  %750 = icmp ne i32 %749, 0
  br i1 %750, label %751, label %755

751:                                              ; preds = %748
  %752 = load ptr, ptr @stdout, align 8, !tbaa !9
  %753 = load i32, ptr @test_count, align 4, !tbaa !5
  %754 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %752, ptr noundef @.str.18, i32 noundef %753) #10
  br label %758

755:                                              ; preds = %748
  %756 = load ptr, ptr @stdout, align 8, !tbaa !9
  %757 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %756, ptr noundef @.str.19) #10
  br label %758

758:                                              ; preds = %755, %751
  br label %770

759:                                              ; preds = %743, %740
  %760 = load i32, ptr @test_count, align 4, !tbaa !5
  %761 = icmp ne i32 %760, 0
  br i1 %761, label %762, label %766

762:                                              ; preds = %759
  %763 = load ptr, ptr @stdout, align 8, !tbaa !9
  %764 = load i32, ptr @test_count, align 4, !tbaa !5
  %765 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %763, ptr noundef @.str.20, i32 noundef %764) #10
  br label %769

766:                                              ; preds = %759
  %767 = load ptr, ptr @stdout, align 8, !tbaa !9
  %768 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %767, ptr noundef @.str.21) #10
  br label %769

769:                                              ; preds = %766, %762
  br label %770

770:                                              ; preds = %769, %758
  store i32 0, ptr %3, align 4
  br label %772

771:                                              ; No predecessors!
  br label %772

772:                                              ; preds = %771, %770, %623
  %773 = load i32, ptr %3, align 4
  ret i32 %773

774:                                              ; preds = %623
  unreachable
}

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

declare i32 @fflush(ptr noundef) #2

declare i32 @s2n_in_unit_test_set(i1 noundef zeroext) #2

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

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #4

declare i32 @s2n_print_stacktrace(ptr noundef) #2

; Function Attrs: nounwind
declare i32 @isatty(i32 noundef) #1

; Function Attrs: nounwind
declare i32 @fileno(ptr noundef) #1

declare ptr @s2n_strerror(i32 noundef, ptr noundef) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #5

declare ptr @s2n_strerror_debug(i32 noundef, ptr noundef) #2

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) #1

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #6

declare i32 @s2n_enable_atexit() #2

declare i32 @s2n_init() #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

declare i32 @s2n_free(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @s2n_result_is_ok(i32) #8

declare i32 @s2n_blob_alloc_from_hex_with_whitespace(ptr noundef, ptr noundef) #2

declare ptr @s2n_connection_new(i32 noundef) #2

declare i32 @s2n_tls13_keys_free(ptr noundef) #2

declare i32 @s2n_tls13_keys_from_conn(ptr noundef, ptr noundef) #2

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

declare i32 @s2n_calculate_stacktrace() #2

declare i32 @s2n_blob_init(ptr noundef, ptr noundef, i32 noundef) #2

declare i32 @s2n_tls13_update_application_traffic_secret(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #9

declare i32 @s2n_connection_free(ptr noundef) #2

declare i32 @s2n_cleanup() #2

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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "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 #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { inlinehint 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 #9 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(none) }
attributes #12 = { noreturn nounwind }
attributes #13 = { nounwind willreturn memory(read) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !7, i64 220}
!16 = !{!"s2n_connection", !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !7, i64 102, !7, i64 124, !6, i64 148, !6, i64 152, !17, i64 160, !18, i64 168, !18, i64 176, !7, i64 184, !7, i64 216, !7, i64 217, !7, i64 218, !7, i64 219, !7, i64 220, !7, i64 221, !7, i64 222, !10, i64 224, !10, i64 232, !19, i64 240, !10, i64 632, !10, i64 640, !20, i64 648, !26, i64 1144, !29, i64 1688, !10, i64 1752, !7, i64 1760, !6, i64 1764, !7, i64 1768, !32, i64 1776, !32, i64 1816, !32, i64 1856, !32, i64 1896, !6, i64 1936, !18, i64 1944, !7, i64 1952, !32, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !12, i64 2003, !33, i64 2004, !33, i64 2008, !34, i64 2016, !31, i64 2208, !6, i64 2212, !31, i64 2216, !18, i64 2224, !7, i64 2232, !18, i64 2240, !18, i64 2248, !18, i64 2256, !33, i64 2264, !33, i64 2268, !7, i64 2272, !7, i64 2528, !6, i64 2784, !25, i64 2792, !6, i64 2816, !25, i64 2824, !25, i64 2848, !25, i64 2872, !36, i64 2896, !38, i64 3704, !10, i64 3760, !10, i64 3768, !7, i64 3776, !6, i64 3780, !25, i64 3784, !6, i64 3808, !40, i64 3816, !7, i64 3848, !32, i64 3992, !25, i64 4032, !25, i64 4056, !12, i64 4080, !12, i64 4081, !12, i64 4082, !31, i64 4084, !31, i64 4086, !6, i64 4088, !6, i64 4092, !25, i64 4096, !6, i64 4120, !41, i64 4128, !33, i64 4176, !7, i64 4180, !7, i64 4181}
!17 = !{!"s2n_timer", !18, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"s2n_secrets", !7, i64 0, !6, i64 388}
!20 = !{!"s2n_kex_parameters", !21, i64 0, !22, i64 8, !7, i64 24, !22, i64 56, !23, i64 72, !23, i64 184, !7, i64 296, !24, i64 360, !25, i64 448, !25, i64 472}
!21 = !{!"s2n_dh_params", !10, i64 0}
!22 = !{!"s2n_ecc_evp_params", !10, i64 0, !10, i64 8}
!23 = !{!"s2n_kem_group_params", !10, i64 0, !24, i64 8, !22, i64 96}
!24 = !{!"s2n_kem_params", !10, i64 0, !25, i64 8, !25, i64 32, !25, i64 56, !12, i64 80}
!25 = !{!"s2n_blob", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16}
!26 = !{!"s2n_handshake_parameters", !27, i64 0, !27, i64 48, !25, i64 96, !6, i64 120, !28, i64 124, !10, i64 384, !10, i64 392, !10, i64 400, !7, i64 408, !7, i64 440, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 506}
!27 = !{!"s2n_pkey", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!28 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!29 = !{!"s2n_psk_parameters", !6, i64 0, !30, i64 8, !31, i64 40, !31, i64 42, !10, i64 48, !6, i64 56}
!30 = !{!"s2n_array", !25, i64 0, !6, i64 24, !6, i64 28}
!31 = !{!"short", !7, i64 0}
!32 = !{!"s2n_stuffer", !25, i64 0, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 36, !6, i64 36}
!33 = !{!"", !6, i64 0}
!34 = !{!"s2n_handshake", !32, i64 0, !10, i64 40, !7, i64 48, !7, i64 56, !7, i64 104, !7, i64 152, !6, i64 156, !6, i64 160, !6, i64 164, !6, i64 168, !35, i64 176, !6, i64 184, !6, i64 184, !6, i64 184, !6, i64 184, !6, i64 188}
!35 = !{!"s2n_offered_early_data", !10, i64 0}
!36 = !{!"s2n_client_hello", !25, i64 0, !37, i64 24, !25, i64 728, !25, i64 752, !25, i64 776, !7, i64 800, !7, i64 801, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802}
!37 = !{!"", !7, i64 0, !25, i64 672, !31, i64 696}
!38 = !{!"s2n_x509_validator", !10, i64 0, !10, i64 8, !7, i64 16, !7, i64 17, !31, i64 18, !10, i64 24, !6, i64 32, !10, i64 40, !39, i64 48, !12, i64 52}
!39 = !{!"s2n_cert_validation_info", !6, i64 0, !6, i64 0}
!40 = !{!"s2n_ticket_fields", !25, i64 0, !6, i64 24}
!41 = !{!"s2n_post_handshake", !32, i64 0, !7, i64 40}
!42 = !{!16, !10, i64 232}
!43 = !{!44, !10, i64 0}
!44 = !{!"s2n_crypto_parameters", !10, i64 0, !45, i64 8, !45, i64 16, !46, i64 24, !46, i64 456, !7, i64 888, !7, i64 904, !7, i64 920, !7, i64 928}
!45 = !{!"s2n_session_key", !10, i64 0}
!46 = !{!"s2n_hmac_state", !6, i64 0, !31, i64 4, !6, i64 8, !31, i64 12, !7, i64 14, !47, i64 16, !47, i64 72, !47, i64 128, !47, i64 184, !7, i64 240, !7, i64 368}
!47 = !{!"s2n_hash_state", !10, i64 0, !6, i64 8, !7, i64 12, !18, i64 16, !7, i64 24}
!48 = !{!49, !7, i64 8}
!49 = !{!"s2n_tls13_keys", !6, i64 0, !6, i64 4, !7, i64 8, !25, i64 16, !25, i64 40, !7, i64 64, !7, i64 112, !46, i64 160}
!50 = !{!18, !18, i64 0}
!51 = !{!52, !10, i64 0}
!52 = !{!"s2n_debug_info", !10, i64 0, !10, i64 8}
!53 = !{!52, !10, i64 8}
!54 = !{!25, !6, i64 8}
!55 = !{!25, !10, i64 0}


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

%struct.s2n_cipher_suite = type { i8, ptr, ptr, [2 x i8], ptr, i32, ptr, [2 x ptr], i8, ptr, ptr, i32, i8 }
%struct.s2n_debug_info = type { ptr, ptr }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_tls13_keys = type { i32, i32, i8, %struct.s2n_blob, %struct.s2n_blob, [48 x i8], [48 x i8], %struct.s2n_hmac_state }
%struct.s2n_hmac_state = type { i32, i16, i32, i16, i8, %struct.s2n_hash_state, %struct.s2n_hash_state, %struct.s2n_hash_state, %struct.s2n_hash_state, [128 x i8], [64 x i8] }
%struct.s2n_hash_state = type { ptr, i32, i8, i64, %union.anon.0 }
%union.anon.0 = type { %struct.s2n_hash_evp_digest }
%struct.s2n_hash_evp_digest = type { %struct.s2n_evp_digest, %struct.s2n_evp_digest }
%struct.s2n_evp_digest = type { ptr, ptr }

@s2n_use_color_in_output = external dso_local local_unnamed_addr global i8, align 1
@test_count = external dso_local local_unnamed_addr global i32, align 4
@stdout = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [78 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [52 x i8], align 1
@s2n_errno = external thread_local local_unnamed_addr global i32, align 4
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [79 x i8], align 1
@s2n_tls13_aes_256_gcm_sha384 = external global %struct.s2n_cipher_suite, align 8
@.str.11 = external hidden unnamed_addr constant [102 x i8], align 1
@_s2n_debug_info = external thread_local local_unnamed_addr global %struct.s2n_debug_info, align 8
@.str.12 = external hidden unnamed_addr constant [120 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [118 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @main(i32 noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #0 {
  %3 = alloca %struct.s2n_blob, align 8
  %4 = alloca %struct.s2n_blob, align 8
  %5 = alloca %struct.s2n_tls13_keys, align 8
  %6 = alloca [48 x i8], align 16
  %7 = alloca %struct.s2n_blob, align 8
  store i32 0, ptr @test_count, align 4, !tbaa !5
  %8 = load ptr, ptr @stdout, align 8, !tbaa !9
  %9 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %8, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1) #12
  %10 = load ptr, ptr @stdout, align 8, !tbaa !9
  %11 = tail call i32 @fflush(ptr noundef %10)
  %12 = tail call i32 @s2n_in_unit_test_set(i1 noundef zeroext true) #12
  %13 = icmp eq i32 %12, -1
  br i1 %13, label %14, label %38

14:                                               ; preds = %2
  %15 = tail call ptr @__errno_location() #13
  %16 = load i32, ptr %15, align 4, !tbaa !5
  %17 = load ptr, ptr @stderr, align 8, !tbaa !9
  %18 = tail call i32 @s2n_print_stacktrace(ptr noundef %17) #12
  %19 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %20 = trunc nuw i8 %19 to i1
  br i1 %20, label %21, label %25

21:                                               ; preds = %14
  %22 = load ptr, ptr @stderr, align 8, !tbaa !9
  %23 = tail call i32 @fileno(ptr noundef %22) #12
  %24 = tail call i32 @isatty(i32 noundef %23) #12
  %.not52 = icmp eq i32 %24, 0
  br i1 %.not52, label %25, label %26

25:                                               ; preds = %21, %14
  br label %26

26:                                               ; preds = %21, %25
  %.str.5.sink = phi ptr [ @.str.5, %25 ], [ @.str.2, %21 ]
  store i32 %16, ptr %15, align 4, !tbaa !5
  %27 = load ptr, ptr @stderr, align 8, !tbaa !9
  %28 = load i32, ptr @test_count, align 4, !tbaa !5
  %29 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %30 = load i32, ptr %29, align 4, !tbaa !5
  %31 = tail call ptr @s2n_strerror(i32 noundef %30, ptr noundef nonnull @.str.4) #12
  %32 = load i32, ptr %29, align 4, !tbaa !5
  %33 = tail call ptr @s2n_strerror_debug(i32 noundef %32, ptr noundef nonnull @.str.4) #12
  %34 = load i32, ptr %15, align 4, !tbaa !5
  %35 = tail call ptr @strerror(i32 noundef %34) #12
  %36 = load i32, ptr %15, align 4, !tbaa !5
  %37 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %27, ptr noundef nonnull %.str.5.sink, i32 noundef %28, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 31, ptr noundef %31, ptr noundef %33, ptr noundef %35, i32 noundef %36) #14
  tail call void @exit(i32 noundef 1) #15
  unreachable

38:                                               ; preds = %2
  %39 = load i32, ptr @test_count, align 4, !tbaa !5
  %40 = add nsw i32 %39, 1
  store i32 %40, ptr @test_count, align 4, !tbaa !5
  %41 = tail call i32 @s2n_enable_atexit() #12
  %42 = icmp eq i32 %41, -1
  br i1 %42, label %43, label %67

43:                                               ; preds = %38
  %44 = tail call ptr @__errno_location() #13
  %45 = load i32, ptr %44, align 4, !tbaa !5
  %46 = load ptr, ptr @stderr, align 8, !tbaa !9
  %47 = tail call i32 @s2n_print_stacktrace(ptr noundef %46) #12
  %48 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %49 = trunc nuw i8 %48 to i1
  br i1 %49, label %50, label %54

50:                                               ; preds = %43
  %51 = load ptr, ptr @stderr, align 8, !tbaa !9
  %52 = tail call i32 @fileno(ptr noundef %51) #12
  %53 = tail call i32 @isatty(i32 noundef %52) #12
  %.not51 = icmp eq i32 %53, 0
  br i1 %.not51, label %54, label %55

54:                                               ; preds = %50, %43
  br label %55

55:                                               ; preds = %50, %54
  %.str.5.sink66 = phi ptr [ @.str.5, %54 ], [ @.str.2, %50 ]
  store i32 %45, ptr %44, align 4, !tbaa !5
  %56 = load ptr, ptr @stderr, align 8, !tbaa !9
  %57 = load i32, ptr @test_count, align 4, !tbaa !5
  %58 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %59 = load i32, ptr %58, align 4, !tbaa !5
  %60 = tail call ptr @s2n_strerror(i32 noundef %59, ptr noundef nonnull @.str.4) #12
  %61 = load i32, ptr %58, align 4, !tbaa !5
  %62 = tail call ptr @s2n_strerror_debug(i32 noundef %61, ptr noundef nonnull @.str.4) #12
  %63 = load i32, ptr %44, align 4, !tbaa !5
  %64 = tail call ptr @strerror(i32 noundef %63) #12
  %65 = load i32, ptr %44, align 4, !tbaa !5
  %66 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef nonnull %.str.5.sink66, i32 noundef %57, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 31, ptr noundef %60, ptr noundef %62, ptr noundef %64, i32 noundef %65) #14
  tail call void @exit(i32 noundef 1) #15
  unreachable

67:                                               ; preds = %38
  %68 = tail call i32 @s2n_init() #12
  %69 = icmp eq i32 %68, -1
  br i1 %69, label %70, label %94

70:                                               ; preds = %67
  %71 = tail call ptr @__errno_location() #13
  %72 = load i32, ptr %71, align 4, !tbaa !5
  %73 = load ptr, ptr @stderr, align 8, !tbaa !9
  %74 = tail call i32 @s2n_print_stacktrace(ptr noundef %73) #12
  %75 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %76 = trunc nuw i8 %75 to i1
  br i1 %76, label %77, label %81

77:                                               ; preds = %70
  %78 = load ptr, ptr @stderr, align 8, !tbaa !9
  %79 = tail call i32 @fileno(ptr noundef %78) #12
  %80 = tail call i32 @isatty(i32 noundef %79) #12
  %.not50 = icmp eq i32 %80, 0
  br i1 %.not50, label %81, label %82

81:                                               ; preds = %77, %70
  br label %82

82:                                               ; preds = %77, %81
  %.str.5.sink77 = phi ptr [ @.str.5, %81 ], [ @.str.2, %77 ]
  store i32 %72, ptr %71, align 4, !tbaa !5
  %83 = load ptr, ptr @stderr, align 8, !tbaa !9
  %84 = load i32, ptr @test_count, align 4, !tbaa !5
  %85 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %86 = load i32, ptr %85, align 4, !tbaa !5
  %87 = tail call ptr @s2n_strerror(i32 noundef %86, ptr noundef nonnull @.str.4) #12
  %88 = load i32, ptr %85, align 4, !tbaa !5
  %89 = tail call ptr @s2n_strerror_debug(i32 noundef %88, ptr noundef nonnull @.str.4) #12
  %90 = load i32, ptr %71, align 4, !tbaa !5
  %91 = tail call ptr @strerror(i32 noundef %90) #12
  %92 = load i32, ptr %71, align 4, !tbaa !5
  %93 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %83, ptr noundef nonnull %.str.5.sink77, i32 noundef %84, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 31, ptr noundef %87, ptr noundef %89, ptr noundef %91, i32 noundef %92) #14
  tail call void @exit(i32 noundef 1) #15
  unreachable

94:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %3, i8 0, i64 24, i1 false)
  %95 = call i32 @s2n_blob_alloc_from_hex_with_whitespace(ptr noundef nonnull %3, ptr noundef nonnull @.str.8) #12
  %96 = call zeroext i1 @s2n_result_is_ok(i32 %95)
  br i1 %96, label %98, label %.thread

.thread:                                          ; preds = %94
  %97 = call i32 @s2n_free(ptr noundef nonnull %3) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #12
  br label %355

98:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %4, i8 0, i64 24, i1 false)
  %99 = call i32 @s2n_blob_alloc_from_hex_with_whitespace(ptr noundef nonnull %4, ptr noundef nonnull @.str.9) #12
  %100 = call zeroext i1 @s2n_result_is_ok(i32 %99)
  br i1 %100, label %101, label %277

101:                                              ; preds = %98
  %102 = load i32, ptr @test_count, align 4, !tbaa !5
  %103 = add nsw i32 %102, 1
  store i32 %103, ptr @test_count, align 4, !tbaa !5
  %104 = call ptr @s2n_connection_new(i32 noundef 0) #12
  %105 = icmp eq ptr %104, null
  br i1 %105, label %106, label %130

106:                                              ; preds = %101
  %107 = tail call ptr @__errno_location() #13
  %108 = load i32, ptr %107, align 4, !tbaa !5
  %109 = load ptr, ptr @stderr, align 8, !tbaa !9
  %110 = call i32 @s2n_print_stacktrace(ptr noundef %109) #12
  %111 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %112 = trunc nuw i8 %111 to i1
  br i1 %112, label %113, label %117

113:                                              ; preds = %106
  %114 = load ptr, ptr @stderr, align 8, !tbaa !9
  %115 = call i32 @fileno(ptr noundef %114) #12
  %116 = call i32 @isatty(i32 noundef %115) #12
  %.not49 = icmp eq i32 %116, 0
  br i1 %.not49, label %117, label %118

117:                                              ; preds = %113, %106
  br label %118

118:                                              ; preds = %113, %117
  %.str.5.sink88 = phi ptr [ @.str.5, %117 ], [ @.str.2, %113 ]
  store i32 %108, ptr %107, align 4, !tbaa !5
  %119 = load ptr, ptr @stderr, align 8, !tbaa !9
  %120 = load i32, ptr @test_count, align 4, !tbaa !5
  %121 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %122 = load i32, ptr %121, align 4, !tbaa !5
  %123 = call ptr @s2n_strerror(i32 noundef %122, ptr noundef nonnull @.str.4) #12
  %124 = load i32, ptr %121, align 4, !tbaa !5
  %125 = call ptr @s2n_strerror_debug(i32 noundef %124, ptr noundef nonnull @.str.4) #12
  %126 = load i32, ptr %107, align 4, !tbaa !5
  %127 = call ptr @strerror(i32 noundef %126) #12
  %128 = load i32, ptr %107, align 4, !tbaa !5
  %129 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %119, ptr noundef nonnull %.str.5.sink88, i32 noundef %120, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 51, ptr noundef %123, ptr noundef %125, ptr noundef %127, i32 noundef %128) #14
  call void @exit(i32 noundef 1) #15
  unreachable

130:                                              ; preds = %101
  %131 = getelementptr inbounds i8, ptr %104, i64 220
  store i8 34, ptr %131, align 4, !tbaa !15
  %132 = getelementptr inbounds i8, ptr %104, i64 232
  %133 = load ptr, ptr %132, align 8, !tbaa !42
  store ptr @s2n_tls13_aes_256_gcm_sha384, ptr %133, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 592, ptr nonnull %5) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(592) %5, i8 0, i64 592, i1 false)
  %134 = call i32 @s2n_tls13_keys_from_conn(ptr noundef nonnull %5, ptr noundef nonnull %104) #12
  %135 = icmp sgt i32 %134, -1
  br i1 %135, label %136, label %275

136:                                              ; preds = %130
  %137 = getelementptr inbounds i8, ptr %5, i64 8
  %138 = load i8, ptr %137, align 8, !tbaa !48
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(48) %6, i8 0, i64 48, i1 false)
  %139 = icmp ult i8 %138, 49
  br i1 %139, label %148, label %140

140:                                              ; preds = %136
  %141 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.11, ptr %141, align 8, !tbaa !50
  %142 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.11, i64 21), i32 noundef 47) #16
  %.not = icmp eq ptr %142, null
  %143 = getelementptr inbounds i8, ptr %142, i64 1
  %144 = select i1 %.not, ptr getelementptr inbounds (i8, ptr @.str.11, i64 21), ptr %143
  %145 = getelementptr inbounds i8, ptr %141, i64 8
  store ptr %144, ptr %145, align 8, !tbaa !52
  %146 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653194, ptr %146, align 4, !tbaa !5
  %147 = call i32 @s2n_calculate_stacktrace() #12
  br label %274

148:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %7, i8 0, i64 24, i1 false)
  %149 = zext nneg i8 %138 to i32
  %150 = call i32 @s2n_blob_init(ptr noundef nonnull %7, ptr noundef nonnull %6, i32 noundef %149) #12
  %151 = icmp sgt i32 %150, -1
  br i1 %151, label %152, label %273

152:                                              ; preds = %148
  %153 = load i32, ptr @test_count, align 4, !tbaa !5
  %154 = add nsw i32 %153, 1
  store i32 %154, ptr @test_count, align 4, !tbaa !5
  %155 = call i32 @s2n_tls13_update_application_traffic_secret(ptr noundef nonnull %5, ptr noundef nonnull %3, ptr noundef nonnull %7) #12
  %156 = icmp eq i32 %155, -1
  br i1 %156, label %157, label %181

157:                                              ; preds = %152
  %158 = tail call ptr @__errno_location() #13
  %159 = load i32, ptr %158, align 4, !tbaa !5
  %160 = load ptr, ptr @stderr, align 8, !tbaa !9
  %161 = call i32 @s2n_print_stacktrace(ptr noundef %160) #12
  %162 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %163 = trunc nuw i8 %162 to i1
  br i1 %163, label %164, label %168

164:                                              ; preds = %157
  %165 = load ptr, ptr @stderr, align 8, !tbaa !9
  %166 = call i32 @fileno(ptr noundef %165) #12
  %167 = call i32 @isatty(i32 noundef %166) #12
  %.not48 = icmp eq i32 %167, 0
  br i1 %.not48, label %168, label %169

168:                                              ; preds = %164, %157
  br label %169

169:                                              ; preds = %164, %168
  %.str.5.sink99 = phi ptr [ @.str.5, %168 ], [ @.str.2, %164 ]
  store i32 %159, ptr %158, align 4, !tbaa !5
  %170 = load ptr, ptr @stderr, align 8, !tbaa !9
  %171 = load i32, ptr @test_count, align 4, !tbaa !5
  %172 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %173 = load i32, ptr %172, align 4, !tbaa !5
  %174 = call ptr @s2n_strerror(i32 noundef %173, ptr noundef nonnull @.str.4) #12
  %175 = load i32, ptr %172, align 4, !tbaa !5
  %176 = call ptr @s2n_strerror_debug(i32 noundef %175, ptr noundef nonnull @.str.4) #12
  %177 = load i32, ptr %158, align 4, !tbaa !5
  %178 = call ptr @strerror(i32 noundef %177) #12
  %179 = load i32, ptr %158, align 4, !tbaa !5
  %180 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %170, ptr noundef nonnull %.str.5.sink99, i32 noundef %171, ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.1, i32 noundef 61, ptr noundef %174, ptr noundef %176, ptr noundef %178, i32 noundef %179) #14
  call void @exit(i32 noundef 1) #15
  unreachable

181:                                              ; preds = %152
  %182 = load i32, ptr @test_count, align 4, !tbaa !5
  %183 = add nsw i32 %182, 1
  store i32 %183, ptr @test_count, align 4, !tbaa !5
  %184 = getelementptr inbounds i8, ptr %7, i64 8
  %185 = load i32, ptr %184, align 8, !tbaa !53
  %186 = getelementptr inbounds i8, ptr %4, i64 8
  %187 = load i32, ptr %186, align 8, !tbaa !53
  %188 = icmp eq i32 %185, %187
  br i1 %188, label %213, label %189

189:                                              ; preds = %181
  %190 = tail call ptr @__errno_location() #13
  %191 = load i32, ptr %190, align 4, !tbaa !5
  %192 = load ptr, ptr @stderr, align 8, !tbaa !9
  %193 = call i32 @s2n_print_stacktrace(ptr noundef %192) #12
  %194 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %195 = trunc nuw i8 %194 to i1
  br i1 %195, label %196, label %200

196:                                              ; preds = %189
  %197 = load ptr, ptr @stderr, align 8, !tbaa !9
  %198 = call i32 @fileno(ptr noundef %197) #12
  %199 = call i32 @isatty(i32 noundef %198) #12
  %.not39 = icmp eq i32 %199, 0
  br i1 %.not39, label %200, label %201

200:                                              ; preds = %196, %189
  br label %201

201:                                              ; preds = %196, %200
  %.str.5.sink110 = phi ptr [ @.str.5, %200 ], [ @.str.2, %196 ]
  store i32 %191, ptr %190, align 4, !tbaa !5
  %202 = load ptr, ptr @stderr, align 8, !tbaa !9
  %203 = load i32, ptr @test_count, align 4, !tbaa !5
  %204 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %205 = load i32, ptr %204, align 4, !tbaa !5
  %206 = call ptr @s2n_strerror(i32 noundef %205, ptr noundef nonnull @.str.4) #12
  %207 = load i32, ptr %204, align 4, !tbaa !5
  %208 = call ptr @s2n_strerror_debug(i32 noundef %207, ptr noundef nonnull @.str.4) #12
  %209 = load i32, ptr %190, align 4, !tbaa !5
  %210 = call ptr @strerror(i32 noundef %209) #12
  %211 = load i32, ptr %190, align 4, !tbaa !5
  %212 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %202, ptr noundef nonnull %.str.5.sink110, i32 noundef %203, ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.1, i32 noundef 64, ptr noundef %206, ptr noundef %208, ptr noundef %210, i32 noundef %211) #14
  call void @exit(i32 noundef 1) #15
  unreachable

213:                                              ; preds = %181
  %.not40 = icmp eq i32 %185, 0
  br i1 %.not40, label %244, label %214

214:                                              ; preds = %213
  %215 = add nsw i32 %182, 2
  store i32 %215, ptr @test_count, align 4, !tbaa !5
  %216 = load ptr, ptr %7, align 8, !tbaa !54
  %217 = load ptr, ptr %4, align 8, !tbaa !54
  %218 = zext i32 %185 to i64
  %bcmp = call i32 @bcmp(ptr %216, ptr %217, i64 %218)
  %219 = icmp eq i32 %bcmp, 0
  br i1 %219, label %244, label %220

220:                                              ; preds = %214
  %221 = tail call ptr @__errno_location() #13
  %222 = load i32, ptr %221, align 4, !tbaa !5
  %223 = load ptr, ptr @stderr, align 8, !tbaa !9
  %224 = call i32 @s2n_print_stacktrace(ptr noundef %223) #12
  %225 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %226 = trunc nuw i8 %225 to i1
  br i1 %226, label %227, label %231

227:                                              ; preds = %220
  %228 = load ptr, ptr @stderr, align 8, !tbaa !9
  %229 = call i32 @fileno(ptr noundef %228) #12
  %230 = call i32 @isatty(i32 noundef %229) #12
  %.not41 = icmp eq i32 %230, 0
  br i1 %.not41, label %231, label %232

231:                                              ; preds = %227, %220
  br label %232

232:                                              ; preds = %227, %231
  %.str.5.sink121 = phi ptr [ @.str.5, %231 ], [ @.str.2, %227 ]
  store i32 %222, ptr %221, align 4, !tbaa !5
  %233 = load ptr, ptr @stderr, align 8, !tbaa !9
  %234 = load i32, ptr @test_count, align 4, !tbaa !5
  %235 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %236 = load i32, ptr %235, align 4, !tbaa !5
  %237 = call ptr @s2n_strerror(i32 noundef %236, ptr noundef nonnull @.str.4) #12
  %238 = load i32, ptr %235, align 4, !tbaa !5
  %239 = call ptr @s2n_strerror_debug(i32 noundef %238, ptr noundef nonnull @.str.4) #12
  %240 = load i32, ptr %221, align 4, !tbaa !5
  %241 = call ptr @strerror(i32 noundef %240) #12
  %242 = load i32, ptr %221, align 4, !tbaa !5
  %243 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %233, ptr noundef nonnull %.str.5.sink121, i32 noundef %234, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.1, i32 noundef 64, ptr noundef %237, ptr noundef %239, ptr noundef %241, i32 noundef %242) #14
  call void @exit(i32 noundef 1) #15
  unreachable

244:                                              ; preds = %213, %214
  %245 = phi i32 [ %183, %213 ], [ %215, %214 ]
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr @test_count, align 4, !tbaa !5
  %247 = call i32 @s2n_connection_free(ptr noundef nonnull %104) #12
  %248 = icmp eq i32 %247, -1
  br i1 %248, label %249, label %273

249:                                              ; preds = %244
  %250 = tail call ptr @__errno_location() #13
  %251 = load i32, ptr %250, align 4, !tbaa !5
  %252 = load ptr, ptr @stderr, align 8, !tbaa !9
  %253 = call i32 @s2n_print_stacktrace(ptr noundef %252) #12
  %254 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %255 = trunc nuw i8 %254 to i1
  br i1 %255, label %256, label %260

256:                                              ; preds = %249
  %257 = load ptr, ptr @stderr, align 8, !tbaa !9
  %258 = call i32 @fileno(ptr noundef %257) #12
  %259 = call i32 @isatty(i32 noundef %258) #12
  %.not47 = icmp eq i32 %259, 0
  br i1 %.not47, label %260, label %261

260:                                              ; preds = %256, %249
  br label %261

261:                                              ; preds = %256, %260
  %.str.5.sink132 = phi ptr [ @.str.5, %260 ], [ @.str.2, %256 ]
  store i32 %251, ptr %250, align 4, !tbaa !5
  %262 = load ptr, ptr @stderr, align 8, !tbaa !9
  %263 = load i32, ptr @test_count, align 4, !tbaa !5
  %264 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %265 = load i32, ptr %264, align 4, !tbaa !5
  %266 = call ptr @s2n_strerror(i32 noundef %265, ptr noundef nonnull @.str.4) #12
  %267 = load i32, ptr %264, align 4, !tbaa !5
  %268 = call ptr @s2n_strerror_debug(i32 noundef %267, ptr noundef nonnull @.str.4) #12
  %269 = load i32, ptr %250, align 4, !tbaa !5
  %270 = call ptr @strerror(i32 noundef %269) #12
  %271 = load i32, ptr %250, align 4, !tbaa !5
  %272 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %262, ptr noundef nonnull %.str.5.sink132, i32 noundef %263, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 66, ptr noundef %266, ptr noundef %268, ptr noundef %270, i32 noundef %271) #14
  call void @exit(i32 noundef 1) #15
  unreachable

273:                                              ; preds = %244, %148
  %.0 = phi i32 [ -1, %148 ], [ 0, %244 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #12
  br label %274

274:                                              ; preds = %273, %140
  %.129 = phi i1 [ %151, %273 ], [ false, %140 ]
  %.1 = phi i32 [ %.0, %273 ], [ -1, %140 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #12
  br label %275

275:                                              ; preds = %130, %274
  %.230 = phi i1 [ %.129, %274 ], [ false, %130 ]
  %.2 = phi i32 [ %.1, %274 ], [ -1, %130 ]
  %276 = call i32 @s2n_tls13_keys_free(ptr noundef nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 592, ptr nonnull %5) #12
  br label %277

277:                                              ; preds = %275, %98
  %.331 = phi i1 [ %.230, %275 ], [ false, %98 ]
  %.3 = phi i32 [ %.2, %275 ], [ -1, %98 ]
  %278 = call i32 @s2n_free(ptr noundef nonnull %4) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #12
  %279 = call i32 @s2n_free(ptr noundef nonnull %3) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #12
  br i1 %.331, label %280, label %355

280:                                              ; preds = %277
  %281 = call i32 @s2n_cleanup() #12
  %282 = icmp eq i32 %281, -1
  br i1 %282, label %283, label %307

283:                                              ; preds = %280
  %284 = tail call ptr @__errno_location() #13
  %285 = load i32, ptr %284, align 4, !tbaa !5
  %286 = load ptr, ptr @stderr, align 8, !tbaa !9
  %287 = call i32 @s2n_print_stacktrace(ptr noundef %286) #12
  %288 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %289 = trunc nuw i8 %288 to i1
  br i1 %289, label %290, label %294

290:                                              ; preds = %283
  %291 = load ptr, ptr @stderr, align 8, !tbaa !9
  %292 = call i32 @fileno(ptr noundef %291) #12
  %293 = call i32 @isatty(i32 noundef %292) #12
  %.not46 = icmp eq i32 %293, 0
  br i1 %.not46, label %294, label %295

294:                                              ; preds = %290, %283
  br label %295

295:                                              ; preds = %290, %294
  %.str.5.sink143 = phi ptr [ @.str.5, %294 ], [ @.str.2, %290 ]
  store i32 %285, ptr %284, align 4, !tbaa !5
  %296 = load ptr, ptr @stderr, align 8, !tbaa !9
  %297 = load i32, ptr @test_count, align 4, !tbaa !5
  %298 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %299 = load i32, ptr %298, align 4, !tbaa !5
  %300 = call ptr @s2n_strerror(i32 noundef %299, ptr noundef nonnull @.str.4) #12
  %301 = load i32, ptr %298, align 4, !tbaa !5
  %302 = call ptr @s2n_strerror_debug(i32 noundef %301, ptr noundef nonnull @.str.4) #12
  %303 = load i32, ptr %284, align 4, !tbaa !5
  %304 = call ptr @strerror(i32 noundef %303) #12
  %305 = load i32, ptr %284, align 4, !tbaa !5
  %306 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %296, ptr noundef nonnull %.str.5.sink143, i32 noundef %297, ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.1, i32 noundef 69, ptr noundef %300, ptr noundef %302, ptr noundef %304, i32 noundef %305) #14
  call void @exit(i32 noundef 1) #15
  unreachable

307:                                              ; preds = %280
  %308 = call i32 @s2n_in_unit_test_set(i1 noundef zeroext false) #12
  %309 = icmp eq i32 %308, -1
  br i1 %309, label %310, label %334

310:                                              ; preds = %307
  %311 = tail call ptr @__errno_location() #13
  %312 = load i32, ptr %311, align 4, !tbaa !5
  %313 = load ptr, ptr @stderr, align 8, !tbaa !9
  %314 = call i32 @s2n_print_stacktrace(ptr noundef %313) #12
  %315 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %316 = trunc nuw i8 %315 to i1
  br i1 %316, label %317, label %321

317:                                              ; preds = %310
  %318 = load ptr, ptr @stderr, align 8, !tbaa !9
  %319 = call i32 @fileno(ptr noundef %318) #12
  %320 = call i32 @isatty(i32 noundef %319) #12
  %.not45 = icmp eq i32 %320, 0
  br i1 %.not45, label %321, label %322

321:                                              ; preds = %317, %310
  br label %322

322:                                              ; preds = %317, %321
  %.str.5.sink154 = phi ptr [ @.str.5, %321 ], [ @.str.2, %317 ]
  store i32 %312, ptr %311, align 4, !tbaa !5
  %323 = load ptr, ptr @stderr, align 8, !tbaa !9
  %324 = load i32, ptr @test_count, align 4, !tbaa !5
  %325 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  %326 = load i32, ptr %325, align 4, !tbaa !5
  %327 = call ptr @s2n_strerror(i32 noundef %326, ptr noundef nonnull @.str.4) #12
  %328 = load i32, ptr %325, align 4, !tbaa !5
  %329 = call ptr @s2n_strerror_debug(i32 noundef %328, ptr noundef nonnull @.str.4) #12
  %330 = load i32, ptr %311, align 4, !tbaa !5
  %331 = call ptr @strerror(i32 noundef %330) #12
  %332 = load i32, ptr %311, align 4, !tbaa !5
  %333 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %323, ptr noundef nonnull %.str.5.sink154, i32 noundef %324, ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.1, i32 noundef 69, ptr noundef %327, ptr noundef %329, ptr noundef %331, i32 noundef %332) #14
  call void @exit(i32 noundef 1) #15
  unreachable

334:                                              ; preds = %307
  %335 = load i8, ptr @s2n_use_color_in_output, align 1, !tbaa !11, !range !13, !noundef !14
  %336 = trunc nuw i8 %335 to i1
  br i1 %336, label %337, label %348

337:                                              ; preds = %334
  %338 = load ptr, ptr @stdout, align 8, !tbaa !9
  %339 = call i32 @fileno(ptr noundef %338) #12
  %340 = call i32 @isatty(i32 noundef %339) #12
  %.not42 = icmp eq i32 %340, 0
  br i1 %.not42, label %348, label %341

341:                                              ; preds = %337
  %342 = load i32, ptr @test_count, align 4, !tbaa !5
  %.not44 = icmp eq i32 %342, 0
  %343 = load ptr, ptr @stdout, align 8, !tbaa !9
  br i1 %.not44, label %346, label %344

344:                                              ; preds = %341
  %345 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %343, ptr noundef nonnull @.str.18, i32 noundef %342) #12
  br label %355

346:                                              ; preds = %341
  %347 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %343, ptr noundef nonnull @.str.19) #12
  br label %355

348:                                              ; preds = %337, %334
  %349 = load i32, ptr @test_count, align 4, !tbaa !5
  %.not43 = icmp eq i32 %349, 0
  %350 = load ptr, ptr @stdout, align 8, !tbaa !9
  br i1 %.not43, label %353, label %351

351:                                              ; preds = %348
  %352 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %350, ptr noundef nonnull @.str.20, i32 noundef %349) #12
  br label %355

353:                                              ; preds = %348
  %354 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %350, ptr noundef nonnull @.str.21) #12
  br label %355

355:                                              ; preds = %.thread, %346, %344, %353, %351, %277
  %.5 = phi i32 [ %.3, %277 ], [ 0, %351 ], [ 0, %353 ], [ 0, %344 ], [ 0, %346 ], [ -1, %.thread ]
  ret i32 %.5
}

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

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #1

declare i32 @s2n_in_unit_test_set(i1 noundef zeroext) local_unnamed_addr #2

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

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #4

declare i32 @s2n_print_stacktrace(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @isatty(i32 noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fileno(ptr nocapture noundef) local_unnamed_addr #1

declare ptr @s2n_strerror(i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #6

declare ptr @s2n_strerror_debug(i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) local_unnamed_addr #5

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #7

declare i32 @s2n_enable_atexit() local_unnamed_addr #2

declare i32 @s2n_init() local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8

declare i32 @s2n_free(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @s2n_result_is_ok(i32) local_unnamed_addr #9

declare i32 @s2n_blob_alloc_from_hex_with_whitespace(ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @s2n_connection_new(i32 noundef) local_unnamed_addr #2

declare i32 @s2n_tls13_keys_free(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_tls13_keys_from_conn(ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @s2n_calculate_stacktrace() local_unnamed_addr #2

declare i32 @s2n_blob_init(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare i32 @s2n_tls13_update_application_traffic_secret(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @s2n_connection_free(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_cleanup() local_unnamed_addr #2

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #11

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 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "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 #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress nofree nosync nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { inlinehint 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 #10 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nofree nounwind willreturn memory(argmem: read) }
attributes #12 = { nounwind }
attributes #13 = { nounwind willreturn memory(none) }
attributes #14 = { cold nounwind }
attributes #15 = { noreturn nounwind }
attributes #16 = { nounwind willreturn memory(read) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !7, i64 220}
!16 = !{!"s2n_connection", !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !7, i64 102, !7, i64 124, !6, i64 148, !6, i64 152, !17, i64 160, !18, i64 168, !18, i64 176, !7, i64 184, !7, i64 216, !7, i64 217, !7, i64 218, !7, i64 219, !7, i64 220, !7, i64 221, !7, i64 222, !10, i64 224, !10, i64 232, !19, i64 240, !10, i64 632, !10, i64 640, !20, i64 648, !26, i64 1144, !29, i64 1688, !10, i64 1752, !7, i64 1760, !6, i64 1764, !7, i64 1768, !32, i64 1776, !32, i64 1816, !32, i64 1856, !32, i64 1896, !6, i64 1936, !18, i64 1944, !7, i64 1952, !32, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !12, i64 2003, !33, i64 2004, !33, i64 2008, !34, i64 2016, !31, i64 2208, !6, i64 2212, !31, i64 2216, !18, i64 2224, !7, i64 2232, !18, i64 2240, !18, i64 2248, !18, i64 2256, !33, i64 2264, !33, i64 2268, !7, i64 2272, !7, i64 2528, !6, i64 2784, !25, i64 2792, !6, i64 2816, !25, i64 2824, !25, i64 2848, !25, i64 2872, !36, i64 2896, !38, i64 3704, !10, i64 3760, !10, i64 3768, !7, i64 3776, !6, i64 3780, !25, i64 3784, !6, i64 3808, !40, i64 3816, !7, i64 3848, !32, i64 3992, !25, i64 4032, !25, i64 4056, !12, i64 4080, !12, i64 4081, !12, i64 4082, !31, i64 4084, !31, i64 4086, !6, i64 4088, !6, i64 4092, !25, i64 4096, !6, i64 4120, !41, i64 4128, !33, i64 4176, !7, i64 4180, !7, i64 4181}
!17 = !{!"s2n_timer", !18, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"s2n_secrets", !7, i64 0, !6, i64 388}
!20 = !{!"s2n_kex_parameters", !21, i64 0, !22, i64 8, !7, i64 24, !22, i64 56, !23, i64 72, !23, i64 184, !7, i64 296, !24, i64 360, !25, i64 448, !25, i64 472}
!21 = !{!"s2n_dh_params", !10, i64 0}
!22 = !{!"s2n_ecc_evp_params", !10, i64 0, !10, i64 8}
!23 = !{!"s2n_kem_group_params", !10, i64 0, !24, i64 8, !22, i64 96}
!24 = !{!"s2n_kem_params", !10, i64 0, !25, i64 8, !25, i64 32, !25, i64 56, !12, i64 80}
!25 = !{!"s2n_blob", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16}
!26 = !{!"s2n_handshake_parameters", !27, i64 0, !27, i64 48, !25, i64 96, !6, i64 120, !28, i64 124, !10, i64 384, !10, i64 392, !10, i64 400, !7, i64 408, !7, i64 440, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 506}
!27 = !{!"s2n_pkey", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!28 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!29 = !{!"s2n_psk_parameters", !6, i64 0, !30, i64 8, !31, i64 40, !31, i64 42, !10, i64 48, !6, i64 56}
!30 = !{!"s2n_array", !25, i64 0, !6, i64 24, !6, i64 28}
!31 = !{!"short", !7, i64 0}
!32 = !{!"s2n_stuffer", !25, i64 0, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 36, !6, i64 36}
!33 = !{!"", !6, i64 0}
!34 = !{!"s2n_handshake", !32, i64 0, !10, i64 40, !7, i64 48, !7, i64 56, !7, i64 104, !7, i64 152, !6, i64 156, !6, i64 160, !6, i64 164, !6, i64 168, !35, i64 176, !6, i64 184, !6, i64 184, !6, i64 184, !6, i64 184, !6, i64 188}
!35 = !{!"s2n_offered_early_data", !10, i64 0}
!36 = !{!"s2n_client_hello", !25, i64 0, !37, i64 24, !25, i64 728, !25, i64 752, !25, i64 776, !7, i64 800, !7, i64 801, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802}
!37 = !{!"", !7, i64 0, !25, i64 672, !31, i64 696}
!38 = !{!"s2n_x509_validator", !10, i64 0, !10, i64 8, !7, i64 16, !7, i64 17, !31, i64 18, !10, i64 24, !6, i64 32, !10, i64 40, !39, i64 48, !12, i64 52}
!39 = !{!"s2n_cert_validation_info", !6, i64 0, !6, i64 0}
!40 = !{!"s2n_ticket_fields", !25, i64 0, !6, i64 24}
!41 = !{!"s2n_post_handshake", !32, i64 0, !7, i64 40}
!42 = !{!16, !10, i64 232}
!43 = !{!44, !10, i64 0}
!44 = !{!"s2n_crypto_parameters", !10, i64 0, !45, i64 8, !45, i64 16, !46, i64 24, !46, i64 456, !7, i64 888, !7, i64 904, !7, i64 920, !7, i64 928}
!45 = !{!"s2n_session_key", !10, i64 0}
!46 = !{!"s2n_hmac_state", !6, i64 0, !31, i64 4, !6, i64 8, !31, i64 12, !7, i64 14, !47, i64 16, !47, i64 72, !47, i64 128, !47, i64 184, !7, i64 240, !7, i64 368}
!47 = !{!"s2n_hash_state", !10, i64 0, !6, i64 8, !7, i64 12, !18, i64 16, !7, i64 24}
!48 = !{!49, !7, i64 8}
!49 = !{!"s2n_tls13_keys", !6, i64 0, !6, i64 4, !7, i64 8, !25, i64 16, !25, i64 40, !7, i64 64, !7, i64 112, !46, i64 160}
!50 = !{!51, !10, i64 0}
!51 = !{!"s2n_debug_info", !10, i64 0, !10, i64 8}
!52 = !{!51, !10, i64 8}
!53 = !{!25, !6, i64 8}
!54 = !{!25, !10, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass