; LLVM IR from richgrov/simulo-engine :: src/test_main.ll (ZN7doctest7Context3runEv)

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

%"class.doctest::DiscardOStream" = type { %"class.std::basic_ostream.base", %class.anon.57, %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%class.anon.57 = type { %"class.std::basic_streambuf", [1024 x i8] }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.doctest::String" = type { %union.anon.7 }
%union.anon.7 = type { %"struct.doctest::String::view", [8 x i8] }
%"struct.doctest::String::view" = type { ptr, i32, i32 }
%"class.std::basic_fstream" = type { %"class.std::basic_iostream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_iostream.base" = type { %"class.std::basic_istream.base", %"class.std::basic_ostream.base" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon.44 }
%union.anon.44 = type { i32 }
%class.anon.58 = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.68" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.doctest::QueryData" = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.std::vector.69" = type { %"struct.std::_Vector_base.70" }
%"struct.std::_Vector_base.70" = type { %"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl" }
%"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.74" = type { ptr }
%"class.std::set.75" = type { %"class.std::_Rb_tree.76" }
%"class.std::_Rb_tree.76" = type { %"struct.std::_Rb_tree<doctest::String, doctest::String, std::_Identity<doctest::String>, std::less<doctest::String>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<doctest::String, doctest::String, std::_Identity<doctest::String>, std::less<doctest::String>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector.81" = type { %"struct.std::_Vector_base.82" }
%"struct.std::_Vector_base.82" = type { %"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl" }
%"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.86" = type <{ %"struct.std::_Rb_tree_const_iterator.88", i8, [7 x i8] }>
%"struct.std::_Rb_tree_const_iterator.88" = type { ptr }
%"struct.doctest::(anonymous namespace)::FatalConditionHandler" = type { i8 }
%"struct.doctest::TestCaseException" = type <{ %"class.doctest::String", i8, [7 x i8] }>
%"class.doctest::Context" = type { ptr }
%"struct.doctest::ContextOptions" = type <{ ptr, %"class.doctest::String", ptr, %"class.doctest::String", %"class.doctest::String", i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"struct.doctest::detail::ContextState" = type <{ %"struct.doctest::ContextOptions.base", i8, %"struct.doctest::TestRunStats", %"struct.doctest::CurrentTestCaseStats", %"class.doctest::detail::MultiLaneAtomic", %"class.doctest::detail::MultiLaneAtomic", %"class.std::vector.9", %"class.std::vector.14", ptr, %"struct.doctest::detail::Timer", %"class.std::vector.19", i8, [7 x i8], %"class.std::vector.24", %"class.std::vector.24", %"class.std::unordered_set", i64, %"struct.std::atomic.34", [7 x i8] }>
%"struct.doctest::ContextOptions.base" = type <{ ptr, %"class.doctest::String", ptr, %"class.doctest::String", %"class.doctest::String", i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"struct.doctest::TestRunStats" = type { i32, i32, i32, i32, i32, i32 }
%"struct.doctest::CurrentTestCaseStats" = type { i32, i32, double, i32, i8 }
%"class.doctest::detail::MultiLaneAtomic" = type { [32 x %"struct.doctest::detail::MultiLaneAtomic<int>::CacheLineAlignedAtomic"] }
%"struct.doctest::detail::MultiLaneAtomic<int>::CacheLineAlignedAtomic" = type { %"struct.std::atomic", [60 x i8] }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<std::vector<doctest::String>, std::allocator<std::vector<doctest::String>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<doctest::String>, std::allocator<std::vector<doctest::String>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<doctest::String>, std::allocator<std::vector<doctest::String>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<doctest::String>, std::allocator<std::vector<doctest::String>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = type { %"struct.std::_Vector_base<doctest::IReporter *, std::allocator<doctest::IReporter *>>::_Vector_impl" }
%"struct.std::_Vector_base<doctest::IReporter *, std::allocator<doctest::IReporter *>>::_Vector_impl" = type { %"struct.std::_Vector_base<doctest::IReporter *, std::allocator<doctest::IReporter *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<doctest::IReporter *, std::allocator<doctest::IReporter *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.doctest::detail::Timer" = type { i64 }
%"class.std::vector.19" = type { %"struct.std::_Vector_base.20" }
%"struct.std::_Vector_base.20" = type { %"struct.std::_Vector_base<doctest::String, std::allocator<doctest::String>>::_Vector_impl" }
%"struct.std::_Vector_base<doctest::String, std::allocator<doctest::String>>::_Vector_impl" = type { %"struct.std::_Vector_base<doctest::String, std::allocator<doctest::String>>::_Vector_impl_data" }
%"struct.std::_Vector_base<doctest::String, std::allocator<doctest::String>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<doctest::SubcaseSignature, std::allocator<doctest::SubcaseSignature>>::_Vector_impl" }
%"struct.std::_Vector_base<doctest::SubcaseSignature, std::allocator<doctest::SubcaseSignature>>::_Vector_impl" = type { %"struct.std::_Vector_base<doctest::SubcaseSignature, std::allocator<doctest::SubcaseSignature>>::_Vector_impl_data" }
%"struct.std::_Vector_base<doctest::SubcaseSignature, std::allocator<doctest::SubcaseSignature>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.std::atomic.34" = type { %"struct.std::__atomic_base.35" }
%"struct.std::__atomic_base.35" = type { i8 }
%"struct.std::pair.64" = type { %"struct.std::pair.66", ptr }
%"struct.std::pair.66" = type { i32, %"class.doctest::String" }
%"struct.doctest::TestCaseData" = type { %"class.doctest::String", i32, ptr, ptr, ptr, i8, i8, i8, i8, i8, i32, double }
%"struct.doctest::detail::TestCase" = type { %"struct.doctest::TestCaseData", ptr, %"class.doctest::String", i32, %"class.doctest::String" }

@_ZN7doctest18is_running_in_testE = external dso_local global i8, align 1
@_ZN7doctest6detail4g_csE = external dso_local global ptr, align 8
@_ZN7doctest6detail11g_no_colorsE = external dso_local thread_local global i8, align 1
@_ZTIN7doctest6detail20TestFailureExceptionE = external dso_local constant { ptr, ptr }, align 8
@.str.71 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZN7doctestL10discardOutE = external hidden global %"class.doctest::DiscardOStream", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.205 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.206 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.207 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.208 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, i1 noundef zeroext) #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7doctest6detail15MultiLaneAtomicIiEcviEv(ptr noundef nonnull align 4 dereferenceable(2048)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt6atomicIbEaSEb(ptr noundef nonnull align 1 dereferenceable(1), i1 noundef zeroext) #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef, ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext, i1 noundef zeroext) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) #5

declare ptr @__cxa_begin_catch(ptr)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest17TestCaseExceptionD2Ev(ptr noundef nonnull align 8 dereferenceable(25)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest6detail18getRegisteredTestsEv() #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN7doctest6StringESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_124translateActiveExceptionEv(ptr dead_on_unwind noalias writable sret(%"class.doctest::String") align 8) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7doctest6StringESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7doctest7Context3runEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::basic_fstream", align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %class.anon.58, align 8
  %9 = alloca %"class.doctest::String", align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %12 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %17 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.68", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"struct.doctest::QueryData", align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.std::vector.69", align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %32 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %38 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %41 = alloca ptr, align 8
  %42 = alloca i64, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca %"class.std::set.75", align 8
  %46 = alloca i8, align 1
  %47 = alloca %"class.std::vector.81", align 8
  %48 = alloca ptr, align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %50 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %54 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca i8, align 1
  %58 = alloca ptr, align 8
  %59 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %60 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca %"class.doctest::String", align 8
  %64 = alloca ptr, align 8
  %65 = alloca %"class.doctest::String", align 8
  %66 = alloca %"struct.std::pair.86", align 8
  %67 = alloca ptr, align 8
  %68 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %69 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %70 = alloca ptr, align 8
  %71 = alloca i8, align 1
  %72 = alloca %"struct.doctest::(anonymous namespace)::FatalConditionHandler", align 1
  %73 = alloca ptr, align 8
  %74 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %75 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %76 = alloca ptr, align 8
  %77 = alloca %"struct.doctest::TestCaseException", align 8
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %81 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %82 = alloca ptr, align 8
  %83 = alloca ptr, align 8
  %84 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %85 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %86 = alloca ptr, align 8
  %87 = alloca ptr, align 8
  %88 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %89 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %90 = alloca ptr, align 8
  %91 = alloca %"struct.doctest::QueryData", align 8
  %92 = alloca ptr, align 8
  %93 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %94 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %95 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  %96 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #10
  %97 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  store ptr %97, ptr %4, align 8, !tbaa !5
  %98 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %99 = load ptr, ptr %98, align 8, !tbaa !9
  store ptr %99, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  store i8 1, ptr @_ZN7doctest18is_running_in_testE, align 1, !tbaa !11
  %100 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %101 = load ptr, ptr %100, align 8, !tbaa !9
  %102 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %101, i32 0, i32 21
  %103 = load i8, ptr %102, align 1, !tbaa !13, !range !17, !noundef !18
  %104 = trunc i8 %103 to i1
  %105 = call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @_ZN7doctest6detail11g_no_colorsE)
  %106 = zext i1 %104 to i8
  store i8 %106, ptr %105, align 1, !tbaa !11
  %107 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %108 = load ptr, ptr %107, align 8, !tbaa !9
  call void @_ZN7doctest6detail12ContextState12resetRunDataEv(ptr noundef nonnull align 8 dereferenceable(4489) %108)
  call void @llvm.lifetime.start.p0(i64 528, ptr %5) #10
  call void @_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(264) %5)
  %109 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %110 = load ptr, ptr %109, align 8, !tbaa !9
  %111 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %110, i32 0, i32 0
  %112 = load ptr, ptr %111, align 8, !tbaa !19
  %113 = icmp eq ptr %112, null
  br i1 %113, label %114, label %155

114:                                              ; preds = %1
  %115 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %116 = load ptr, ptr %115, align 8, !tbaa !9
  %117 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %116, i32 0, i32 15
  %118 = load i8, ptr %117, align 1, !tbaa !20, !range !17, !noundef !18
  %119 = trunc i8 %118 to i1
  br i1 %119, label %120, label %124

120:                                              ; preds = %114
  %121 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %122 = load ptr, ptr %121, align 8, !tbaa !9
  %123 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %122, i32 0, i32 0
  store ptr @_ZN7doctestL10discardOutE, ptr %123, align 8, !tbaa !19
  br label %154

124:                                              ; preds = %114
  %125 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %126 = load ptr, ptr %125, align 8, !tbaa !9
  %127 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %126, i32 0, i32 3
  %128 = call noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %127)
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %149

130:                                              ; preds = %124
  %131 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %132 = load ptr, ptr %131, align 8, !tbaa !9
  %133 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %132, i32 0, i32 3
  %134 = invoke noundef ptr @_ZN7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %133)
          to label %135 unwind label %145

135:                                              ; preds = %130
  invoke void @_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(264) %5, ptr noundef %134, i32 noundef 16)
          to label %136 unwind label %145

136:                                              ; preds = %135
  %137 = icmp eq ptr %5, null
  br i1 %137, label %140, label %138

138:                                              ; preds = %136
  %139 = getelementptr inbounds i8, ptr %5, i64 16
  br label %140

140:                                              ; preds = %138, %136
  %141 = phi ptr [ %139, %138 ], [ null, %136 ]
  %142 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %143 = load ptr, ptr %142, align 8, !tbaa !9
  %144 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %143, i32 0, i32 0
  store ptr %141, ptr %144, align 8, !tbaa !19
  br label %153

145:                                              ; preds = %155, %135, %130
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %6, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %7, align 4
  br label %1204

149:                                              ; preds = %124
  %150 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %151 = load ptr, ptr %150, align 8, !tbaa !9
  %152 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %151, i32 0, i32 0
  store ptr @_ZSt4cout, ptr %152, align 8, !tbaa !19
  br label %153

153:                                              ; preds = %149, %140
  br label %154

154:                                              ; preds = %153, %120
  br label %155

155:                                              ; preds = %154, %1
  invoke void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler19allocateAltStackMemEv()
          to label %156 unwind label %145

156:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #10
  %157 = getelementptr inbounds %class.anon.58, ptr %8, i32 0, i32 0
  store ptr %5, ptr %157, align 8, !tbaa !5
  %158 = getelementptr inbounds %class.anon.58, ptr %8, i32 0, i32 1
  store ptr %4, ptr %158, align 8, !tbaa !5
  %159 = getelementptr inbounds %class.anon.58, ptr %8, i32 0, i32 2
  store ptr %96, ptr %159, align 8, !tbaa !21
  %160 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %161 = load ptr, ptr %160, align 8, !tbaa !9
  %162 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %161, i32 0, i32 6
  %163 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %162, i64 noundef 8) #10
  %164 = call noundef zeroext i1 @_ZNKSt6vectorIN7doctest6StringESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #10
  br i1 %164, label %165, label %181

165:                                              ; preds = %156
  %166 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %167 = load ptr, ptr %166, align 8, !tbaa !9
  %168 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %167, i32 0, i32 6
  %169 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %168, i64 noundef 8) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #10
  invoke void @_ZN7doctest6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef @.str.71)
          to label %170 unwind label %172

170:                                              ; preds = %165
  invoke void @_ZNSt6vectorIN7doctest6StringESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %169, ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %171 unwind label %176

171:                                              ; preds = %170
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #10
  br label %181

172:                                              ; preds = %165
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %6, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %7, align 4
  br label %180

176:                                              ; preds = %170
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %6, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %7, align 4
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  br label %180

180:                                              ; preds = %176, %172
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #10
  br label %1203

181:                                              ; preds = %171, %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #10
  %182 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getReportersEv()
          to label %183 unwind label %193

183:                                              ; preds = %181
  store ptr %182, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #10
  %184 = load ptr, ptr %10, align 8, !tbaa !5
  %185 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %184) #10
  %186 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %11, i32 0, i32 0
  store ptr %185, ptr %186, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %187 = load ptr, ptr %10, align 8, !tbaa !5
  %188 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %187) #10
  %189 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %12, i32 0, i32 0
  store ptr %188, ptr %189, align 8
  br label %190

190:                                              ; preds = %235, %183
  %191 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  br i1 %191, label %197, label %192

192:                                              ; preds = %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #10
  br label %239

193:                                              ; preds = %181
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %6, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %7, align 4
  br label %238

197:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %198 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  store ptr %198, ptr %13, align 8, !tbaa !5
  %199 = load ptr, ptr %13, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.std::pair.64", ptr %199, i32 0, i32 0
  %201 = getelementptr inbounds %"struct.std::pair.66", ptr %200, i32 0, i32 1
  %202 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %201)
          to label %203 unwind label %226

203:                                              ; preds = %197
  %204 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %205 = load ptr, ptr %204, align 8, !tbaa !9
  %206 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %205, i32 0, i32 6
  %207 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %206, i64 noundef 8) #10
  %208 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !9
  %210 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %209, i32 0, i32 11
  %211 = load i8, ptr %210, align 1, !tbaa !23, !range !17, !noundef !18
  %212 = trunc i8 %211 to i1
  %213 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %202, ptr noundef nonnull align 8 dereferenceable(24) %207, i1 noundef zeroext false, i1 noundef zeroext %212)
          to label %214 unwind label %226

214:                                              ; preds = %203
  br i1 %213, label %215, label %234

215:                                              ; preds = %214
  %216 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %217 = load ptr, ptr %216, align 8, !tbaa !9
  %218 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %217, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  %219 = load ptr, ptr %13, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.std::pair.64", ptr %219, i32 0, i32 1
  %221 = load ptr, ptr %220, align 8, !tbaa !24
  %222 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %223 = invoke noundef ptr %221(ptr noundef nonnull align 8 dereferenceable(135) %222)
          to label %224 unwind label %230

224:                                              ; preds = %215
  store ptr %223, ptr %14, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %218, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %225 unwind label %230

225:                                              ; preds = %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  br label %234

226:                                              ; preds = %203, %197
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %6, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %7, align 4
  br label %237

230:                                              ; preds = %224, %215
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %6, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  br label %237

234:                                              ; preds = %225, %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  br label %235

235:                                              ; preds = %234
  %236 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  br label %190

237:                                              ; preds = %230, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  br label %238

238:                                              ; preds = %237, %193
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #10
  br label %1203

239:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %240 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getListenersEv()
          to label %241 unwind label %251

241:                                              ; preds = %239
  store ptr %240, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  %242 = load ptr, ptr %15, align 8, !tbaa !5
  %243 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %242) #10
  %244 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %16, i32 0, i32 0
  store ptr %243, ptr %244, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %245 = load ptr, ptr %15, align 8, !tbaa !5
  %246 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %245) #10
  %247 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %17, i32 0, i32 0
  store ptr %246, ptr %247, align 8
  br label %248

248:                                              ; preds = %276, %241
  %249 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br i1 %249, label %255, label %250

250:                                              ; preds = %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %283

251:                                              ; preds = %239
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %6, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %7, align 4
  br label %282

255:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %256 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  store ptr %256, ptr %18, align 8, !tbaa !5
  %257 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %258 = load ptr, ptr %257, align 8, !tbaa !9
  %259 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %258, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %260 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %261 = load ptr, ptr %260, align 8, !tbaa !9
  %262 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %261, i32 0, i32 7
  %263 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %262) #10
  %264 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %263, ptr %264, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %265 = load ptr, ptr %18, align 8, !tbaa !5
  %266 = getelementptr inbounds %"struct.std::pair.64", ptr %265, i32 0, i32 1
  %267 = load ptr, ptr %266, align 8, !tbaa !24
  %268 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %269 = invoke noundef ptr %267(ptr noundef nonnull align 8 dereferenceable(135) %268)
          to label %270 unwind label %278

270:                                              ; preds = %255
  store ptr %269, ptr %21, align 8, !tbaa !5
  %271 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.68", ptr %19, i32 0, i32 0
  %272 = load ptr, ptr %271, align 8
  %273 = invoke ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %259, ptr %272, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %274 unwind label %278

274:                                              ; preds = %270
  %275 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %22, i32 0, i32 0
  store ptr %273, ptr %275, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  br label %276

276:                                              ; preds = %274
  %277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  br label %248

278:                                              ; preds = %270, %255
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %6, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  br label %282

282:                                              ; preds = %278, %251
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %1203

283:                                              ; preds = %250
  %284 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %285 = load ptr, ptr %284, align 8, !tbaa !9
  %286 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %285, i32 0, i32 18
  %287 = load i8, ptr %286, align 4, !tbaa !27, !range !17, !noundef !18
  %288 = trunc i8 %287 to i1
  br i1 %288, label %307, label %289

289:                                              ; preds = %283
  %290 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %291 = load ptr, ptr %290, align 8, !tbaa !9
  %292 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %291, i32 0, i32 32
  %293 = load i8, ptr %292, align 2, !tbaa !28, !range !17, !noundef !18
  %294 = trunc i8 %293 to i1
  br i1 %294, label %307, label %295

295:                                              ; preds = %289
  %296 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %297 = load ptr, ptr %296, align 8, !tbaa !9
  %298 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %297, i32 0, i32 31
  %299 = load i8, ptr %298, align 1, !tbaa !29, !range !17, !noundef !18
  %300 = trunc i8 %299 to i1
  br i1 %300, label %307, label %301

301:                                              ; preds = %295
  %302 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %303 = load ptr, ptr %302, align 8, !tbaa !9
  %304 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %303, i32 0, i32 36
  %305 = load i8, ptr %304, align 2, !tbaa !30, !range !17, !noundef !18
  %306 = trunc i8 %305 to i1
  br i1 %306, label %307, label %340

307:                                              ; preds = %301, %295, %289, %283
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %308 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %308, i32 0, i32 7
  store ptr %309, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %310 = load ptr, ptr %23, align 8, !tbaa !5
  %311 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #10
  %312 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %24, i32 0, i32 0
  store ptr %311, ptr %312, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %313 = load ptr, ptr %23, align 8, !tbaa !5
  %314 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %313) #10
  %315 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %25, i32 0, i32 0
  store ptr %314, ptr %315, align 8
  br label %316

316:                                              ; preds = %327, %307
  %317 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #10
  br i1 %317, label %319, label %318

318:                                              ; preds = %316
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %333

319:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  store ptr %320, ptr %26, align 8, !tbaa !5
  %321 = load ptr, ptr %26, align 8, !tbaa !5
  %322 = load ptr, ptr %321, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #10
  call void @llvm.memset.p0.i64(ptr align 8 %27, i8 0, i64 24, i1 false)
  call void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20) %27) #10
  %323 = load ptr, ptr %322, align 8, !tbaa !31
  %324 = getelementptr inbounds ptr, ptr %323, i64 0
  %325 = load ptr, ptr %324, align 8
  invoke void %325(ptr noundef nonnull align 8 dereferenceable(8) %322, ptr noundef nonnull align 8 dereferenceable(20) %27)
          to label %326 unwind label %329

326:                                              ; preds = %319
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %327

327:                                              ; preds = %326
  %328 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  br label %316

329:                                              ; preds = %319
  %330 = landingpad { ptr, i32 }
          cleanup
  %331 = extractvalue { ptr, i32 } %330, 0
  store ptr %331, ptr %6, align 8
  %332 = extractvalue { ptr, i32 } %330, 1
  store i32 %332, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %1203

333:                                              ; preds = %318
  %334 = invoke noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %335 unwind label %336

335:                                              ; preds = %333
  store i32 %334, ptr %2, align 4
  store i32 1, ptr %28, align 4
  br label %1201

336:                                              ; preds = %333
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %6, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %7, align 4
  br label %1203

340:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #10
  call void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %341 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest6detail18getRegisteredTestsEv()
  store ptr %341, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %342 = load ptr, ptr %30, align 8, !tbaa !5
  %343 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %342) #10
  %344 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %31, i32 0, i32 0
  store ptr %343, ptr %344, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  %345 = load ptr, ptr %30, align 8, !tbaa !5
  %346 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %345) #10
  %347 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %32, i32 0, i32 0
  store ptr %346, ptr %347, align 8
  br label %348

348:                                              ; preds = %355, %340
  %349 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEES5_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %32) #10
  br i1 %349, label %351, label %350

350:                                              ; preds = %348
  store i32 8, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  br label %361

351:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %352 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #10
  store ptr %352, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %353 = load ptr, ptr %33, align 8, !tbaa !5
  store ptr %353, ptr %34, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %354 unwind label %357

354:                                              ; preds = %351
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %355

355:                                              ; preds = %354
  %356 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #10
  br label %348

357:                                              ; preds = %351
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %6, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  br label %1200

361:                                              ; preds = %350
  %362 = call noundef i64 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %363 = trunc i64 %362 to i32
  %364 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %365 = load ptr, ptr %364, align 8, !tbaa !9
  %366 = getelementptr inbounds i8, ptr %365, i64 136
  %367 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %366, i32 0, i32 0
  store i32 %363, ptr %367, align 8, !tbaa !33
  %368 = call noundef zeroext i1 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  br i1 %368, label %484, label %369

369:                                              ; preds = %361
  %370 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %371 = load ptr, ptr %370, align 8, !tbaa !9
  %372 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %371, i32 0, i32 4
  %373 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %372, ptr noundef @.str.93, i1 noundef zeroext true)
          to label %374 unwind label %386

374:                                              ; preds = %369
  %375 = icmp eq i32 %373, 0
  br i1 %375, label %376, label %390

376:                                              ; preds = %374
  %377 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %378 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %35, i32 0, i32 0
  store ptr %377, ptr %378, align 8
  %379 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %380 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %36, i32 0, i32 0
  store ptr %379, ptr %380, align 8
  %381 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %35, i32 0, i32 0
  %382 = load ptr, ptr %381, align 8
  %383 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %36, i32 0, i32 0
  %384 = load ptr, ptr %383, align 8
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS6_SaIS6_EEEEPFbS6_S6_EEvT_SE_T0_(ptr %382, ptr %384, ptr noundef @_ZN7doctest12_GLOBAL__N_119fileOrderComparatorEPKNS_6detail8TestCaseES4_)
          to label %385 unwind label %386

385:                                              ; preds = %376
  br label %483

386:                                              ; preds = %471, %424, %414, %407, %397, %390, %376, %369
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %6, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %7, align 4
  br label %1200

390:                                              ; preds = %374
  %391 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %392 = load ptr, ptr %391, align 8, !tbaa !9
  %393 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %392, i32 0, i32 4
  %394 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %393, ptr noundef @.str.205, i1 noundef zeroext true)
          to label %395 unwind label %386

395:                                              ; preds = %390
  %396 = icmp eq i32 %394, 0
  br i1 %396, label %397, label %407

397:                                              ; preds = %395
  %398 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %399 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %37, i32 0, i32 0
  store ptr %398, ptr %399, align 8
  %400 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %401 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %38, i32 0, i32 0
  store ptr %400, ptr %401, align 8
  %402 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %37, i32 0, i32 0
  %403 = load ptr, ptr %402, align 8
  %404 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %38, i32 0, i32 0
  %405 = load ptr, ptr %404, align 8
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS6_SaIS6_EEEEPFbS6_S6_EEvT_SE_T0_(ptr %403, ptr %405, ptr noundef @_ZN7doctest12_GLOBAL__N_120suiteOrderComparatorEPKNS_6detail8TestCaseES4_)
          to label %406 unwind label %386

406:                                              ; preds = %397
  br label %482

407:                                              ; preds = %395
  %408 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %409 = load ptr, ptr %408, align 8, !tbaa !9
  %410 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %409, i32 0, i32 4
  %411 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %410, ptr noundef @.str.206, i1 noundef zeroext true)
          to label %412 unwind label %386

412:                                              ; preds = %407
  %413 = icmp eq i32 %411, 0
  br i1 %413, label %414, label %424

414:                                              ; preds = %412
  %415 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %416 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %39, i32 0, i32 0
  store ptr %415, ptr %416, align 8
  %417 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %418 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %40, i32 0, i32 0
  store ptr %417, ptr %418, align 8
  %419 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %39, i32 0, i32 0
  %420 = load ptr, ptr %419, align 8
  %421 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %40, i32 0, i32 0
  %422 = load ptr, ptr %421, align 8
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS6_SaIS6_EEEEPFbS6_S6_EEvT_SE_T0_(ptr %420, ptr %422, ptr noundef @_ZN7doctest12_GLOBAL__N_119nameOrderComparatorEPKNS_6detail8TestCaseES4_)
          to label %423 unwind label %386

423:                                              ; preds = %414
  br label %481

424:                                              ; preds = %412
  %425 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %426 = load ptr, ptr %425, align 8, !tbaa !9
  %427 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %426, i32 0, i32 4
  %428 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %427, ptr noundef @.str.207, i1 noundef zeroext true)
          to label %429 unwind label %386

429:                                              ; preds = %424
  %430 = icmp eq i32 %428, 0
  br i1 %430, label %431, label %471

431:                                              ; preds = %429
  %432 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %433 = load ptr, ptr %432, align 8, !tbaa !9
  %434 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %433, i32 0, i32 5
  %435 = load i32, ptr %434, align 8, !tbaa !35
  call void @srand(i32 noundef %435) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %436 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef 0) #10
  store ptr %436, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %437 = call noundef i64 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %438 = sub i64 %437, 1
  store i64 %438, ptr %42, align 8, !tbaa !36
  br label %439

439:                                              ; preds = %467, %431
  %440 = load i64, ptr %42, align 8, !tbaa !36
  %441 = icmp ugt i64 %440, 0
  br i1 %441, label %443, label %442

442:                                              ; preds = %439
  store i32 10, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %470

443:                                              ; preds = %439
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  %444 = call i32 @rand() #10
  %445 = sext i32 %444 to i64
  %446 = load i64, ptr %42, align 8, !tbaa !36
  %447 = add i64 %446, 1
  %448 = urem i64 %445, %447
  %449 = trunc i64 %448 to i32
  store i32 %449, ptr %43, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %450 = load ptr, ptr %41, align 8, !tbaa !5
  %451 = load i64, ptr %42, align 8, !tbaa !36
  %452 = getelementptr inbounds ptr, ptr %450, i64 %451
  %453 = load ptr, ptr %452, align 8, !tbaa !5
  store ptr %453, ptr %44, align 8, !tbaa !5
  %454 = load ptr, ptr %41, align 8, !tbaa !5
  %455 = load i32, ptr %43, align 4, !tbaa !38
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds ptr, ptr %454, i64 %456
  %458 = load ptr, ptr %457, align 8, !tbaa !5
  %459 = load ptr, ptr %41, align 8, !tbaa !5
  %460 = load i64, ptr %42, align 8, !tbaa !36
  %461 = getelementptr inbounds ptr, ptr %459, i64 %460
  store ptr %458, ptr %461, align 8, !tbaa !5
  %462 = load ptr, ptr %44, align 8, !tbaa !5
  %463 = load ptr, ptr %41, align 8, !tbaa !5
  %464 = load i32, ptr %43, align 4, !tbaa !38
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds ptr, ptr %463, i64 %465
  store ptr %462, ptr %466, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %467

467:                                              ; preds = %443
  %468 = load i64, ptr %42, align 8, !tbaa !36
  %469 = add i64 %468, -1
  store i64 %469, ptr %42, align 8, !tbaa !36
  br label %439, !llvm.loop !39

470:                                              ; preds = %442
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %480

471:                                              ; preds = %429
  %472 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %473 = load ptr, ptr %472, align 8, !tbaa !9
  %474 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %473, i32 0, i32 4
  %475 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %474, ptr noundef @.str.208, i1 noundef zeroext true)
          to label %476 unwind label %386

476:                                              ; preds = %471
  %477 = icmp eq i32 %475, 0
  br i1 %477, label %478, label %479

478:                                              ; preds = %476
  br label %479

479:                                              ; preds = %478, %476
  br label %480

480:                                              ; preds = %479, %470
  br label %481

481:                                              ; preds = %480, %423
  br label %482

482:                                              ; preds = %481, %406
  br label %483

483:                                              ; preds = %482, %385
  br label %484

484:                                              ; preds = %483, %361
  call void @llvm.lifetime.start.p0(i64 48, ptr %45) #10
  call void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %45) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #10
  %485 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %486 = load ptr, ptr %485, align 8, !tbaa !9
  %487 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %486, i32 0, i32 33
  %488 = load i8, ptr %487, align 1, !tbaa !41, !range !17, !noundef !18
  %489 = trunc i8 %488 to i1
  br i1 %489, label %502, label %490

490:                                              ; preds = %484
  %491 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %492 = load ptr, ptr %491, align 8, !tbaa !9
  %493 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %492, i32 0, i32 34
  %494 = load i8, ptr %493, align 4, !tbaa !42, !range !17, !noundef !18
  %495 = trunc i8 %494 to i1
  br i1 %495, label %502, label %496

496:                                              ; preds = %490
  %497 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %498 = load ptr, ptr %497, align 8, !tbaa !9
  %499 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %498, i32 0, i32 35
  %500 = load i8, ptr %499, align 1, !tbaa !43, !range !17, !noundef !18
  %501 = trunc i8 %500 to i1
  br label %502

502:                                              ; preds = %496, %490, %484
  %503 = phi i1 [ true, %490 ], [ true, %484 ], [ %501, %496 ]
  %504 = zext i1 %503 to i8
  store i8 %504, ptr %46, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #10
  call void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #10
  %505 = load i8, ptr %46, align 1, !tbaa !11, !range !17, !noundef !18
  %506 = trunc i8 %505 to i1
  br i1 %506, label %534, label %507

507:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  %508 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %509 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %508, i32 0, i32 7
  store ptr %509, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #10
  %510 = load ptr, ptr %48, align 8, !tbaa !5
  %511 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %510) #10
  %512 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %49, i32 0, i32 0
  store ptr %511, ptr %512, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #10
  %513 = load ptr, ptr %48, align 8, !tbaa !5
  %514 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %513) #10
  %515 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %50, i32 0, i32 0
  store ptr %514, ptr %515, align 8
  br label %516

516:                                              ; preds = %527, %507
  %517 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %49, ptr noundef nonnull align 8 dereferenceable(8) %50) #10
  br i1 %517, label %519, label %518

518:                                              ; preds = %516
  store i32 13, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  br label %533

519:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #10
  %520 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %49) #10
  store ptr %520, ptr %51, align 8, !tbaa !5
  %521 = load ptr, ptr %51, align 8, !tbaa !5
  %522 = load ptr, ptr %521, align 8, !tbaa !5
  %523 = load ptr, ptr %522, align 8, !tbaa !31
  %524 = getelementptr inbounds ptr, ptr %523, i64 1
  %525 = load ptr, ptr %524, align 8
  invoke void %525(ptr noundef nonnull align 8 dereferenceable(8) %522)
          to label %526 unwind label %529

526:                                              ; preds = %519
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  br label %527

527:                                              ; preds = %526
  %528 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %49) #10
  br label %516

529:                                              ; preds = %519
  %530 = landingpad { ptr, i32 }
          cleanup
  %531 = extractvalue { ptr, i32 } %530, 0
  store ptr %531, ptr %6, align 8
  %532 = extractvalue { ptr, i32 } %530, 1
  store i32 %532, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  br label %1199

533:                                              ; preds = %518
  br label %534

534:                                              ; preds = %533, %502
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #10
  store ptr %29, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #10
  %535 = load ptr, ptr %52, align 8, !tbaa !5
  %536 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %535) #10
  %537 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %53, i32 0, i32 0
  store ptr %536, ptr %537, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #10
  %538 = load ptr, ptr %52, align 8, !tbaa !5
  %539 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %538) #10
  %540 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.74", ptr %54, i32 0, i32 0
  store ptr %539, ptr %540, align 8
  br label %541

541:                                              ; preds = %1116, %534
  %542 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %54) #10
  br i1 %542, label %544, label %543

543:                                              ; preds = %541
  store i32 15, ptr %28, align 4
  br label %1120

544:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  %545 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  store ptr %545, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #10
  %546 = load ptr, ptr %55, align 8, !tbaa !5
  %547 = load ptr, ptr %546, align 8, !tbaa !5
  store ptr %547, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #10
  store i8 0, ptr %57, align 1, !tbaa !11
  %548 = load ptr, ptr %56, align 8, !tbaa !5
  %549 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %548, i32 0, i32 5
  %550 = load i8, ptr %549, align 8, !tbaa !44, !range !17, !noundef !18
  %551 = trunc i8 %550 to i1
  br i1 %551, label %552, label %559

552:                                              ; preds = %544
  %553 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %554 = load ptr, ptr %553, align 8, !tbaa !9
  %555 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %554, i32 0, i32 24
  %556 = load i8, ptr %555, align 2, !tbaa !47, !range !17, !noundef !18
  %557 = trunc i8 %556 to i1
  br i1 %557, label %559, label %558

558:                                              ; preds = %552
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %559

559:                                              ; preds = %558, %552, %544
  %560 = load ptr, ptr %56, align 8, !tbaa !5
  %561 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %560, i32 0, i32 0
  %562 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %561)
          to label %563 unwind label %576

563:                                              ; preds = %559
  %564 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %565 = load ptr, ptr %564, align 8, !tbaa !9
  %566 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %565, i32 0, i32 6
  %567 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %566, i64 noundef 0) #10
  %568 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %569 = load ptr, ptr %568, align 8, !tbaa !9
  %570 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %569, i32 0, i32 11
  %571 = load i8, ptr %570, align 1, !tbaa !23, !range !17, !noundef !18
  %572 = trunc i8 %571 to i1
  %573 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %562, ptr noundef nonnull align 8 dereferenceable(24) %567, i1 noundef zeroext true, i1 noundef zeroext %572)
          to label %574 unwind label %576

574:                                              ; preds = %563
  br i1 %573, label %580, label %575

575:                                              ; preds = %574
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %580

576:                                              ; preds = %875, %645, %629, %613, %597, %584, %580, %563, %559
  %577 = landingpad { ptr, i32 }
          cleanup
  %578 = extractvalue { ptr, i32 } %577, 0
  store ptr %578, ptr %6, align 8
  %579 = extractvalue { ptr, i32 } %577, 1
  store i32 %579, ptr %7, align 4
  br label %1119

580:                                              ; preds = %575, %574
  %581 = load ptr, ptr %56, align 8, !tbaa !5
  %582 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %581, i32 0, i32 0
  %583 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %582)
          to label %584 unwind label %576

584:                                              ; preds = %580
  %585 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %586 = load ptr, ptr %585, align 8, !tbaa !9
  %587 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %586, i32 0, i32 6
  %588 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %587, i64 noundef 1) #10
  %589 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %590 = load ptr, ptr %589, align 8, !tbaa !9
  %591 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %590, i32 0, i32 11
  %592 = load i8, ptr %591, align 1, !tbaa !23, !range !17, !noundef !18
  %593 = trunc i8 %592 to i1
  %594 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %583, ptr noundef nonnull align 8 dereferenceable(24) %588, i1 noundef zeroext false, i1 noundef zeroext %593)
          to label %595 unwind label %576

595:                                              ; preds = %584
  br i1 %594, label %596, label %597

596:                                              ; preds = %595
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %597

597:                                              ; preds = %596, %595
  %598 = load ptr, ptr %56, align 8, !tbaa !5
  %599 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %598, i32 0, i32 3
  %600 = load ptr, ptr %599, align 8, !tbaa !48
  %601 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %602 = load ptr, ptr %601, align 8, !tbaa !9
  %603 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %602, i32 0, i32 6
  %604 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %603, i64 noundef 2) #10
  %605 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %606 = load ptr, ptr %605, align 8, !tbaa !9
  %607 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %606, i32 0, i32 11
  %608 = load i8, ptr %607, align 1, !tbaa !23, !range !17, !noundef !18
  %609 = trunc i8 %608 to i1
  %610 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %600, ptr noundef nonnull align 8 dereferenceable(24) %604, i1 noundef zeroext true, i1 noundef zeroext %609)
          to label %611 unwind label %576

611:                                              ; preds = %597
  br i1 %610, label %613, label %612

612:                                              ; preds = %611
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %613

613:                                              ; preds = %612, %611
  %614 = load ptr, ptr %56, align 8, !tbaa !5
  %615 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %614, i32 0, i32 3
  %616 = load ptr, ptr %615, align 8, !tbaa !48
  %617 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %618 = load ptr, ptr %617, align 8, !tbaa !9
  %619 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %618, i32 0, i32 6
  %620 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %619, i64 noundef 3) #10
  %621 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %622 = load ptr, ptr %621, align 8, !tbaa !9
  %623 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %622, i32 0, i32 11
  %624 = load i8, ptr %623, align 1, !tbaa !23, !range !17, !noundef !18
  %625 = trunc i8 %624 to i1
  %626 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %616, ptr noundef nonnull align 8 dereferenceable(24) %620, i1 noundef zeroext false, i1 noundef zeroext %625)
          to label %627 unwind label %576

627:                                              ; preds = %613
  br i1 %626, label %628, label %629

628:                                              ; preds = %627
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %629

629:                                              ; preds = %628, %627
  %630 = load ptr, ptr %56, align 8, !tbaa !5
  %631 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %630, i32 0, i32 2
  %632 = load ptr, ptr %631, align 8, !tbaa !49
  %633 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %634 = load ptr, ptr %633, align 8, !tbaa !9
  %635 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %634, i32 0, i32 6
  %636 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %635, i64 noundef 4) #10
  %637 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %638 = load ptr, ptr %637, align 8, !tbaa !9
  %639 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %638, i32 0, i32 11
  %640 = load i8, ptr %639, align 1, !tbaa !23, !range !17, !noundef !18
  %641 = trunc i8 %640 to i1
  %642 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %632, ptr noundef nonnull align 8 dereferenceable(24) %636, i1 noundef zeroext true, i1 noundef zeroext %641)
          to label %643 unwind label %576

643:                                              ; preds = %629
  br i1 %642, label %645, label %644

644:                                              ; preds = %643
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %645

645:                                              ; preds = %644, %643
  %646 = load ptr, ptr %56, align 8, !tbaa !5
  %647 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %646, i32 0, i32 2
  %648 = load ptr, ptr %647, align 8, !tbaa !49
  %649 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %650 = load ptr, ptr %649, align 8, !tbaa !9
  %651 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %650, i32 0, i32 6
  %652 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %651, i64 noundef 5) #10
  %653 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %654 = load ptr, ptr %653, align 8, !tbaa !9
  %655 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %654, i32 0, i32 11
  %656 = load i8, ptr %655, align 1, !tbaa !23, !range !17, !noundef !18
  %657 = trunc i8 %656 to i1
  %658 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %648, ptr noundef nonnull align 8 dereferenceable(24) %652, i1 noundef zeroext false, i1 noundef zeroext %657)
          to label %659 unwind label %576

659:                                              ; preds = %645
  br i1 %658, label %660, label %661

660:                                              ; preds = %659
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %661

661:                                              ; preds = %660, %659
  %662 = load i8, ptr %57, align 1, !tbaa !11, !range !17, !noundef !18
  %663 = trunc i8 %662 to i1
  br i1 %663, label %671, label %664

664:                                              ; preds = %661
  %665 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %666 = load ptr, ptr %665, align 8, !tbaa !9
  %667 = getelementptr inbounds i8, ptr %666, i64 136
  %668 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %667, i32 0, i32 1
  %669 = load i32, ptr %668, align 4, !tbaa !50
  %670 = add i32 %669, 1
  store i32 %670, ptr %668, align 4, !tbaa !50
  br label %671

671:                                              ; preds = %664, %661
  %672 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %673 = load ptr, ptr %672, align 8, !tbaa !9
  %674 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %673, i32 0, i32 7
  %675 = load i32, ptr %674, align 8, !tbaa !51
  %676 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %677 = load ptr, ptr %676, align 8, !tbaa !9
  %678 = getelementptr inbounds i8, ptr %677, i64 136
  %679 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %678, i32 0, i32 1
  %680 = load i32, ptr %679, align 4, !tbaa !50
  %681 = icmp ult i32 %675, %680
  br i1 %681, label %682, label %692

682:                                              ; preds = %671
  %683 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %684 = load ptr, ptr %683, align 8, !tbaa !9
  %685 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %684, i32 0, i32 6
  %686 = load i32, ptr %685, align 4, !tbaa !52
  %687 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %688 = load ptr, ptr %687, align 8, !tbaa !9
  %689 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %688, i32 0, i32 7
  %690 = load i32, ptr %689, align 8, !tbaa !51
  %691 = icmp ule i32 %686, %690
  br i1 %691, label %703, label %692

692:                                              ; preds = %682, %671
  %693 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %694 = load ptr, ptr %693, align 8, !tbaa !9
  %695 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %694, i32 0, i32 6
  %696 = load i32, ptr %695, align 4, !tbaa !52
  %697 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %698 = load ptr, ptr %697, align 8, !tbaa !9
  %699 = getelementptr inbounds i8, ptr %698, i64 136
  %700 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %699, i32 0, i32 1
  %701 = load i32, ptr %700, align 4, !tbaa !50
  %702 = icmp ugt i32 %696, %701
  br i1 %702, label %703, label %704

703:                                              ; preds = %692, %682
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %704

704:                                              ; preds = %703, %692
  %705 = load i8, ptr %57, align 1, !tbaa !11, !range !17, !noundef !18
  %706 = trunc i8 %705 to i1
  br i1 %706, label %707, label %739

707:                                              ; preds = %704
  %708 = load i8, ptr %46, align 1, !tbaa !11, !range !17, !noundef !18
  %709 = trunc i8 %708 to i1
  br i1 %709, label %738, label %710

710:                                              ; preds = %707
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  %711 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %712 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %711, i32 0, i32 7
  store ptr %712, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #10
  %713 = load ptr, ptr %58, align 8, !tbaa !5
  %714 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %713) #10
  %715 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %59, i32 0, i32 0
  store ptr %714, ptr %715, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #10
  %716 = load ptr, ptr %58, align 8, !tbaa !5
  %717 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %716) #10
  %718 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %60, i32 0, i32 0
  store ptr %717, ptr %718, align 8
  br label %719

719:                                              ; preds = %731, %710
  %720 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %60) #10
  br i1 %720, label %722, label %721

721:                                              ; preds = %719
  store i32 17, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %737

722:                                              ; preds = %719
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #10
  %723 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #10
  store ptr %723, ptr %61, align 8, !tbaa !5
  %724 = load ptr, ptr %61, align 8, !tbaa !5
  %725 = load ptr, ptr %724, align 8, !tbaa !5
  %726 = load ptr, ptr %56, align 8, !tbaa !5
  %727 = load ptr, ptr %725, align 8, !tbaa !31
  %728 = getelementptr inbounds ptr, ptr %727, i64 11
  %729 = load ptr, ptr %728, align 8
  invoke void %729(ptr noundef nonnull align 8 dereferenceable(8) %725, ptr noundef nonnull align 8 dereferenceable(80) %726)
          to label %730 unwind label %733

730:                                              ; preds = %722
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  br label %731

731:                                              ; preds = %730
  %732 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #10
  br label %719

733:                                              ; preds = %722
  %734 = landingpad { ptr, i32 }
          cleanup
  %735 = extractvalue { ptr, i32 } %734, 0
  store ptr %735, ptr %6, align 8
  %736 = extractvalue { ptr, i32 } %734, 1
  store i32 %736, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %1119

737:                                              ; preds = %721
  br label %738

738:                                              ; preds = %737, %707
  store i32 16, ptr %28, align 4
  br label %1110

739:                                              ; preds = %704
  %740 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %741 = load ptr, ptr %740, align 8, !tbaa !9
  %742 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %741, i32 0, i32 33
  %743 = load i8, ptr %742, align 1, !tbaa !41, !range !17, !noundef !18
  %744 = trunc i8 %743 to i1
  br i1 %744, label %745, label %746

745:                                              ; preds = %739
  store i32 16, ptr %28, align 4
  br label %1110

746:                                              ; preds = %739
  %747 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %748 = load ptr, ptr %747, align 8, !tbaa !9
  %749 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %748, i32 0, i32 34
  %750 = load i8, ptr %749, align 4, !tbaa !42, !range !17, !noundef !18
  %751 = trunc i8 %750 to i1
  br i1 %751, label %752, label %759

752:                                              ; preds = %746
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  %753 = load ptr, ptr %56, align 8, !tbaa !5
  store ptr %753, ptr %62, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(8) %62)
          to label %754 unwind label %755

754:                                              ; preds = %752
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  store i32 16, ptr %28, align 4
  br label %1110

755:                                              ; preds = %752
  %756 = landingpad { ptr, i32 }
          cleanup
  %757 = extractvalue { ptr, i32 } %756, 0
  store ptr %757, ptr %6, align 8
  %758 = extractvalue { ptr, i32 } %756, 1
  store i32 %758, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  br label %1119

759:                                              ; preds = %746
  %760 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %761 = load ptr, ptr %760, align 8, !tbaa !9
  %762 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %761, i32 0, i32 35
  %763 = load i8, ptr %762, align 1, !tbaa !43, !range !17, !noundef !18
  %764 = trunc i8 %763 to i1
  br i1 %764, label %765, label %825

765:                                              ; preds = %759
  call void @llvm.lifetime.start.p0(i64 24, ptr %63) #10
  %766 = load ptr, ptr %56, align 8, !tbaa !5
  %767 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %766, i32 0, i32 3
  %768 = load ptr, ptr %767, align 8, !tbaa !48
  invoke void @_ZN7doctest6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(24) %63, ptr noundef %768)
          to label %769 unwind label %802

769:                                              ; preds = %765
  %770 = invoke noundef i64 @_ZNKSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE5countERKS1_(ptr noundef nonnull align 8 dereferenceable(48) %45, ptr noundef nonnull align 8 dereferenceable(24) %63)
          to label %771 unwind label %806

771:                                              ; preds = %769
  %772 = icmp eq i64 %770, 0
  br i1 %772, label %773, label %781

773:                                              ; preds = %771
  %774 = load ptr, ptr %56, align 8, !tbaa !5
  %775 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %774, i32 0, i32 3
  %776 = load ptr, ptr %775, align 8, !tbaa !48
  %777 = getelementptr inbounds i8, ptr %776, i64 0
  %778 = load i8, ptr %777, align 1, !tbaa !53
  %779 = sext i8 %778 to i32
  %780 = icmp ne i32 %779, 0
  br label %781

781:                                              ; preds = %773, %771
  %782 = phi i1 [ false, %771 ], [ %780, %773 ]
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %63) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %63) #10
  br i1 %782, label %783, label %824

783:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #10
  %784 = load ptr, ptr %56, align 8, !tbaa !5
  store ptr %784, ptr %64, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %785 unwind label %811

785:                                              ; preds = %783
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %65) #10
  %786 = load ptr, ptr %56, align 8, !tbaa !5
  %787 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %786, i32 0, i32 3
  %788 = load ptr, ptr %787, align 8, !tbaa !48
  invoke void @_ZN7doctest6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(24) %65, ptr noundef %788)
          to label %789 unwind label %815

789:                                              ; preds = %785
  %790 = invoke { ptr, i8 } @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) %45, ptr noundef nonnull align 8 dereferenceable(24) %65)
          to label %791 unwind label %819

791:                                              ; preds = %789
  %792 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 0
  %793 = extractvalue { ptr, i8 } %790, 0
  store ptr %793, ptr %792, align 8
  %794 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 1
  %795 = extractvalue { ptr, i8 } %790, 1
  store i8 %795, ptr %794, align 8
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #10
  %796 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %797 = load ptr, ptr %796, align 8, !tbaa !9
  %798 = getelementptr inbounds i8, ptr %797, i64 136
  %799 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %798, i32 0, i32 2
  %800 = load i32, ptr %799, align 8, !tbaa !54
  %801 = add i32 %800, 1
  store i32 %801, ptr %799, align 8, !tbaa !54
  br label %824

802:                                              ; preds = %765
  %803 = landingpad { ptr, i32 }
          cleanup
  %804 = extractvalue { ptr, i32 } %803, 0
  store ptr %804, ptr %6, align 8
  %805 = extractvalue { ptr, i32 } %803, 1
  store i32 %805, ptr %7, align 4
  br label %810

806:                                              ; preds = %769
  %807 = landingpad { ptr, i32 }
          cleanup
  %808 = extractvalue { ptr, i32 } %807, 0
  store ptr %808, ptr %6, align 8
  %809 = extractvalue { ptr, i32 } %807, 1
  store i32 %809, ptr %7, align 4
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %63) #10
  br label %810

810:                                              ; preds = %806, %802
  call void @llvm.lifetime.end.p0(i64 24, ptr %63) #10
  br label %1119

811:                                              ; preds = %783
  %812 = landingpad { ptr, i32 }
          cleanup
  %813 = extractvalue { ptr, i32 } %812, 0
  store ptr %813, ptr %6, align 8
  %814 = extractvalue { ptr, i32 } %812, 1
  store i32 %814, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #10
  br label %1119

815:                                              ; preds = %785
  %816 = landingpad { ptr, i32 }
          cleanup
  %817 = extractvalue { ptr, i32 } %816, 0
  store ptr %817, ptr %6, align 8
  %818 = extractvalue { ptr, i32 } %816, 1
  store i32 %818, ptr %7, align 4
  br label %823

819:                                              ; preds = %789
  %820 = landingpad { ptr, i32 }
          cleanup
  %821 = extractvalue { ptr, i32 } %820, 0
  store ptr %821, ptr %6, align 8
  %822 = extractvalue { ptr, i32 } %820, 1
  store i32 %822, ptr %7, align 4
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #10
  br label %823

823:                                              ; preds = %819, %815
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #10
  br label %1119

824:                                              ; preds = %791, %781
  store i32 16, ptr %28, align 4
  br label %1110

825:                                              ; preds = %759
  %826 = load ptr, ptr %56, align 8, !tbaa !5
  %827 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %828 = load ptr, ptr %827, align 8, !tbaa !9
  %829 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %828, i32 0, i32 2
  store ptr %826, ptr %829, align 8, !tbaa !55
  %830 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %831 = load ptr, ptr %830, align 8, !tbaa !9
  %832 = getelementptr inbounds i8, ptr %831, i64 160
  %833 = getelementptr inbounds %"struct.doctest::CurrentTestCaseStats", ptr %832, i32 0, i32 3
  store i32 0, ptr %833, align 8, !tbaa !56
  %834 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %835 = load ptr, ptr %834, align 8, !tbaa !9
  %836 = getelementptr inbounds i8, ptr %835, i64 160
  %837 = getelementptr inbounds %"struct.doctest::CurrentTestCaseStats", ptr %836, i32 0, i32 2
  store double 0.000000e+00, ptr %837, align 8, !tbaa !58
  %838 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %839 = load ptr, ptr %838, align 8, !tbaa !9
  %840 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %839, i32 0, i32 5
  %841 = call noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048) %840, i32 noundef 0) #10
  %842 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %843 = load ptr, ptr %842, align 8, !tbaa !9
  %844 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %843, i32 0, i32 4
  %845 = call noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048) %844, i32 noundef 0) #10
  %846 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %847 = load ptr, ptr %846, align 8, !tbaa !9
  %848 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %847, i32 0, i32 15
  call void @_ZNSt13unordered_setIySt4hashIyESt8equal_toIyESaIyEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %848) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #10
  %849 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %850 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %849, i32 0, i32 7
  store ptr %850, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #10
  %851 = load ptr, ptr %67, align 8, !tbaa !5
  %852 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %851) #10
  %853 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %68, i32 0, i32 0
  store ptr %852, ptr %853, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #10
  %854 = load ptr, ptr %67, align 8, !tbaa !5
  %855 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %854) #10
  %856 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %69, i32 0, i32 0
  store ptr %855, ptr %856, align 8
  br label %857

857:                                              ; preds = %869, %825
  %858 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull align 8 dereferenceable(8) %69) #10
  br i1 %858, label %860, label %859

859:                                              ; preds = %857
  store i32 19, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #10
  br label %875

860:                                              ; preds = %857
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #10
  %861 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %68) #10
  store ptr %861, ptr %70, align 8, !tbaa !5
  %862 = load ptr, ptr %70, align 8, !tbaa !5
  %863 = load ptr, ptr %862, align 8, !tbaa !5
  %864 = load ptr, ptr %56, align 8, !tbaa !5
  %865 = load ptr, ptr %863, align 8, !tbaa !31
  %866 = getelementptr inbounds ptr, ptr %865, i64 3
  %867 = load ptr, ptr %866, align 8
  invoke void %867(ptr noundef nonnull align 8 dereferenceable(8) %863, ptr noundef nonnull align 8 dereferenceable(80) %864)
          to label %868 unwind label %871

868:                                              ; preds = %860
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  br label %869

869:                                              ; preds = %868
  %870 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %68) #10
  br label %857

871:                                              ; preds = %860
  %872 = landingpad { ptr, i32 }
          cleanup
  %873 = extractvalue { ptr, i32 } %872, 0
  store ptr %873, ptr %6, align 8
  %874 = extractvalue { ptr, i32 } %872, 1
  store i32 %874, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #10
  br label %1119

875:                                              ; preds = %859
  %876 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %877 = load ptr, ptr %876, align 8, !tbaa !9
  %878 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %877, i32 0, i32 9
  invoke void @_ZN7doctest6detail5Timer5startEv(ptr noundef nonnull align 8 dereferenceable(8) %878)
          to label %879 unwind label %576

879:                                              ; preds = %875
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #10
  store i8 1, ptr %71, align 1, !tbaa !11
  br label %880

880:                                              ; preds = %1051, %879
  %881 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %882 = load ptr, ptr %881, align 8, !tbaa !9
  %883 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %882, i32 0, i32 11
  store i8 0, ptr %883, align 8, !tbaa !59
  %884 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %885 = load ptr, ptr %884, align 8, !tbaa !9
  %886 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %885, i32 0, i32 13
  call void @_ZNSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %886) #10
  %887 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %888 = load ptr, ptr %887, align 8, !tbaa !9
  %889 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %888, i32 0, i32 16
  store i64 0, ptr %889, align 8, !tbaa !86
  %890 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %891 = load ptr, ptr %890, align 8, !tbaa !9
  %892 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %891, i32 0, i32 17
  %893 = call noundef zeroext i1 @_ZNSt6atomicIbEaSEb(ptr noundef nonnull align 1 dereferenceable(1) %892, i1 noundef zeroext true) #10
  %894 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %895 = load ptr, ptr %894, align 8, !tbaa !9
  %896 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %895, i32 0, i32 10
  call void @_ZNSt6vectorIN7doctest6StringESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %896) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %72) #10
  invoke void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %72)
          to label %897 unwind label %903

897:                                              ; preds = %880
  %898 = load ptr, ptr %56, align 8, !tbaa !5
  %899 = getelementptr inbounds %"struct.doctest::detail::TestCase", ptr %898, i32 0, i32 1
  %900 = load ptr, ptr %899, align 8, !tbaa !87
  invoke void %900()
          to label %901 unwind label %907

901:                                              ; preds = %897
  invoke void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler5resetEv()
          to label %902 unwind label %907

902:                                              ; preds = %901
  call void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %72) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #10
  br label %926

903:                                              ; preds = %880
  %904 = landingpad { ptr, i32 }
          catch ptr @_ZTIN7doctest6detail20TestFailureExceptionE
          catch ptr null
  %905 = extractvalue { ptr, i32 } %904, 0
  store ptr %905, ptr %6, align 8
  %906 = extractvalue { ptr, i32 } %904, 1
  store i32 %906, ptr %7, align 4
  br label %911

907:                                              ; preds = %901, %897
  %908 = landingpad { ptr, i32 }
          catch ptr @_ZTIN7doctest6detail20TestFailureExceptionE
          catch ptr null
  %909 = extractvalue { ptr, i32 } %908, 0
  store ptr %909, ptr %6, align 8
  %910 = extractvalue { ptr, i32 } %908, 1
  store i32 %910, ptr %7, align 4
  call void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %72) #10
  br label %911

911:                                              ; preds = %907, %903
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #10
  br label %912

912:                                              ; preds = %911
  %913 = load i32, ptr %7, align 4
  %914 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIN7doctest6detail20TestFailureExceptionE) #10
  %915 = icmp eq i32 %913, %914
  br i1 %915, label %916, label %955

916:                                              ; preds = %912
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #10
  %917 = load ptr, ptr %6, align 8
  %918 = call ptr @__cxa_begin_catch(ptr %917) #10
  store ptr %918, ptr %78, align 8
  %919 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %920 = load ptr, ptr %919, align 8, !tbaa !9
  %921 = getelementptr inbounds i8, ptr %920, i64 160
  %922 = getelementptr inbounds %"struct.doctest::CurrentTestCaseStats", ptr %921, i32 0, i32 3
  %923 = load i32, ptr %922, align 8, !tbaa !56
  %924 = or i32 %923, 1
  store i32 %924, ptr %922, align 8, !tbaa !56
  invoke void @__cxa_end_catch()
          to label %925 unwind label %1004

925:                                              ; preds = %916
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #10
  br label %926

926:                                              ; preds = %998, %925, %902
  %927 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %928 = load ptr, ptr %927, align 8, !tbaa !9
  %929 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %928, i32 0, i32 8
  %930 = load i32, ptr %929, align 4, !tbaa !89
  %931 = icmp sgt i32 %930, 0
  br i1 %931, label %932, label %1008

932:                                              ; preds = %926
  %933 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %934 = load ptr, ptr %933, align 8, !tbaa !9
  %935 = getelementptr inbounds i8, ptr %934, i64 136
  %936 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %935, i32 0, i32 5
  %937 = load i32, ptr %936, align 4, !tbaa !90
  %938 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %939 = load ptr, ptr %938, align 8, !tbaa !9
  %940 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %939, i32 0, i32 5
  %941 = call noundef i32 @_ZNK7doctest6detail15MultiLaneAtomicIiEcviEv(ptr noundef nonnull align 4 dereferenceable(2048) %940) #10
  %942 = add nsw i32 %937, %941
  %943 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %944 = load ptr, ptr %943, align 8, !tbaa !9
  %945 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %944, i32 0, i32 8
  %946 = load i32, ptr %945, align 4, !tbaa !89
  %947 = icmp sge i32 %942, %946
  br i1 %947, label %948, label %1008

948:                                              ; preds = %932
  store i8 0, ptr %71, align 1, !tbaa !11
  %949 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %950 = load ptr, ptr %949, align 8, !tbaa !9
  %951 = getelementptr inbounds i8, ptr %950, i64 160
  %952 = getelementptr inbounds %"struct.doctest::CurrentTestCaseStats", ptr %951, i32 0, i32 3
  %953 = load i32, ptr %952, align 8, !tbaa !56
  %954 = or i32 %953, 8
  store i32 %954, ptr %952, align 8, !tbaa !56
  br label %1008

955:                                              ; preds = %912
  %956 = load ptr, ptr %6, align 8
  %957 = call ptr @__cxa_begin_catch(ptr %956) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #10
  %958 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %959 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %958, i32 0, i32 7
  store ptr %959, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #10
  %960 = load ptr, ptr %73, align 8, !tbaa !5
  %961 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %960) #10
  %962 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %74, i32 0, i32 0
  store ptr %961, ptr %962, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #10
  %963 = load ptr, ptr %73, align 8, !tbaa !5
  %964 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %963) #10
  %965 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %75, i32 0, i32 0
  store ptr %964, ptr %965, align 8
  br label %966

966:                                              ; preds = %980, %955
  %967 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef nonnull align 8 dereferenceable(8) %75) #10
  br i1 %967, label %969, label %968

968:                                              ; preds = %966
  store i32 23, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #10
  br label %991

969:                                              ; preds = %966
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #10
  %970 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %74) #10
  store ptr %970, ptr %76, align 8, !tbaa !5
  %971 = load ptr, ptr %76, align 8, !tbaa !5
  %972 = load ptr, ptr %971, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #10
  %973 = getelementptr inbounds %"struct.doctest::TestCaseException", ptr %77, i32 0, i32 0
  invoke void @_ZN7doctest12_GLOBAL__N_124translateActiveExceptionEv(ptr dead_on_unwind writable sret(%"class.doctest::String") align 8 %973)
          to label %974 unwind label %982

974:                                              ; preds = %969
  %975 = getelementptr inbounds %"struct.doctest::TestCaseException", ptr %77, i32 0, i32 1
  store i8 0, ptr %975, align 8, !tbaa !91
  %976 = load ptr, ptr %972, align 8, !tbaa !31
  %977 = getelementptr inbounds ptr, ptr %976, i64 6
  %978 = load ptr, ptr %977, align 8
  invoke void %978(ptr noundef nonnull align 8 dereferenceable(8) %972, ptr noundef nonnull align 8 dereferenceable(25) %77)
          to label %979 unwind label %986

979:                                              ; preds = %974
  call void @_ZN7doctest17TestCaseExceptionD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %77) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #10
  br label %980

980:                                              ; preds = %979
  %981 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %74) #10
  br label %966

982:                                              ; preds = %969
  %983 = landingpad { ptr, i32 }
          cleanup
  %984 = extractvalue { ptr, i32 } %983, 0
  store ptr %984, ptr %6, align 8
  %985 = extractvalue { ptr, i32 } %983, 1
  store i32 %985, ptr %7, align 4
  br label %990

986:                                              ; preds = %974
  %987 = landingpad { ptr, i32 }
          cleanup
  %988 = extractvalue { ptr, i32 } %987, 0
  store ptr %988, ptr %6, align 8
  %989 = extractvalue { ptr, i32 } %987, 1
  store i32 %989, ptr %7, align 4
  call void @_ZN7doctest17TestCaseExceptionD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %77) #10
  br label %990

990:                                              ; preds = %986, %982
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #10
  invoke void @__cxa_end_catch()
          to label %1003 unwind label %1210

991:                                              ; preds = %968
  %992 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %993 = load ptr, ptr %992, align 8, !tbaa !9
  %994 = getelementptr inbounds i8, ptr %993, i64 160
  %995 = getelementptr inbounds %"struct.doctest::CurrentTestCaseStats", ptr %994, i32 0, i32 3
  %996 = load i32, ptr %995, align 8, !tbaa !56
  %997 = or i32 %996, 2
  store i32 %997, ptr %995, align 8, !tbaa !56
  invoke void @__cxa_end_catch()
          to label %998 unwind label %999

998:                                              ; preds = %991
  br label %926

999:                                              ; preds = %1054, %991
  %1000 = landingpad { ptr, i32 }
          cleanup
  %1001 = extractvalue { ptr, i32 } %1000, 0
  store ptr %1001, ptr %6, align 8
  %1002 = extractvalue { ptr, i32 } %1000, 1
  store i32 %1002, ptr %7, align 4
  br label %1118

1003:                                             ; preds = %990
  br label %1118

1004:                                             ; preds = %916
  %1005 = landingpad { ptr, i32 }
          cleanup
  %1006 = extractvalue { ptr, i32 } %1005, 0
  store ptr %1006, ptr %6, align 8
  %1007 = extractvalue { ptr, i32 } %1005, 1
  store i32 %1007, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #10
  br label %1118

1008:                                             ; preds = %948, %932, %926
  %1009 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1010 = load ptr, ptr %1009, align 8, !tbaa !9
  %1011 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1010, i32 0, i32 14
  %1012 = call noundef zeroext i1 @_ZNKSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1011) #10
  br i1 %1012, label %1044, label %1013

1013:                                             ; preds = %1008
  %1014 = load i8, ptr %71, align 1, !tbaa !11, !range !17, !noundef !18
  %1015 = trunc i8 %1014 to i1
  br i1 %1015, label %1016, label %1044

1016:                                             ; preds = %1013
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #10
  %1017 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1018 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1017, i32 0, i32 7
  store ptr %1018, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #10
  %1019 = load ptr, ptr %79, align 8, !tbaa !5
  %1020 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1019) #10
  %1021 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %80, i32 0, i32 0
  store ptr %1020, ptr %1021, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #10
  %1022 = load ptr, ptr %79, align 8, !tbaa !5
  %1023 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1022) #10
  %1024 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %81, i32 0, i32 0
  store ptr %1023, ptr %1024, align 8
  br label %1025

1025:                                             ; preds = %1037, %1016
  %1026 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %80, ptr noundef nonnull align 8 dereferenceable(8) %81) #10
  br i1 %1026, label %1028, label %1027

1027:                                             ; preds = %1025
  store i32 25, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #10
  br label %1043

1028:                                             ; preds = %1025
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #10
  %1029 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %80) #10
  store ptr %1029, ptr %82, align 8, !tbaa !5
  %1030 = load ptr, ptr %82, align 8, !tbaa !5
  %1031 = load ptr, ptr %1030, align 8, !tbaa !5
  %1032 = load ptr, ptr %56, align 8, !tbaa !5
  %1033 = load ptr, ptr %1031, align 8, !tbaa !31
  %1034 = getelementptr inbounds ptr, ptr %1033, i64 4
  %1035 = load ptr, ptr %1034, align 8
  invoke void %1035(ptr noundef nonnull align 8 dereferenceable(8) %1031, ptr noundef nonnull align 8 dereferenceable(80) %1032)
          to label %1036 unwind label %1039

1036:                                             ; preds = %1028
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  br label %1037

1037:                                             ; preds = %1036
  %1038 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %80) #10
  br label %1025

1039:                                             ; preds = %1028
  %1040 = landingpad { ptr, i32 }
          cleanup
  %1041 = extractvalue { ptr, i32 } %1040, 0
  store ptr %1041, ptr %6, align 8
  %1042 = extractvalue { ptr, i32 } %1040, 1
  store i32 %1042, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #10
  br label %1118

1043:                                             ; preds = %1027
  br label %1044

1044:                                             ; preds = %1043, %1013, %1008
  %1045 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1046 = load ptr, ptr %1045, align 8, !tbaa !9
  %1047 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1046, i32 0, i32 14
  %1048 = call noundef zeroext i1 @_ZNKSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1047) #10
  br i1 %1048, label %1049, label %1050

1049:                                             ; preds = %1044
  store i8 0, ptr %71, align 1, !tbaa !11
  br label %1050

1050:                                             ; preds = %1049, %1044
  br label %1051

1051:                                             ; preds = %1050
  %1052 = load i8, ptr %71, align 1, !tbaa !11, !range !17, !noundef !18
  %1053 = trunc i8 %1052 to i1
  br i1 %1053, label %880, label %1054, !llvm.loop !93

1054:                                             ; preds = %1051
  %1055 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1056 = load ptr, ptr %1055, align 8, !tbaa !9
  invoke void @_ZN7doctest6detail12ContextState20finalizeTestCaseDataEv(ptr noundef nonnull align 8 dereferenceable(4489) %1056)
          to label %1057 unwind label %999

1057:                                             ; preds = %1054
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #10
  %1058 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1059 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1058, i32 0, i32 7
  store ptr %1059, ptr %83, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #10
  %1060 = load ptr, ptr %83, align 8, !tbaa !5
  %1061 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1060) #10
  %1062 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %84, i32 0, i32 0
  store ptr %1061, ptr %1062, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #10
  %1063 = load ptr, ptr %83, align 8, !tbaa !5
  %1064 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1063) #10
  %1065 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %85, i32 0, i32 0
  store ptr %1064, ptr %1065, align 8
  br label %1066

1066:                                             ; preds = %1079, %1057
  %1067 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull align 8 dereferenceable(8) %85) #10
  br i1 %1067, label %1069, label %1068

1068:                                             ; preds = %1066
  store i32 27, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #10
  br label %1085

1069:                                             ; preds = %1066
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #10
  %1070 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %84) #10
  store ptr %1070, ptr %86, align 8, !tbaa !5
  %1071 = load ptr, ptr %86, align 8, !tbaa !5
  %1072 = load ptr, ptr %1071, align 8, !tbaa !5
  %1073 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1074 = getelementptr inbounds i8, ptr %1073, i64 160
  %1075 = load ptr, ptr %1072, align 8, !tbaa !31
  %1076 = getelementptr inbounds ptr, ptr %1075, i64 5
  %1077 = load ptr, ptr %1076, align 8
  invoke void %1077(ptr noundef nonnull align 8 dereferenceable(8) %1072, ptr noundef nonnull align 8 dereferenceable(24) %1074)
          to label %1078 unwind label %1081

1078:                                             ; preds = %1069
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #10
  br label %1079

1079:                                             ; preds = %1078
  %1080 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %84) #10
  br label %1066

1081:                                             ; preds = %1069
  %1082 = landingpad { ptr, i32 }
          cleanup
  %1083 = extractvalue { ptr, i32 } %1082, 0
  store ptr %1083, ptr %6, align 8
  %1084 = extractvalue { ptr, i32 } %1082, 1
  store i32 %1084, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #10
  br label %1118

1085:                                             ; preds = %1068
  %1086 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1087 = load ptr, ptr %1086, align 8, !tbaa !9
  %1088 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %1087, i32 0, i32 2
  store ptr null, ptr %1088, align 8, !tbaa !55
  %1089 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1090 = load ptr, ptr %1089, align 8, !tbaa !9
  %1091 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %1090, i32 0, i32 8
  %1092 = load i32, ptr %1091, align 4, !tbaa !89
  %1093 = icmp sgt i32 %1092, 0
  br i1 %1093, label %1094, label %1106

1094:                                             ; preds = %1085
  %1095 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1096 = load ptr, ptr %1095, align 8, !tbaa !9
  %1097 = getelementptr inbounds i8, ptr %1096, i64 136
  %1098 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %1097, i32 0, i32 5
  %1099 = load i32, ptr %1098, align 4, !tbaa !90
  %1100 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1101 = load ptr, ptr %1100, align 8, !tbaa !9
  %1102 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %1101, i32 0, i32 8
  %1103 = load i32, ptr %1102, align 4, !tbaa !89
  %1104 = icmp sge i32 %1099, %1103
  br i1 %1104, label %1105, label %1106

1105:                                             ; preds = %1094
  store i32 15, ptr %28, align 4
  br label %1107

1106:                                             ; preds = %1094, %1085
  store i32 0, ptr %28, align 4
  br label %1107

1107:                                             ; preds = %1106, %1105
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #10
  %1108 = load i32, ptr %28, align 4
  switch i32 %1108, label %1110 [
    i32 0, label %1109
  ]

1109:                                             ; preds = %1107
  store i32 0, ptr %28, align 4
  br label %1110

1110:                                             ; preds = %1109, %1107, %824, %754, %745, %738
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  %1111 = load i32, ptr %28, align 4
  switch i32 %1111, label %1113 [
    i32 0, label %1112
  ]

1112:                                             ; preds = %1110
  store i32 0, ptr %28, align 4
  br label %1113

1113:                                             ; preds = %1112, %1110
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  %1114 = load i32, ptr %28, align 4
  switch i32 %1114, label %1120 [
    i32 0, label %1115
    i32 16, label %1116
  ]

1115:                                             ; preds = %1113
  br label %1116

1116:                                             ; preds = %1115, %1113
  %1117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  br label %541

1118:                                             ; preds = %1081, %1039, %1004, %1003, %999
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #10
  br label %1119

1119:                                             ; preds = %1118, %871, %823, %811, %810, %755, %733, %576
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  br label %1199

1120:                                             ; preds = %1113, %543
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  br label %1121

1121:                                             ; preds = %1120
  %1122 = load i8, ptr %46, align 1, !tbaa !11, !range !17, !noundef !18
  %1123 = trunc i8 %1122 to i1
  br i1 %1123, label %1153, label %1124

1124:                                             ; preds = %1121
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #10
  %1125 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1126 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1125, i32 0, i32 7
  store ptr %1126, ptr %87, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #10
  %1127 = load ptr, ptr %87, align 8, !tbaa !5
  %1128 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1127) #10
  %1129 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %88, i32 0, i32 0
  store ptr %1128, ptr %1129, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #10
  %1130 = load ptr, ptr %87, align 8, !tbaa !5
  %1131 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1130) #10
  %1132 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %89, i32 0, i32 0
  store ptr %1131, ptr %1132, align 8
  br label %1133

1133:                                             ; preds = %1146, %1124
  %1134 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef nonnull align 8 dereferenceable(8) %89) #10
  br i1 %1134, label %1136, label %1135

1135:                                             ; preds = %1133
  store i32 29, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #10
  br label %1152

1136:                                             ; preds = %1133
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #10
  %1137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %88) #10
  store ptr %1137, ptr %90, align 8, !tbaa !5
  %1138 = load ptr, ptr %90, align 8, !tbaa !5
  %1139 = load ptr, ptr %1138, align 8, !tbaa !5
  %1140 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1141 = getelementptr inbounds i8, ptr %1140, i64 136
  %1142 = load ptr, ptr %1139, align 8, !tbaa !31
  %1143 = getelementptr inbounds ptr, ptr %1142, i64 2
  %1144 = load ptr, ptr %1143, align 8
  invoke void %1144(ptr noundef nonnull align 8 dereferenceable(8) %1139, ptr noundef nonnull align 4 dereferenceable(24) %1141)
          to label %1145 unwind label %1148

1145:                                             ; preds = %1136
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #10
  br label %1146

1146:                                             ; preds = %1145
  %1147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %88) #10
  br label %1133

1148:                                             ; preds = %1136
  %1149 = landingpad { ptr, i32 }
          cleanup
  %1150 = extractvalue { ptr, i32 } %1149, 0
  store ptr %1150, ptr %6, align 8
  %1151 = extractvalue { ptr, i32 } %1149, 1
  store i32 %1151, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #10
  br label %1199

1152:                                             ; preds = %1135
  br label %1192

1153:                                             ; preds = %1121
  call void @llvm.lifetime.start.p0(i64 24, ptr %91) #10
  call void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20) %91) #10
  %1154 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1155 = icmp eq ptr %1154, null
  br i1 %1155, label %1158, label %1156

1156:                                             ; preds = %1153
  %1157 = getelementptr inbounds i8, ptr %1154, i64 136
  br label %1158

1158:                                             ; preds = %1156, %1153
  %1159 = phi ptr [ %1157, %1156 ], [ null, %1153 ]
  %1160 = getelementptr inbounds %"struct.doctest::QueryData", ptr %91, i32 0, i32 0
  store ptr %1159, ptr %1160, align 8, !tbaa !94
  %1161 = call noundef ptr @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #10
  %1162 = getelementptr inbounds %"struct.doctest::QueryData", ptr %91, i32 0, i32 1
  store ptr %1161, ptr %1162, align 8, !tbaa !96
  %1163 = call noundef i64 @_ZNKSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #10
  %1164 = trunc i64 %1163 to i32
  %1165 = getelementptr inbounds %"struct.doctest::QueryData", ptr %91, i32 0, i32 2
  store i32 %1164, ptr %1165, align 8, !tbaa !97
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #10
  %1166 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1167 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1166, i32 0, i32 7
  store ptr %1167, ptr %92, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #10
  %1168 = load ptr, ptr %92, align 8, !tbaa !5
  %1169 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1168) #10
  %1170 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %93, i32 0, i32 0
  store ptr %1169, ptr %1170, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #10
  %1171 = load ptr, ptr %92, align 8, !tbaa !5
  %1172 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1171) #10
  %1173 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %94, i32 0, i32 0
  store ptr %1172, ptr %1173, align 8
  br label %1174

1174:                                             ; preds = %1185, %1158
  %1175 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 8 dereferenceable(8) %94) #10
  br i1 %1175, label %1177, label %1176

1176:                                             ; preds = %1174
  store i32 31, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #10
  br label %1191

1177:                                             ; preds = %1174
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #10
  %1178 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %93) #10
  store ptr %1178, ptr %95, align 8, !tbaa !5
  %1179 = load ptr, ptr %95, align 8, !tbaa !5
  %1180 = load ptr, ptr %1179, align 8, !tbaa !5
  %1181 = load ptr, ptr %1180, align 8, !tbaa !31
  %1182 = getelementptr inbounds ptr, ptr %1181, i64 0
  %1183 = load ptr, ptr %1182, align 8
  invoke void %1183(ptr noundef nonnull align 8 dereferenceable(8) %1180, ptr noundef nonnull align 8 dereferenceable(20) %91)
          to label %1184 unwind label %1187

1184:                                             ; preds = %1177
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #10
  br label %1185

1185:                                             ; preds = %1184
  %1186 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %93) #10
  br label %1174

1187:                                             ; preds = %1177
  %1188 = landingpad { ptr, i32 }
          cleanup
  %1189 = extractvalue { ptr, i32 } %1188, 0
  store ptr %1189, ptr %6, align 8
  %1190 = extractvalue { ptr, i32 } %1188, 1
  store i32 %1190, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %91) #10
  br label %1199

1191:                                             ; preds = %1176
  call void @llvm.lifetime.end.p0(i64 24, ptr %91) #10
  br label %1192

1192:                                             ; preds = %1191, %1152
  %1193 = invoke noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %1194 unwind label %1195

1194:                                             ; preds = %1192
  store i32 %1193, ptr %2, align 4
  store i32 1, ptr %28, align 4
  call void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #10
  call void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %45) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %45) #10
  call void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #10
  br label %1201

1195:                                             ; preds = %1192
  %1196 = landingpad { ptr, i32 }
          cleanup
  %1197 = extractvalue { ptr, i32 } %1196, 0
  store ptr %1197, ptr %6, align 8
  %1198 = extractvalue { ptr, i32 } %1196, 1
  store i32 %1198, ptr %7, align 4
  br label %1199

1199:                                             ; preds = %1195, %1187, %1148, %1119, %529
  call void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #10
  call void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %45) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %45) #10
  br label %1200

1200:                                             ; preds = %1199, %386, %357
  call void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #10
  br label %1203

1201:                                             ; preds = %1194, %335
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #10
  call void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264) %5) #10
  call void @llvm.lifetime.end.p0(i64 528, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #10
  %1202 = load i32, ptr %2, align 4
  ret i32 %1202

1203:                                             ; preds = %1200, %336, %329, %282, %238, %180
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #10
  br label %1204

1204:                                             ; preds = %1203, %145
  call void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264) %5) #10
  call void @llvm.lifetime.end.p0(i64 528, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #10
  br label %1205

1205:                                             ; preds = %1204
  %1206 = load ptr, ptr %6, align 8
  %1207 = load i32, ptr %7, align 4
  %1208 = insertvalue { ptr, i32 } poison, ptr %1206, 0
  %1209 = insertvalue { ptr, i32 } %1208, i32 %1207, 1
  resume { ptr, i32 } %1209

1210:                                             ; preds = %990
  %1211 = landingpad { ptr, i32 }
          catch ptr null
  %1212 = extractvalue { ptr, i32 } %1211, 0
  call void @__clang_call_terminate(ptr %1212) #11
  unreachable
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest6detail12ContextState12resetRunDataEv(ptr noundef nonnull align 8 dereferenceable(4489)) #2 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(264)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(264), ptr noundef, i32 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler19allocateAltStackMemEv() #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN7doctest6StringESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getReportersEv() #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getListenersEv() #2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEOS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr, ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEES5_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS6_SaIS6_EEEEPFbS6_S6_EEvT_SE_T0_(ptr, ptr, ptr noundef) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_119fileOrderComparatorEPKNS_6detail8TestCaseES4_(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_120suiteOrderComparatorEPKNS_6detail8TestCaseES4_(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_119nameOrderComparatorEPKNS_6detail8TestCaseES4_(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind
declare void @srand(i32 noundef) #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: nounwind
declare i32 @rand() #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE5countERKS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIySt4hashIyESt8equal_toIyESaIyEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest6detail5Timer5startEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler5resetEv() #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #9

declare void @__cxa_end_catch()

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7doctest6detail12ContextState20finalizeTestCaseDataEv(ptr noundef nonnull align 8 dereferenceable(4489)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264)) unnamed_addr #2 align 2

declare void @_ZN7doctest6StringD1Ev(ptr)

declare void @_ZN7doctest6StringC1EPKc(ptr, ptr)

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { mustprogress 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 #3 = { mustprogress 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 #4 = { inlinehint mustprogress 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 #5 = { noinline noreturn nounwind uwtable "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { inlinehint mustprogress 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 #8 = { 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 #9 = { nounwind memory(none) }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSN7doctest7ContextE", !6, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !12, i64 119}
!14 = !{!"_ZTSN7doctest14ContextOptionsE", !6, i64 0, !15, i64 8, !6, i64 32, !15, i64 40, !15, i64 64, !16, i64 88, !16, i64 92, !16, i64 96, !16, i64 100, !16, i64 104, !12, i64 108, !12, i64 109, !12, i64 110, !12, i64 111, !12, i64 112, !12, i64 113, !12, i64 114, !12, i64 115, !12, i64 116, !12, i64 117, !12, i64 118, !12, i64 119, !12, i64 120, !12, i64 121, !12, i64 122, !12, i64 123, !12, i64 124, !12, i64 125, !12, i64 126, !12, i64 127, !12, i64 128, !12, i64 129, !12, i64 130, !12, i64 131, !12, i64 132, !12, i64 133, !12, i64 134}
!15 = !{!"_ZTSN7doctest6StringE", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!14, !6, i64 0}
!20 = !{!14, !12, i64 113}
!21 = !{!22, !6, i64 16}
!22 = !{!"_ZTSZN7doctest7Context3runEvE3$_0", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!14, !12, i64 109}
!24 = !{!25, !6, i64 32}
!25 = !{!"_ZTSSt4pairIKS_IiN7doctest6StringEEPFPNS0_9IReporterERKNS0_14ContextOptionsEEE", !26, i64 0, !6, i64 32}
!26 = !{!"_ZTSSt4pairIiN7doctest6StringEE", !16, i64 0, !15, i64 8}
!27 = !{!14, !12, i64 116}
!28 = !{!14, !12, i64 130}
!29 = !{!14, !12, i64 129}
!30 = !{!14, !12, i64 134}
!31 = !{!32, !32, i64 0}
!32 = !{!"vtable pointer", !8, i64 0}
!33 = !{!34, !16, i64 0}
!34 = !{!"_ZTSN7doctest12TestRunStatsE", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20}
!35 = !{!14, !16, i64 88}
!36 = !{!37, !37, i64 0}
!37 = !{!"long", !7, i64 0}
!38 = !{!16, !16, i64 0}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = !{!14, !12, i64 131}
!42 = !{!14, !12, i64 132}
!43 = !{!14, !12, i64 133}
!44 = !{!45, !12, i64 56}
!45 = !{!"_ZTSN7doctest12TestCaseDataE", !15, i64 0, !16, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !12, i64 56, !12, i64 57, !12, i64 58, !12, i64 59, !12, i64 60, !16, i64 64, !46, i64 72}
!46 = !{!"double", !7, i64 0}
!47 = !{!14, !12, i64 122}
!48 = !{!45, !6, i64 40}
!49 = !{!45, !6, i64 32}
!50 = !{!34, !16, i64 4}
!51 = !{!14, !16, i64 96}
!52 = !{!14, !16, i64 92}
!53 = !{!7, !7, i64 0}
!54 = !{!34, !16, i64 8}
!55 = !{!14, !6, i64 32}
!56 = !{!57, !16, i64 16}
!57 = !{!"_ZTSN7doctest20CurrentTestCaseStatsE", !16, i64 0, !16, i64 4, !46, i64 8, !16, i64 16, !12, i64 20}
!58 = !{!57, !46, i64 8}
!59 = !{!60, !12, i64 4368}
!60 = !{!"_ZTSN7doctest6detail12ContextStateE", !14, i64 0, !34, i64 136, !57, i64 160, !61, i64 184, !61, i64 2232, !62, i64 4280, !66, i64 4304, !6, i64 4328, !70, i64 4336, !71, i64 4344, !12, i64 4368, !75, i64 4376, !75, i64 4400, !79, i64 4424, !37, i64 4480, !84, i64 4488}
!61 = !{!"_ZTSN7doctest6detail15MultiLaneAtomicIiEE", !7, i64 0}
!62 = !{!"_ZTSSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EE", !63, i64 0}
!63 = !{!"_ZTSSt12_Vector_baseISt6vectorIN7doctest6StringESaIS2_EESaIS4_EE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN7doctest6StringESaIS2_EESaIS4_EE12_Vector_implE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN7doctest6StringESaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!66 = !{!"_ZTSSt6vectorIPN7doctest9IReporterESaIS2_EE", !67, i64 0}
!67 = !{!"_ZTSSt12_Vector_baseIPN7doctest9IReporterESaIS2_EE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseIPN7doctest9IReporterESaIS2_EE12_Vector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIPN7doctest9IReporterESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!70 = !{!"_ZTSN7doctest6detail5TimerE", !37, i64 0}
!71 = !{!"_ZTSSt6vectorIN7doctest6StringESaIS1_EE", !72, i64 0}
!72 = !{!"_ZTSSt12_Vector_baseIN7doctest6StringESaIS1_EE", !73, i64 0}
!73 = !{!"_ZTSNSt12_Vector_baseIN7doctest6StringESaIS1_EE12_Vector_implE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIN7doctest6StringESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!75 = !{!"_ZTSSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE", !76, i64 0}
!76 = !{!"_ZTSSt12_Vector_baseIN7doctest16SubcaseSignatureESaIS1_EE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseIN7doctest16SubcaseSignatureESaIS1_EE12_Vector_implE", !78, i64 0}
!78 = !{!"_ZTSNSt12_Vector_baseIN7doctest16SubcaseSignatureESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!79 = !{!"_ZTSSt13unordered_setIySt4hashIyESt8equal_toIyESaIyEE", !80, i64 0}
!80 = !{!"_ZTSSt10_HashtableIyySaIyENSt8__detail9_IdentityESt8equal_toIyESt4hashIyENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !37, i64 8, !81, i64 16, !37, i64 24, !82, i64 32, !6, i64 48}
!81 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!82 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !83, i64 0, !37, i64 8}
!83 = !{!"float", !7, i64 0}
!84 = !{!"_ZTSSt6atomicIbE", !85, i64 0}
!85 = !{!"_ZTSSt13__atomic_baseIbE", !12, i64 0}
!86 = !{!60, !37, i64 4480}
!87 = !{!88, !6, i64 80}
!88 = !{!"_ZTSN7doctest6detail8TestCaseE", !45, i64 0, !6, i64 80, !15, i64 88, !16, i64 112, !15, i64 120}
!89 = !{!14, !16, i64 100}
!90 = !{!34, !16, i64 20}
!91 = !{!92, !12, i64 24}
!92 = !{!"_ZTSN7doctest17TestCaseExceptionE", !15, i64 0, !12, i64 24}
!93 = distinct !{!93, !40}
!94 = !{!95, !6, i64 0}
!95 = !{!"_ZTSN7doctest9QueryDataE", !6, i64 0, !6, i64 8, !16, i64 16}
!96 = !{!95, !6, i64 8}
!97 = !{!95, !16, i64 16}


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

%"class.doctest::DiscardOStream" = type { %"class.std::basic_ostream.base", %class.anon.57, %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%class.anon.57 = type { %"class.std::basic_streambuf", [1024 x i8] }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.doctest::String" = type { %union.anon.7 }
%union.anon.7 = type { %"struct.doctest::String::view", [8 x i8] }
%"struct.doctest::String::view" = type { ptr, i32, i32 }
%"class.std::basic_fstream" = type { %"class.std::basic_iostream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_iostream.base" = type { %"class.std::basic_istream.base", %"class.std::basic_ostream.base" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon.44 }
%union.anon.44 = type { i32 }
%class.anon.58 = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.68" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.doctest::QueryData" = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.std::vector.69" = type { %"struct.std::_Vector_base.70" }
%"struct.std::_Vector_base.70" = type { %"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl" }
%"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const doctest::detail::TestCase *, std::allocator<const doctest::detail::TestCase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"class.std::set.75" = type { %"class.std::_Rb_tree.76" }
%"class.std::_Rb_tree.76" = type { %"struct.std::_Rb_tree<doctest::String, doctest::String, std::_Identity<doctest::String>, std::less<doctest::String>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<doctest::String, doctest::String, std::_Identity<doctest::String>, std::less<doctest::String>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector.81" = type { %"struct.std::_Vector_base.82" }
%"struct.std::_Vector_base.82" = type { %"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl" }
%"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const doctest::TestCaseData *, std::allocator<const doctest::TestCaseData *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.74" = type { ptr }
%"struct.doctest::(anonymous namespace)::FatalConditionHandler" = type { i8 }
%"struct.doctest::TestCaseException" = type <{ %"class.doctest::String", i8, [7 x i8] }>

@_ZN7doctest18is_running_in_testE = external dso_local local_unnamed_addr global i8, align 1
@_ZN7doctest6detail4g_csE = external dso_local local_unnamed_addr global ptr, align 8
@_ZN7doctest6detail11g_no_colorsE = external dso_local thread_local local_unnamed_addr global i8, align 1
@_ZTIN7doctest6detail20TestFailureExceptionE = external dso_local constant { ptr, ptr }, align 8
@.str.71 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZN7doctestL10discardOutE = external hidden global %"class.doctest::DiscardOStream", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.205 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.206 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.207 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.208 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, i1 noundef zeroext) local_unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7doctest6detail15MultiLaneAtomicIiEcviEv(ptr noundef nonnull align 4 dereferenceable(2048)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt6atomicIbEaSEb(ptr noundef nonnull align 1 dereferenceable(1), i1 noundef zeroext) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef, ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) local_unnamed_addr #5

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest17TestCaseExceptionD2Ev(ptr noundef nonnull align 8 dereferenceable(25)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest6detail18getRegisteredTestsEv() local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN7doctest6StringESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_124translateActiveExceptionEv(ptr dead_on_unwind noalias writable sret(%"class.doctest::String") align 8) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7doctest6StringESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7doctest7Context3runEv(ptr noundef nonnull align 8 dereferenceable(8) %0) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.std::basic_fstream", align 8
  %4 = alloca %class.anon.58, align 8
  %5 = alloca %"class.doctest::String", align 8
  %6 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %7 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %10 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.68", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca ptr, align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %16 = alloca %"struct.doctest::QueryData", align 8
  %17 = alloca %"class.std::vector.69", align 8
  %18 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %19 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::set.75", align 8
  %22 = alloca %"class.std::vector.81", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %26 = alloca %"class.__gnu_cxx::__normal_iterator.74", align 8
  %27 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %29 = alloca ptr, align 8
  %30 = alloca %"class.doctest::String", align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"class.doctest::String", align 8
  %33 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %35 = alloca %"struct.doctest::(anonymous namespace)::FatalConditionHandler", align 1
  %36 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %38 = alloca %"struct.doctest::TestCaseException", align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %45 = alloca %"struct.doctest::QueryData", align 8
  %46 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %47 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #10
  %48 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  store ptr %48, ptr %2, align 8, !tbaa !5
  %49 = load ptr, ptr %0, align 8, !tbaa !9
  store ptr %49, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  store i8 1, ptr @_ZN7doctest18is_running_in_testE, align 1, !tbaa !11
  %50 = getelementptr inbounds i8, ptr %49, i64 119
  %51 = load i8, ptr %50, align 1, !tbaa !13, !range !17, !noundef !18
  %52 = tail call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @_ZN7doctest6detail11g_no_colorsE)
  store i8 %51, ptr %52, align 1, !tbaa !11
  tail call void @_ZN7doctest6detail12ContextState12resetRunDataEv(ptr noundef nonnull align 8 dereferenceable(4489) %49)
  call void @llvm.lifetime.start.p0(i64 528, ptr nonnull %3) #10
  call void @_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(264) %3)
  %53 = load ptr, ptr %0, align 8, !tbaa !9
  %54 = load ptr, ptr %53, align 8, !tbaa !19
  %55 = icmp eq ptr %54, null
  br i1 %55, label %56, label %74

56:                                               ; preds = %1
  %57 = getelementptr inbounds i8, ptr %53, i64 113
  %58 = load i8, ptr %57, align 1, !tbaa !20, !range !17, !noundef !18
  %59 = trunc nuw i8 %58 to i1
  br i1 %59, label %60, label %61

60:                                               ; preds = %56
  store ptr @_ZN7doctestL10discardOutE, ptr %53, align 8, !tbaa !19
  br label %74

61:                                               ; preds = %56
  %62 = getelementptr inbounds i8, ptr %53, i64 40
  %63 = call noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62)
  %.not = icmp eq i32 %63, 0
  %64 = load ptr, ptr %0, align 8, !tbaa !9
  br i1 %.not, label %73, label %65

65:                                               ; preds = %61
  %66 = getelementptr inbounds i8, ptr %64, i64 40
  %67 = call noundef ptr @_ZN7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %66)
  invoke void @_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(264) %3, ptr noundef %67, i32 noundef 16)
          to label %68 unwind label %71

68:                                               ; preds = %65
  %69 = getelementptr inbounds i8, ptr %3, i64 16
  %70 = load ptr, ptr %0, align 8, !tbaa !9
  store ptr %69, ptr %70, align 8, !tbaa !19
  br label %74

71:                                               ; preds = %74, %65
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %641

73:                                               ; preds = %61
  store ptr @_ZSt4cout, ptr %64, align 8, !tbaa !19
  br label %74

74:                                               ; preds = %60, %73, %68, %1
  invoke void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler19allocateAltStackMemEv()
          to label %75 unwind label %71

75:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #10
  store ptr %3, ptr %4, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %4, i64 8
  store ptr %2, ptr %76, align 8, !tbaa !5
  %77 = getelementptr inbounds i8, ptr %4, i64 16
  store ptr %0, ptr %77, align 8, !tbaa !21
  %78 = load ptr, ptr %0, align 8, !tbaa !9
  %79 = getelementptr inbounds i8, ptr %78, i64 4280
  %80 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %79, i64 noundef 8) #10
  %81 = call noundef zeroext i1 @_ZNKSt6vectorIN7doctest6StringESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %80) #10
  br i1 %81, label %82, label %93

82:                                               ; preds = %75
  %83 = load ptr, ptr %0, align 8, !tbaa !9
  %84 = getelementptr inbounds i8, ptr %83, i64 4280
  %85 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 8) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #10
  invoke void @_ZN7doctest6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull @.str.71)
          to label %86 unwind label %88

86:                                               ; preds = %82
  invoke void @_ZNSt6vectorIN7doctest6StringESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %85, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %87 unwind label %90

87:                                               ; preds = %86
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  br label %93

88:                                               ; preds = %82
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %92

90:                                               ; preds = %86
  %91 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  br label %92

92:                                               ; preds = %90, %88
  %.pn = phi { ptr, i32 } [ %91, %90 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  br label %640

93:                                               ; preds = %87, %75
  %94 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getReportersEv()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  %95 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %94) #10
  store ptr %95, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  %96 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %94) #10
  store ptr %96, ptr %7, align 8
  %97 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  br i1 %97, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %128, %93
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  %98 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getListenersEv()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #10
  %99 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %98) #10
  store ptr %99, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #10
  %100 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %98) #10
  store ptr %100, ptr %10, align 8
  %101 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  br i1 %101, label %.lr.ph161, label %._crit_edge162

.lr.ph:                                           ; preds = %93, %128
  %102 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  %103 = getelementptr inbounds i8, ptr %102, i64 8
  %104 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %103)
          to label %105 unwind label %124

105:                                              ; preds = %.lr.ph
  %106 = load ptr, ptr %0, align 8, !tbaa !9
  %107 = getelementptr inbounds i8, ptr %106, i64 4280
  %108 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef 8) #10
  %109 = load ptr, ptr %0, align 8, !tbaa !9
  %110 = getelementptr inbounds i8, ptr %109, i64 109
  %111 = load i8, ptr %110, align 1, !tbaa !23, !range !17, !noundef !18
  %112 = trunc nuw i8 %111 to i1
  %113 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %104, ptr noundef nonnull align 8 dereferenceable(24) %108, i1 noundef zeroext false, i1 noundef zeroext %112)
          to label %114 unwind label %124

114:                                              ; preds = %105
  br i1 %113, label %115, label %128

115:                                              ; preds = %114
  %116 = load ptr, ptr %0, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  %117 = getelementptr inbounds i8, ptr %102, i64 32
  %118 = load ptr, ptr %117, align 8, !tbaa !24
  %119 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %120 = invoke noundef ptr %118(ptr noundef nonnull align 8 dereferenceable(135) %119)
          to label %121 unwind label %126

121:                                              ; preds = %115
  %122 = getelementptr inbounds i8, ptr %116, i64 4304
  store ptr %120, ptr %8, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %122, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %123 unwind label %126

123:                                              ; preds = %121
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %128

124:                                              ; preds = %105, %.lr.ph
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %131

126:                                              ; preds = %121, %115
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %131

128:                                              ; preds = %123, %114
  %129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  %130 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  br i1 %130, label %.lr.ph, label %._crit_edge

131:                                              ; preds = %126, %124
  %.pn143 = phi { ptr, i32 } [ %127, %126 ], [ %125, %124 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  br label %640

._crit_edge162:                                   ; preds = %147, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  %132 = load ptr, ptr %0, align 8, !tbaa !9
  %133 = getelementptr inbounds i8, ptr %132, i64 116
  %134 = load i8, ptr %133, align 4, !tbaa !27, !range !17, !noundef !18
  %135 = trunc nuw i8 %134 to i1
  br i1 %135, label %164, label %152

.lr.ph161:                                        ; preds = %._crit_edge, %147
  %136 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #10
  %137 = load ptr, ptr %0, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %138 = getelementptr inbounds i8, ptr %137, i64 4304
  %139 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %138) #10
  store ptr %139, ptr %12, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  %140 = getelementptr inbounds i8, ptr %136, i64 32
  %141 = load ptr, ptr %140, align 8, !tbaa !24
  %142 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %143 = invoke noundef ptr %141(ptr noundef nonnull align 8 dereferenceable(135) %142)
          to label %144 unwind label %150

144:                                              ; preds = %.lr.ph161
  store ptr %143, ptr %13, align 8, !tbaa !5
  %145 = load ptr, ptr %11, align 8
  %146 = invoke ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %138, ptr %145, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %147 unwind label %150

147:                                              ; preds = %144
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #10
  %149 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  br i1 %149, label %.lr.ph161, label %._crit_edge162

150:                                              ; preds = %144, %.lr.ph161
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  br label %640

152:                                              ; preds = %._crit_edge162
  %153 = getelementptr inbounds i8, ptr %132, i64 130
  %154 = load i8, ptr %153, align 2, !tbaa !28, !range !17, !noundef !18
  %155 = trunc nuw i8 %154 to i1
  br i1 %155, label %164, label %156

156:                                              ; preds = %152
  %157 = getelementptr inbounds i8, ptr %132, i64 129
  %158 = load i8, ptr %157, align 1, !tbaa !29, !range !17, !noundef !18
  %159 = trunc nuw i8 %158 to i1
  br i1 %159, label %164, label %160

160:                                              ; preds = %156
  %161 = getelementptr inbounds i8, ptr %132, i64 134
  %162 = load i8, ptr %161, align 2, !tbaa !30, !range !17, !noundef !18
  %163 = trunc nuw i8 %162 to i1
  br i1 %163, label %164, label %182

164:                                              ; preds = %160, %156, %152, %._crit_edge162
  %165 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %167 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %166) #10
  store ptr %167, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %168 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %166) #10
  store ptr %168, ptr %15, align 8
  %169 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  br i1 %169, label %.lr.ph201, label %._crit_edge202

._crit_edge202:                                   ; preds = %175, %164
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  %170 = invoke noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %639 unwind label %180

.lr.ph201:                                        ; preds = %164, %175
  %171 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  %172 = load ptr, ptr %171, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %16, i8 0, i64 24, i1 false)
  call void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20) %16) #10
  %173 = load ptr, ptr %172, align 8, !tbaa !31
  %174 = load ptr, ptr %173, align 8
  invoke void %174(ptr noundef nonnull align 8 dereferenceable(8) %172, ptr noundef nonnull align 8 dereferenceable(20) %16)
          to label %175 unwind label %178

175:                                              ; preds = %.lr.ph201
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  %177 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  br i1 %177, label %.lr.ph201, label %._crit_edge202

178:                                              ; preds = %.lr.ph201
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %640

180:                                              ; preds = %._crit_edge202
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %640

182:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #10
  call void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  %183 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest6detail18getRegisteredTestsEv()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  %184 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %183) #10
  store ptr %184, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #10
  %185 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %183) #10
  store ptr %185, ptr %19, align 8
  %186 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEES5_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #10
  br i1 %186, label %.lr.ph164, label %._crit_edge165

._crit_edge165:                                   ; preds = %193, %182
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  %187 = call noundef i64 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  %188 = trunc i64 %187 to i32
  %189 = load ptr, ptr %0, align 8, !tbaa !9
  %190 = getelementptr inbounds i8, ptr %189, i64 136
  store i32 %188, ptr %190, align 8, !tbaa !33
  %191 = call noundef zeroext i1 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  br i1 %191, label %.loopexit159, label %198

.lr.ph164:                                        ; preds = %182, %193
  %192 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  store ptr %192, ptr %20, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %193 unwind label %196

193:                                              ; preds = %.lr.ph164
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  %194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  %195 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEES5_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #10
  br i1 %195, label %.lr.ph164, label %._crit_edge165

196:                                              ; preds = %.lr.ph164
  %197 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  br label %638

198:                                              ; preds = %._crit_edge165
  %199 = load ptr, ptr %0, align 8, !tbaa !9
  %200 = getelementptr inbounds i8, ptr %199, i64 64
  %201 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %200, ptr noundef nonnull @.str.93, i1 noundef zeroext true)
          to label %202 unwind label %204

202:                                              ; preds = %198
  %203 = icmp eq i32 %201, 0
  br i1 %203, label %.invoke, label %206

204:                                              ; preds = %.invoke, %241, %221, %212, %206, %198
  %205 = landingpad { ptr, i32 }
          cleanup
  br label %638

206:                                              ; preds = %202
  %207 = load ptr, ptr %0, align 8, !tbaa !9
  %208 = getelementptr inbounds i8, ptr %207, i64 64
  %209 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %208, ptr noundef nonnull @.str.205, i1 noundef zeroext true)
          to label %210 unwind label %204

210:                                              ; preds = %206
  %211 = icmp eq i32 %209, 0
  br i1 %211, label %.invoke, label %212

212:                                              ; preds = %210
  %213 = load ptr, ptr %0, align 8, !tbaa !9
  %214 = getelementptr inbounds i8, ptr %213, i64 64
  %215 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %214, ptr noundef nonnull @.str.206, i1 noundef zeroext true)
          to label %216 unwind label %204

216:                                              ; preds = %212
  %217 = icmp eq i32 %215, 0
  br i1 %217, label %.invoke, label %221

.invoke:                                          ; preds = %216, %210, %202
  %218 = phi ptr [ @_ZN7doctest12_GLOBAL__N_119fileOrderComparatorEPKNS_6detail8TestCaseES4_, %202 ], [ @_ZN7doctest12_GLOBAL__N_120suiteOrderComparatorEPKNS_6detail8TestCaseES4_, %210 ], [ @_ZN7doctest12_GLOBAL__N_119nameOrderComparatorEPKNS_6detail8TestCaseES4_, %216 ]
  %219 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  %220 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS6_SaIS6_EEEEPFbS6_S6_EEvT_SE_T0_(ptr %219, ptr %220, ptr noundef nonnull %218)
          to label %.loopexit159 unwind label %204

221:                                              ; preds = %216
  %222 = load ptr, ptr %0, align 8, !tbaa !9
  %223 = getelementptr inbounds i8, ptr %222, i64 64
  %224 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %223, ptr noundef nonnull @.str.207, i1 noundef zeroext true)
          to label %225 unwind label %204

225:                                              ; preds = %221
  %226 = icmp eq i32 %224, 0
  %227 = load ptr, ptr %0, align 8, !tbaa !9
  br i1 %226, label %228, label %241

228:                                              ; preds = %225
  %229 = getelementptr inbounds i8, ptr %227, i64 88
  %230 = load i32, ptr %229, align 8, !tbaa !35
  call void @srand(i32 noundef %230) #10
  %231 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #10
  %232 = call noundef i64 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  %.0109166 = add i64 %232, -1
  %.not124167 = icmp eq i64 %.0109166, 0
  br i1 %.not124167, label %.loopexit159, label %.lr.ph171

.lr.ph171:                                        ; preds = %228, %.lr.ph171
  %.0109169 = phi i64 [ %.0109, %.lr.ph171 ], [ %.0109166, %228 ]
  %.0109.in168 = phi i64 [ %.0109169, %.lr.ph171 ], [ %232, %228 ]
  %233 = call i32 @rand() #10
  %234 = sext i32 %233 to i64
  %235 = urem i64 %234, %.0109.in168
  %236 = getelementptr inbounds ptr, ptr %231, i64 %.0109169
  %237 = load ptr, ptr %236, align 8, !tbaa !5
  %sext = shl i64 %235, 32
  %238 = ashr exact i64 %sext, 29
  %239 = getelementptr inbounds i8, ptr %231, i64 %238
  %240 = load ptr, ptr %239, align 8, !tbaa !5
  store ptr %240, ptr %236, align 8, !tbaa !5
  store ptr %237, ptr %239, align 8, !tbaa !5
  %.0109 = add i64 %.0109169, -1
  %.not124 = icmp eq i64 %.0109, 0
  br i1 %.not124, label %.loopexit159, label %.lr.ph171, !llvm.loop !36

241:                                              ; preds = %225
  %242 = getelementptr inbounds i8, ptr %227, i64 64
  %243 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %242, ptr noundef nonnull @.str.208, i1 noundef zeroext true)
          to label %.loopexit159 unwind label %204

.loopexit159:                                     ; preds = %.lr.ph171, %.invoke, %228, %241, %._crit_edge165
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %21) #10
  call void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  %244 = load ptr, ptr %0, align 8, !tbaa !9
  %245 = getelementptr inbounds i8, ptr %244, i64 131
  %246 = load i8, ptr %245, align 1, !tbaa !38, !range !17, !noundef !18
  %247 = trunc nuw i8 %246 to i1
  br i1 %247, label %.thread, label %248

248:                                              ; preds = %.loopexit159
  %249 = getelementptr inbounds i8, ptr %244, i64 132
  %250 = load i8, ptr %249, align 4, !tbaa !39, !range !17, !noundef !18
  %251 = trunc nuw i8 %250 to i1
  br i1 %251, label %.thread, label %252

.thread:                                          ; preds = %248, %.loopexit159
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #10
  call void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  br label %272

252:                                              ; preds = %248
  %253 = getelementptr inbounds i8, ptr %244, i64 133
  %254 = load i8, ptr %253, align 1, !tbaa !40, !range !17, !noundef !18
  %255 = trunc nuw i8 %254 to i1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #10
  call void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  br i1 %255, label %272, label %256

256:                                              ; preds = %252
  %257 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %258 = getelementptr inbounds i8, ptr %257, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #10
  %259 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %258) #10
  store ptr %259, ptr %23, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #10
  %260 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %258) #10
  store ptr %260, ptr %24, align 8
  %261 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  br i1 %261, label %.lr.ph173, label %._crit_edge174

._crit_edge174:                                   ; preds = %267, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  br label %272

.lr.ph173:                                        ; preds = %256, %267
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  %263 = load ptr, ptr %262, align 8, !tbaa !5
  %264 = load ptr, ptr %263, align 8, !tbaa !31
  %265 = getelementptr inbounds i8, ptr %264, i64 8
  %266 = load ptr, ptr %265, align 8
  invoke void %266(ptr noundef nonnull align 8 dereferenceable(8) %263)
          to label %267 unwind label %270

267:                                              ; preds = %.lr.ph173
  %268 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  %269 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  br i1 %269, label %.lr.ph173, label %._crit_edge174

270:                                              ; preds = %.lr.ph173
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  br label %637

272:                                              ; preds = %.thread, %._crit_edge174, %252
  %273 = phi i1 [ true, %.thread ], [ false, %._crit_edge174 ], [ true, %252 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #10
  %274 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  store ptr %274, ptr %25, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  %275 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  store ptr %275, ptr %26, align 8
  %276 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  br i1 %276, label %.lr.ph191, label %._crit_edge192

.lr.ph191:                                        ; preds = %272
  %277 = getelementptr inbounds i8, ptr %38, i64 24
  br label %278

278:                                              ; preds = %.lr.ph191, %587
  %279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #10
  %280 = load ptr, ptr %279, align 8, !tbaa !5
  %281 = getelementptr inbounds i8, ptr %280, i64 56
  %282 = load i8, ptr %281, align 8, !tbaa !41, !range !17, !noundef !18
  %283 = trunc nuw i8 %282 to i1
  br i1 %283, label %284, label %288

284:                                              ; preds = %278
  %285 = load ptr, ptr %0, align 8, !tbaa !9
  %286 = getelementptr inbounds i8, ptr %285, i64 122
  %287 = load i8, ptr %286, align 2, !tbaa !44, !range !17, !noundef !18
  %not. = xor i8 %287, 1
  br label %288

288:                                              ; preds = %284, %278
  %.0110 = phi i8 [ 0, %278 ], [ %not., %284 ]
  %289 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %280)
          to label %290 unwind label %302

290:                                              ; preds = %288
  %291 = load ptr, ptr %0, align 8, !tbaa !9
  %292 = getelementptr inbounds i8, ptr %291, i64 4280
  %293 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %292, i64 noundef 0) #10
  %294 = load ptr, ptr %0, align 8, !tbaa !9
  %295 = getelementptr inbounds i8, ptr %294, i64 109
  %296 = load i8, ptr %295, align 1, !tbaa !23, !range !17, !noundef !18
  %297 = trunc nuw i8 %296 to i1
  %298 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %289, ptr noundef nonnull align 8 dereferenceable(24) %293, i1 noundef zeroext true, i1 noundef zeroext %297)
          to label %299 unwind label %302

299:                                              ; preds = %290
  %300 = trunc nuw i8 %.0110 to i1
  %301 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %280)
          to label %304 unwind label %302

302:                                              ; preds = %345, %334, %324, %313, %304, %299, %290, %288
  %303 = landingpad { ptr, i32 }
          cleanup
  br label %590

304:                                              ; preds = %299
  %305 = load ptr, ptr %0, align 8, !tbaa !9
  %306 = getelementptr inbounds i8, ptr %305, i64 4280
  %307 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %306, i64 noundef 1) #10
  %308 = load ptr, ptr %0, align 8, !tbaa !9
  %309 = getelementptr inbounds i8, ptr %308, i64 109
  %310 = load i8, ptr %309, align 1, !tbaa !23, !range !17, !noundef !18
  %311 = trunc nuw i8 %310 to i1
  %312 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %301, ptr noundef nonnull align 8 dereferenceable(24) %307, i1 noundef zeroext false, i1 noundef zeroext %311)
          to label %313 unwind label %302

313:                                              ; preds = %304
  %314 = getelementptr inbounds i8, ptr %280, i64 40
  %315 = load ptr, ptr %314, align 8, !tbaa !45
  %316 = load ptr, ptr %0, align 8, !tbaa !9
  %317 = getelementptr inbounds i8, ptr %316, i64 4280
  %318 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %317, i64 noundef 2) #10
  %319 = load ptr, ptr %0, align 8, !tbaa !9
  %320 = getelementptr inbounds i8, ptr %319, i64 109
  %321 = load i8, ptr %320, align 1, !tbaa !23, !range !17, !noundef !18
  %322 = trunc nuw i8 %321 to i1
  %323 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %315, ptr noundef nonnull align 8 dereferenceable(24) %318, i1 noundef zeroext true, i1 noundef zeroext %322)
          to label %324 unwind label %302

324:                                              ; preds = %313
  %325 = load ptr, ptr %314, align 8, !tbaa !45
  %326 = load ptr, ptr %0, align 8, !tbaa !9
  %327 = getelementptr inbounds i8, ptr %326, i64 4280
  %328 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %327, i64 noundef 3) #10
  %329 = load ptr, ptr %0, align 8, !tbaa !9
  %330 = getelementptr inbounds i8, ptr %329, i64 109
  %331 = load i8, ptr %330, align 1, !tbaa !23, !range !17, !noundef !18
  %332 = trunc nuw i8 %331 to i1
  %333 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %325, ptr noundef nonnull align 8 dereferenceable(24) %328, i1 noundef zeroext false, i1 noundef zeroext %332)
          to label %334 unwind label %302

334:                                              ; preds = %324
  %335 = getelementptr inbounds i8, ptr %280, i64 32
  %336 = load ptr, ptr %335, align 8, !tbaa !46
  %337 = load ptr, ptr %0, align 8, !tbaa !9
  %338 = getelementptr inbounds i8, ptr %337, i64 4280
  %339 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %338, i64 noundef 4) #10
  %340 = load ptr, ptr %0, align 8, !tbaa !9
  %341 = getelementptr inbounds i8, ptr %340, i64 109
  %342 = load i8, ptr %341, align 1, !tbaa !23, !range !17, !noundef !18
  %343 = trunc nuw i8 %342 to i1
  %344 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %336, ptr noundef nonnull align 8 dereferenceable(24) %339, i1 noundef zeroext true, i1 noundef zeroext %343)
          to label %345 unwind label %302

345:                                              ; preds = %334
  %346 = load ptr, ptr %335, align 8, !tbaa !46
  %347 = load ptr, ptr %0, align 8, !tbaa !9
  %348 = getelementptr inbounds i8, ptr %347, i64 4280
  %349 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %348, i64 noundef 5) #10
  %350 = load ptr, ptr %0, align 8, !tbaa !9
  %351 = getelementptr inbounds i8, ptr %350, i64 109
  %352 = load i8, ptr %351, align 1, !tbaa !23, !range !17, !noundef !18
  %353 = trunc nuw i8 %352 to i1
  %354 = invoke noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_110matchesAnyEPKcRKSt6vectorINS_6StringESaIS4_EEbb(ptr noundef %346, ptr noundef nonnull align 8 dereferenceable(24) %349, i1 noundef zeroext false, i1 noundef zeroext %353)
          to label %355 unwind label %302

355:                                              ; preds = %345
  %356 = and i1 %298, %323
  %357 = xor i1 %356, true
  %358 = or i1 %312, %357
  %359 = or i1 %333, %358
  %not.210 = xor i1 %344, true
  %360 = or i1 %359, %not.210
  %361 = or i1 %354, %360
  %362 = select i1 %361, i1 true, i1 %300
  %.pre = load ptr, ptr %0, align 8, !tbaa !9
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.pre, i64 140
  %.pre204 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !47
  br i1 %362, label %._crit_edge203, label %363

363:                                              ; preds = %355
  %364 = add i32 %.pre204, 1
  store i32 %364, ptr %.phi.trans.insert, align 4, !tbaa !47
  br label %._crit_edge203

._crit_edge203:                                   ; preds = %355, %363
  %365 = phi i32 [ %364, %363 ], [ %.pre204, %355 ]
  %366 = getelementptr inbounds i8, ptr %.pre, i64 96
  %367 = load i32, ptr %366, align 8, !tbaa !48
  %368 = icmp ult i32 %367, %365
  %369 = getelementptr inbounds i8, ptr %.pre, i64 92
  %370 = load i32, ptr %369, align 4, !tbaa !49
  %.not125 = icmp ule i32 %370, %367
  %or.cond.not213 = select i1 %368, i1 %.not125, i1 false
  %371 = icmp ugt i32 %370, %365
  %or.cond211 = select i1 %or.cond.not213, i1 true, i1 %371
  %brmerge = or i1 %or.cond211, %362
  br i1 %brmerge, label %.thread154, label %388

.thread154:                                       ; preds = %._crit_edge203
  br i1 %273, label %587, label %372

372:                                              ; preds = %.thread154
  %373 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %374 = getelementptr inbounds i8, ptr %373, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #10
  %375 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #10
  store ptr %375, ptr %27, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #10
  %376 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #10
  store ptr %376, ptr %28, align 8
  %377 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  br i1 %377, label %.lr.ph188, label %._crit_edge189

._crit_edge189:                                   ; preds = %383, %372
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #10
  br label %587

.lr.ph188:                                        ; preds = %372, %383
  %378 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  %379 = load ptr, ptr %378, align 8, !tbaa !5
  %380 = load ptr, ptr %379, align 8, !tbaa !31
  %381 = getelementptr inbounds i8, ptr %380, i64 88
  %382 = load ptr, ptr %381, align 8
  invoke void %382(ptr noundef nonnull align 8 dereferenceable(8) %379, ptr noundef nonnull align 8 dereferenceable(80) %280)
          to label %383 unwind label %386

383:                                              ; preds = %.lr.ph188
  %384 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  %385 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  br i1 %385, label %.lr.ph188, label %._crit_edge189

386:                                              ; preds = %.lr.ph188
  %387 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #10
  br label %590

388:                                              ; preds = %._crit_edge203
  %389 = getelementptr inbounds i8, ptr %.pre, i64 131
  %390 = load i8, ptr %389, align 1, !tbaa !38, !range !17, !noundef !18
  %391 = trunc nuw i8 %390 to i1
  br i1 %391, label %587, label %392

392:                                              ; preds = %388
  %393 = getelementptr inbounds i8, ptr %.pre, i64 132
  %394 = load i8, ptr %393, align 4, !tbaa !39, !range !17, !noundef !18
  %395 = trunc nuw i8 %394 to i1
  br i1 %395, label %396, label %400

396:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #10
  store ptr %280, ptr %29, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %397 unwind label %398

397:                                              ; preds = %396
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #10
  br label %587

398:                                              ; preds = %396
  %399 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #10
  br label %590

400:                                              ; preds = %392
  %401 = getelementptr inbounds i8, ptr %.pre, i64 133
  %402 = load i8, ptr %401, align 1, !tbaa !40, !range !17, !noundef !18
  %403 = trunc nuw i8 %402 to i1
  br i1 %403, label %404, label %435

404:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #10
  %405 = load ptr, ptr %314, align 8, !tbaa !45
  invoke void @_ZN7doctest6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(24) %30, ptr noundef %405)
          to label %406 unwind label %423

406:                                              ; preds = %404
  %407 = invoke noundef i64 @_ZNKSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE5countERKS1_(ptr noundef nonnull align 8 dereferenceable(48) %21, ptr noundef nonnull align 8 dereferenceable(24) %30)
          to label %408 unwind label %425

408:                                              ; preds = %406
  %409 = icmp eq i64 %407, 0
  br i1 %409, label %410, label %.critedge

410:                                              ; preds = %408
  %411 = load ptr, ptr %314, align 8, !tbaa !45
  %412 = load i8, ptr %411, align 1, !tbaa !50
  %.not134 = icmp eq i8 %412, 0
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #10
  br i1 %.not134, label %587, label %413

413:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #10
  store ptr %280, ptr %31, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %414 unwind label %428

414:                                              ; preds = %413
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %32) #10
  %415 = load ptr, ptr %314, align 8, !tbaa !45
  invoke void @_ZN7doctest6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef %415)
          to label %416 unwind label %430

416:                                              ; preds = %414
  %417 = invoke { ptr, i8 } @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48) %21, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %418 unwind label %432

418:                                              ; preds = %416
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #10
  %419 = load ptr, ptr %0, align 8, !tbaa !9
  %420 = getelementptr inbounds i8, ptr %419, i64 144
  %421 = load i32, ptr %420, align 8, !tbaa !51
  %422 = add i32 %421, 1
  store i32 %422, ptr %420, align 8, !tbaa !51
  br label %587

423:                                              ; preds = %404
  %424 = landingpad { ptr, i32 }
          cleanup
  br label %427

425:                                              ; preds = %406
  %426 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #10
  br label %427

427:                                              ; preds = %425, %423
  %.pn132 = phi { ptr, i32 } [ %426, %425 ], [ %424, %423 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #10
  br label %590

428:                                              ; preds = %413
  %429 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #10
  br label %590

430:                                              ; preds = %414
  %431 = landingpad { ptr, i32 }
          cleanup
  br label %434

432:                                              ; preds = %416
  %433 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #10
  br label %434

434:                                              ; preds = %432, %430
  %.pn135 = phi { ptr, i32 } [ %433, %432 ], [ %431, %430 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #10
  br label %590

.critedge:                                        ; preds = %408
  call void @_ZN7doctest6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #10
  br label %587

435:                                              ; preds = %400
  %436 = getelementptr inbounds i8, ptr %.pre, i64 32
  store ptr %280, ptr %436, align 8, !tbaa !52
  %437 = getelementptr inbounds i8, ptr %.pre, i64 176
  store i32 0, ptr %437, align 8, !tbaa !53
  %438 = getelementptr inbounds i8, ptr %.pre, i64 168
  store double 0.000000e+00, ptr %438, align 8, !tbaa !55
  %439 = getelementptr inbounds i8, ptr %.pre, i64 2232
  %440 = call noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048) %439, i32 noundef 0) #10
  %441 = load ptr, ptr %0, align 8, !tbaa !9
  %442 = getelementptr inbounds i8, ptr %441, i64 184
  %443 = call noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048) %442, i32 noundef 0) #10
  %444 = load ptr, ptr %0, align 8, !tbaa !9
  %445 = getelementptr inbounds i8, ptr %444, i64 4424
  call void @_ZNSt13unordered_setIySt4hashIyESt8equal_toIyESaIyEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %445) #10
  %446 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %446, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #10
  %448 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %447) #10
  store ptr %448, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #10
  %449 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %447) #10
  store ptr %449, ptr %34, align 8
  %450 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  br i1 %450, label %.lr.ph176, label %._crit_edge177

._crit_edge177:                                   ; preds = %459, %435
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  %451 = load ptr, ptr %0, align 8, !tbaa !9
  %452 = getelementptr inbounds i8, ptr %451, i64 4336
  call void @_ZN7doctest6detail5Timer5startEv(ptr noundef nonnull align 8 dereferenceable(8) %452)
  %453 = getelementptr inbounds i8, ptr %280, i64 80
  br label %464

.lr.ph176:                                        ; preds = %435, %459
  %454 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  %455 = load ptr, ptr %454, align 8, !tbaa !5
  %456 = load ptr, ptr %455, align 8, !tbaa !31
  %457 = getelementptr inbounds i8, ptr %456, i64 24
  %458 = load ptr, ptr %457, align 8
  invoke void %458(ptr noundef nonnull align 8 dereferenceable(8) %455, ptr noundef nonnull align 8 dereferenceable(80) %280)
          to label %459 unwind label %462

459:                                              ; preds = %.lr.ph176
  %460 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  %461 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  br i1 %461, label %.lr.ph176, label %._crit_edge177

462:                                              ; preds = %.lr.ph176
  %463 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  br label %590

464:                                              ; preds = %554, %._crit_edge177
  %.0118 = phi i8 [ 1, %._crit_edge177 ], [ %spec.select153, %554 ]
  %465 = load ptr, ptr %0, align 8, !tbaa !9
  %466 = getelementptr inbounds i8, ptr %465, i64 4368
  store i8 0, ptr %466, align 8, !tbaa !56
  %467 = getelementptr inbounds i8, ptr %465, i64 4376
  call void @_ZNSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %467) #10
  %468 = load ptr, ptr %0, align 8, !tbaa !9
  %469 = getelementptr inbounds i8, ptr %468, i64 4480
  store i64 0, ptr %469, align 8, !tbaa !84
  %470 = getelementptr inbounds i8, ptr %468, i64 4488
  %471 = call noundef zeroext i1 @_ZNSt6atomicIbEaSEb(ptr noundef nonnull align 1 dereferenceable(1) %470, i1 noundef zeroext true) #10
  %472 = load ptr, ptr %0, align 8, !tbaa !9
  %473 = getelementptr inbounds i8, ptr %472, i64 4344
  call void @_ZNSt6vectorIN7doctest6StringESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %473) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %35) #10
  call void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35)
  %474 = load ptr, ptr %453, align 8, !tbaa !85
  invoke void %474()
          to label %475 unwind label %476

475:                                              ; preds = %464
  call void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler5resetEv()
  call void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %35) #10
  br label %488

476:                                              ; preds = %464
  %477 = landingpad { ptr, i32 }
          catch ptr @_ZTIN7doctest6detail20TestFailureExceptionE
          catch ptr null
  %478 = extractvalue { ptr, i32 } %477, 0
  %479 = extractvalue { ptr, i32 } %477, 1
  call void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %35) #10
  %480 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIN7doctest6detail20TestFailureExceptionE) #10
  %481 = icmp eq i32 %479, %480
  %482 = call ptr @__cxa_begin_catch(ptr %478) #10
  br i1 %481, label %483, label %506

483:                                              ; preds = %476
  %484 = load ptr, ptr %0, align 8, !tbaa !9
  %485 = getelementptr inbounds i8, ptr %484, i64 176
  %486 = load i32, ptr %485, align 8, !tbaa !53
  %487 = or i32 %486, 1
  store i32 %487, ptr %485, align 8, !tbaa !53
  invoke void @__cxa_end_catch()
          to label %488 unwind label %530

488:                                              ; preds = %483, %._crit_edge180, %475
  %489 = load ptr, ptr %0, align 8, !tbaa !9
  %490 = getelementptr inbounds i8, ptr %489, i64 100
  %491 = load i32, ptr %490, align 4, !tbaa !87
  %492 = icmp sgt i32 %491, 0
  br i1 %492, label %493, label %532

493:                                              ; preds = %488
  %494 = getelementptr inbounds i8, ptr %489, i64 156
  %495 = load i32, ptr %494, align 4, !tbaa !88
  %496 = getelementptr inbounds i8, ptr %489, i64 2232
  %497 = call noundef i32 @_ZNK7doctest6detail15MultiLaneAtomicIiEcviEv(ptr noundef nonnull align 4 dereferenceable(2048) %496) #10
  %498 = add nsw i32 %497, %495
  %499 = load ptr, ptr %0, align 8, !tbaa !9
  %500 = getelementptr inbounds i8, ptr %499, i64 100
  %501 = load i32, ptr %500, align 4, !tbaa !87
  %.not128 = icmp slt i32 %498, %501
  br i1 %.not128, label %532, label %502

502:                                              ; preds = %493
  %503 = getelementptr inbounds i8, ptr %499, i64 176
  %504 = load i32, ptr %503, align 8, !tbaa !53
  %505 = or i32 %504, 8
  store i32 %505, ptr %503, align 8, !tbaa !53
  br label %532

506:                                              ; preds = %476
  %507 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %508 = getelementptr inbounds i8, ptr %507, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #10
  %509 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %508) #10
  store ptr %509, ptr %36, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #10
  %510 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %508) #10
  store ptr %510, ptr %37, align 8
  %511 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  br i1 %511, label %.lr.ph179, label %._crit_edge180

._crit_edge180:                                   ; preds = %522, %506
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #10
  %512 = load ptr, ptr %0, align 8, !tbaa !9
  %513 = getelementptr inbounds i8, ptr %512, i64 176
  %514 = load i32, ptr %513, align 8, !tbaa !53
  %515 = or i32 %514, 2
  store i32 %515, ptr %513, align 8, !tbaa !53
  invoke void @__cxa_end_catch()
          to label %488 unwind label %.loopexit

.lr.ph179:                                        ; preds = %506, %522
  %516 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  %517 = load ptr, ptr %516, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #10
  invoke void @_ZN7doctest12_GLOBAL__N_124translateActiveExceptionEv(ptr dead_on_unwind nonnull writable sret(%"class.doctest::String") align 8 %38)
          to label %518 unwind label %525

518:                                              ; preds = %.lr.ph179
  store i8 0, ptr %277, align 8, !tbaa !89
  %519 = load ptr, ptr %517, align 8, !tbaa !31
  %520 = getelementptr inbounds i8, ptr %519, i64 48
  %521 = load ptr, ptr %520, align 8
  invoke void %521(ptr noundef nonnull align 8 dereferenceable(8) %517, ptr noundef nonnull align 8 dereferenceable(25) %38)
          to label %522 unwind label %527

522:                                              ; preds = %518
  call void @_ZN7doctest17TestCaseExceptionD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %38) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #10
  %523 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  %524 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  br i1 %524, label %.lr.ph179, label %._crit_edge180

525:                                              ; preds = %.lr.ph179
  %526 = landingpad { ptr, i32 }
          cleanup
  br label %529

527:                                              ; preds = %518
  %528 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7doctest17TestCaseExceptionD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %38) #10
  br label %529

529:                                              ; preds = %527, %525
  %.pn126 = phi { ptr, i32 } [ %528, %527 ], [ %526, %525 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #10
  invoke void @__cxa_end_catch()
          to label %590 unwind label %642

.loopexit:                                        ; preds = %._crit_edge180
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %590

.loopexit.split-lp:                               ; preds = %559
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %590

530:                                              ; preds = %483
  %531 = landingpad { ptr, i32 }
          cleanup
  br label %590

532:                                              ; preds = %502, %493, %488
  %533 = phi ptr [ %499, %502 ], [ %499, %493 ], [ %489, %488 ]
  %.1119 = phi i8 [ 0, %502 ], [ %.0118, %493 ], [ %.0118, %488 ]
  %534 = getelementptr inbounds i8, ptr %533, i64 4400
  %535 = call noundef zeroext i1 @_ZNKSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %534) #10
  br i1 %535, label %554, label %536

536:                                              ; preds = %532
  %537 = trunc nuw i8 %.1119 to i1
  br i1 %537, label %538, label %554

538:                                              ; preds = %536
  %539 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %540 = getelementptr inbounds i8, ptr %539, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #10
  %541 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %540) #10
  store ptr %541, ptr %39, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #10
  %542 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %540) #10
  store ptr %542, ptr %40, align 8
  %543 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %40) #10
  br i1 %543, label %.lr.ph182, label %._crit_edge183

._crit_edge183:                                   ; preds = %549, %538
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #10
  br label %554

.lr.ph182:                                        ; preds = %538, %549
  %544 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %39) #10
  %545 = load ptr, ptr %544, align 8, !tbaa !5
  %546 = load ptr, ptr %545, align 8, !tbaa !31
  %547 = getelementptr inbounds i8, ptr %546, i64 32
  %548 = load ptr, ptr %547, align 8
  invoke void %548(ptr noundef nonnull align 8 dereferenceable(8) %545, ptr noundef nonnull align 8 dereferenceable(80) %280)
          to label %549 unwind label %552

549:                                              ; preds = %.lr.ph182
  %550 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %39) #10
  %551 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %40) #10
  br i1 %551, label %.lr.ph182, label %._crit_edge183

552:                                              ; preds = %.lr.ph182
  %553 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #10
  br label %590

554:                                              ; preds = %._crit_edge183, %536, %532
  %555 = load ptr, ptr %0, align 8, !tbaa !9
  %556 = getelementptr inbounds i8, ptr %555, i64 4400
  %557 = call noundef zeroext i1 @_ZNKSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %556) #10
  %spec.select153 = select i1 %557, i8 0, i8 %.1119
  %558 = trunc nuw i8 %spec.select153 to i1
  br i1 %558, label %464, label %559, !llvm.loop !91

559:                                              ; preds = %554
  %560 = load ptr, ptr %0, align 8, !tbaa !9
  invoke void @_ZN7doctest6detail12ContextState20finalizeTestCaseDataEv(ptr noundef nonnull align 8 dereferenceable(4489) %560)
          to label %561 unwind label %.loopexit.split-lp

561:                                              ; preds = %559
  %562 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %563 = getelementptr inbounds i8, ptr %562, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #10
  %564 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %563) #10
  store ptr %564, ptr %41, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #10
  %565 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %563) #10
  store ptr %565, ptr %42, align 8
  %566 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #10
  br i1 %566, label %.lr.ph185, label %._crit_edge186

._crit_edge186:                                   ; preds = %579, %561
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #10
  %567 = load ptr, ptr %0, align 8, !tbaa !9
  %568 = getelementptr inbounds i8, ptr %567, i64 32
  store ptr null, ptr %568, align 8, !tbaa !52
  %569 = getelementptr inbounds i8, ptr %567, i64 100
  %570 = load i32, ptr %569, align 4, !tbaa !87
  %571 = icmp sgt i32 %570, 0
  br i1 %571, label %584, label %587

.lr.ph185:                                        ; preds = %561, %579
  %572 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  %573 = load ptr, ptr %572, align 8, !tbaa !5
  %574 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %575 = getelementptr inbounds i8, ptr %574, i64 160
  %576 = load ptr, ptr %573, align 8, !tbaa !31
  %577 = getelementptr inbounds i8, ptr %576, i64 40
  %578 = load ptr, ptr %577, align 8
  invoke void %578(ptr noundef nonnull align 8 dereferenceable(8) %573, ptr noundef nonnull align 8 dereferenceable(24) %575)
          to label %579 unwind label %582

579:                                              ; preds = %.lr.ph185
  %580 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  %581 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #10
  br i1 %581, label %.lr.ph185, label %._crit_edge186

582:                                              ; preds = %.lr.ph185
  %583 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #10
  br label %590

584:                                              ; preds = %._crit_edge186
  %585 = getelementptr inbounds i8, ptr %567, i64 156
  %586 = load i32, ptr %585, align 4, !tbaa !88
  %.not129 = icmp slt i32 %586, %570
  br i1 %.not129, label %587, label %._crit_edge192

587:                                              ; preds = %._crit_edge186, %584, %397, %._crit_edge189, %.thread154, %388, %.critedge, %418, %410
  %588 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #10
  %589 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  br i1 %589, label %278, label %._crit_edge192

590:                                              ; preds = %.loopexit, %.loopexit.split-lp, %530, %552, %582, %529, %462, %434, %428, %427, %398, %386, %302
  %.pn137 = phi { ptr, i32 } [ %387, %386 ], [ %399, %398 ], [ %.pn135, %434 ], [ %429, %428 ], [ %.pn132, %427 ], [ %463, %462 ], [ %303, %302 ], [ %583, %582 ], [ %553, %552 ], [ %531, %530 ], [ %.pn126, %529 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %637

._crit_edge192:                                   ; preds = %587, %584, %272
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br i1 %273, label %609, label %591

591:                                              ; preds = %._crit_edge192
  %592 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %593 = getelementptr inbounds i8, ptr %592, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #10
  %594 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %593) #10
  store ptr %594, ptr %43, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #10
  %595 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %593) #10
  store ptr %595, ptr %44, align 8
  %596 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  br i1 %596, label %.lr.ph195, label %._crit_edge196

._crit_edge196:                                   ; preds = %604, %591
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #10
  br label %632

.lr.ph195:                                        ; preds = %591, %604
  %597 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #10
  %598 = load ptr, ptr %597, align 8, !tbaa !5
  %599 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %600 = getelementptr inbounds i8, ptr %599, i64 136
  %601 = load ptr, ptr %598, align 8, !tbaa !31
  %602 = getelementptr inbounds i8, ptr %601, i64 16
  %603 = load ptr, ptr %602, align 8
  invoke void %603(ptr noundef nonnull align 8 dereferenceable(8) %598, ptr noundef nonnull align 4 dereferenceable(24) %600)
          to label %604 unwind label %607

604:                                              ; preds = %.lr.ph195
  %605 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #10
  %606 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  br i1 %606, label %.lr.ph195, label %._crit_edge196

607:                                              ; preds = %.lr.ph195
  %608 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #10
  br label %637

609:                                              ; preds = %._crit_edge192
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %45) #10
  call void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20) %45) #10
  %610 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %611 = icmp eq ptr %610, null
  %612 = getelementptr inbounds i8, ptr %610, i64 136
  %spec.select3 = select i1 %611, ptr null, ptr %612
  store ptr %spec.select3, ptr %45, align 8, !tbaa !92
  %613 = call noundef ptr @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %614 = getelementptr inbounds i8, ptr %45, i64 8
  store ptr %613, ptr %614, align 8, !tbaa !94
  %615 = call noundef i64 @_ZNKSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %616 = trunc i64 %615 to i32
  %617 = getelementptr inbounds i8, ptr %45, i64 16
  store i32 %616, ptr %617, align 8, !tbaa !95
  %618 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %619 = getelementptr inbounds i8, ptr %618, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #10
  %620 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %619) #10
  store ptr %620, ptr %46, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #10
  %621 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %619) #10
  store ptr %621, ptr %47, align 8
  %622 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  br i1 %622, label %.lr.ph198, label %._crit_edge199

._crit_edge199:                                   ; preds = %627, %609
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %45) #10
  br label %632

.lr.ph198:                                        ; preds = %609, %627
  %623 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  %624 = load ptr, ptr %623, align 8, !tbaa !5
  %625 = load ptr, ptr %624, align 8, !tbaa !31
  %626 = load ptr, ptr %625, align 8
  invoke void %626(ptr noundef nonnull align 8 dereferenceable(8) %624, ptr noundef nonnull align 8 dereferenceable(20) %45)
          to label %627 unwind label %630

627:                                              ; preds = %.lr.ph198
  %628 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  %629 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  br i1 %629, label %.lr.ph198, label %._crit_edge199

630:                                              ; preds = %.lr.ph198
  %631 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %45) #10
  br label %637

632:                                              ; preds = %._crit_edge199, %._crit_edge196
  %633 = invoke noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %634 unwind label %635

634:                                              ; preds = %632
  call void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #10
  call void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  call void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #10
  br label %639

635:                                              ; preds = %632
  %636 = landingpad { ptr, i32 }
          cleanup
  br label %637

637:                                              ; preds = %635, %630, %607, %590, %270
  %.pn139 = phi { ptr, i32 } [ %631, %630 ], [ %636, %635 ], [ %608, %607 ], [ %.pn137, %590 ], [ %271, %270 ]
  call void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #10
  call void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  br label %638

638:                                              ; preds = %637, %204, %196
  %.pn141 = phi { ptr, i32 } [ %197, %196 ], [ %.pn139, %637 ], [ %205, %204 ]
  call void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #10
  br label %640

639:                                              ; preds = %._crit_edge202, %634
  %.0 = phi i32 [ %633, %634 ], [ %170, %._crit_edge202 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  call void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264) %3) #10
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  ret i32 %.0

640:                                              ; preds = %638, %180, %178, %150, %131, %92
  %.pn143.pn = phi { ptr, i32 } [ %.pn143, %131 ], [ %151, %150 ], [ %179, %178 ], [ %181, %180 ], [ %.pn141, %638 ], [ %.pn, %92 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  br label %641

641:                                              ; preds = %640, %71
  %.pn143.pn.pn = phi { ptr, i32 } [ %.pn143.pn, %640 ], [ %72, %71 ]
  call void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264) %3) #10
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn143.pn.pn

642:                                              ; preds = %529
  %643 = landingpad { ptr, i32 }
          catch ptr null
  %644 = extractvalue { ptr, i32 } %643, 0
  call void @__clang_call_terminate(ptr %644) #11
  unreachable
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest6detail12ContextState12resetRunDataEv(ptr noundef nonnull align 8 dereferenceable(4489)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(264)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(264), ptr noundef, i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler19allocateAltStackMemEv() local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN7doctest6StringESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getReportersEv() local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEESF_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getListenersEv() local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEOS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEES5_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS6_SaIS6_EEEEPFbS6_S6_EEvT_SE_T0_(ptr, ptr, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_119fileOrderComparatorEPKNS_6detail8TestCaseES4_(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_120suiteOrderComparatorEPKNS_6detail8TestCaseES4_(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7doctest12_GLOBAL__N_119nameOrderComparatorEPKNS_6detail8TestCaseES4_(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind
declare void @srand(i32 noundef) local_unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE5countERKS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EE6insertEOS1_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIySt4hashIyESt8equal_toIyESaIyEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest6detail5Timer5startEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler5resetEv() local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: nofree nosync nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #9

declare void @__cxa_end_catch() local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7doctest6detail12ContextState20finalizeTestCaseDataEv(ptr noundef nonnull align 8 dereferenceable(4489)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIN7doctest6StringESt4lessIS1_ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264)) unnamed_addr #2 align 2

declare void @_ZN7doctest6StringD1Ev(ptr) local_unnamed_addr

declare void @_ZN7doctest6StringC1EPKc(ptr, ptr) local_unnamed_addr

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { mustprogress 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 #3 = { mustprogress 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 #4 = { inlinehint mustprogress 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 #5 = { noinline noreturn nounwind uwtable "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 = { inlinehint mustprogress 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 #8 = { 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 #9 = { nofree nosync nounwind memory(none) }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSN7doctest7ContextE", !6, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !12, i64 119}
!14 = !{!"_ZTSN7doctest14ContextOptionsE", !6, i64 0, !15, i64 8, !6, i64 32, !15, i64 40, !15, i64 64, !16, i64 88, !16, i64 92, !16, i64 96, !16, i64 100, !16, i64 104, !12, i64 108, !12, i64 109, !12, i64 110, !12, i64 111, !12, i64 112, !12, i64 113, !12, i64 114, !12, i64 115, !12, i64 116, !12, i64 117, !12, i64 118, !12, i64 119, !12, i64 120, !12, i64 121, !12, i64 122, !12, i64 123, !12, i64 124, !12, i64 125, !12, i64 126, !12, i64 127, !12, i64 128, !12, i64 129, !12, i64 130, !12, i64 131, !12, i64 132, !12, i64 133, !12, i64 134}
!15 = !{!"_ZTSN7doctest6StringE", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!14, !6, i64 0}
!20 = !{!14, !12, i64 113}
!21 = !{!22, !6, i64 16}
!22 = !{!"_ZTSZN7doctest7Context3runEvE3$_0", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!14, !12, i64 109}
!24 = !{!25, !6, i64 32}
!25 = !{!"_ZTSSt4pairIKS_IiN7doctest6StringEEPFPNS0_9IReporterERKNS0_14ContextOptionsEEE", !26, i64 0, !6, i64 32}
!26 = !{!"_ZTSSt4pairIiN7doctest6StringEE", !16, i64 0, !15, i64 8}
!27 = !{!14, !12, i64 116}
!28 = !{!14, !12, i64 130}
!29 = !{!14, !12, i64 129}
!30 = !{!14, !12, i64 134}
!31 = !{!32, !32, i64 0}
!32 = !{!"vtable pointer", !8, i64 0}
!33 = !{!34, !16, i64 0}
!34 = !{!"_ZTSN7doctest12TestRunStatsE", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20}
!35 = !{!14, !16, i64 88}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!14, !12, i64 131}
!39 = !{!14, !12, i64 132}
!40 = !{!14, !12, i64 133}
!41 = !{!42, !12, i64 56}
!42 = !{!"_ZTSN7doctest12TestCaseDataE", !15, i64 0, !16, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !12, i64 56, !12, i64 57, !12, i64 58, !12, i64 59, !12, i64 60, !16, i64 64, !43, i64 72}
!43 = !{!"double", !7, i64 0}
!44 = !{!14, !12, i64 122}
!45 = !{!42, !6, i64 40}
!46 = !{!42, !6, i64 32}
!47 = !{!34, !16, i64 4}
!48 = !{!14, !16, i64 96}
!49 = !{!14, !16, i64 92}
!50 = !{!7, !7, i64 0}
!51 = !{!34, !16, i64 8}
!52 = !{!14, !6, i64 32}
!53 = !{!54, !16, i64 16}
!54 = !{!"_ZTSN7doctest20CurrentTestCaseStatsE", !16, i64 0, !16, i64 4, !43, i64 8, !16, i64 16, !12, i64 20}
!55 = !{!54, !43, i64 8}
!56 = !{!57, !12, i64 4368}
!57 = !{!"_ZTSN7doctest6detail12ContextStateE", !14, i64 0, !34, i64 136, !54, i64 160, !58, i64 184, !58, i64 2232, !59, i64 4280, !63, i64 4304, !6, i64 4328, !67, i64 4336, !69, i64 4344, !12, i64 4368, !73, i64 4376, !73, i64 4400, !77, i64 4424, !68, i64 4480, !82, i64 4488}
!58 = !{!"_ZTSN7doctest6detail15MultiLaneAtomicIiEE", !7, i64 0}
!59 = !{!"_ZTSSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseISt6vectorIN7doctest6StringESaIS2_EESaIS4_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN7doctest6StringESaIS2_EESaIS4_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN7doctest6StringESaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!63 = !{!"_ZTSSt6vectorIPN7doctest9IReporterESaIS2_EE", !64, i64 0}
!64 = !{!"_ZTSSt12_Vector_baseIPN7doctest9IReporterESaIS2_EE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseIPN7doctest9IReporterESaIS2_EE12_Vector_implE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIPN7doctest9IReporterESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!67 = !{!"_ZTSN7doctest6detail5TimerE", !68, i64 0}
!68 = !{!"long", !7, i64 0}
!69 = !{!"_ZTSSt6vectorIN7doctest6StringESaIS1_EE", !70, i64 0}
!70 = !{!"_ZTSSt12_Vector_baseIN7doctest6StringESaIS1_EE", !71, i64 0}
!71 = !{!"_ZTSNSt12_Vector_baseIN7doctest6StringESaIS1_EE12_Vector_implE", !72, i64 0}
!72 = !{!"_ZTSNSt12_Vector_baseIN7doctest6StringESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!73 = !{!"_ZTSSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE", !74, i64 0}
!74 = !{!"_ZTSSt12_Vector_baseIN7doctest16SubcaseSignatureESaIS1_EE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseIN7doctest16SubcaseSignatureESaIS1_EE12_Vector_implE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseIN7doctest16SubcaseSignatureESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!77 = !{!"_ZTSSt13unordered_setIySt4hashIyESt8equal_toIyESaIyEE", !78, i64 0}
!78 = !{!"_ZTSSt10_HashtableIyySaIyENSt8__detail9_IdentityESt8equal_toIyESt4hashIyENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !68, i64 8, !79, i64 16, !68, i64 24, !80, i64 32, !6, i64 48}
!79 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!80 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !81, i64 0, !68, i64 8}
!81 = !{!"float", !7, i64 0}
!82 = !{!"_ZTSSt6atomicIbE", !83, i64 0}
!83 = !{!"_ZTSSt13__atomic_baseIbE", !12, i64 0}
!84 = !{!57, !68, i64 4480}
!85 = !{!86, !6, i64 80}
!86 = !{!"_ZTSN7doctest6detail8TestCaseE", !42, i64 0, !6, i64 80, !15, i64 88, !16, i64 112, !15, i64 120}
!87 = !{!14, !16, i64 100}
!88 = !{!34, !16, i64 20}
!89 = !{!90, !12, i64 24}
!90 = !{!"_ZTSN7doctest17TestCaseExceptionE", !15, i64 0, !12, i64 24}
!91 = distinct !{!91, !37}
!92 = !{!93, !6, i64 0}
!93 = !{!"_ZTSN7doctest9QueryDataE", !6, i64 0, !6, i64 8, !16, i64 16}
!94 = !{!93, !6, i64 8}
!95 = !{!93, !16, i64 16}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass