; LLVM IR from jrl-umi3218/tvm :: tests/DependencyGraph.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.52, %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%class.anon.52 = 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 }
%union.anon = 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.39 }
%union.anon.39 = type { i32 }
%class.anon.53 = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.63" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.doctest::QueryData" = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.std::vector.64" = type { %"struct.std::_Vector_base.65" }
%"struct.std::_Vector_base.65" = 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.37" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.69" = type { ptr }
%"class.std::set.70" = type { %"class.std::_Rb_tree.71" }
%"class.std::_Rb_tree.71" = 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.76" = type { %"struct.std::_Vector_base.77" }
%"struct.std::_Vector_base.77" = 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.81" = type <{ %"struct.std::_Rb_tree_const_iterator.83", i8, [7 x i8] }>
%"struct.std::_Rb_tree_const_iterator.83" = 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.4", %"class.std::vector.9", ptr, %"struct.doctest::detail::Timer", %"class.std::vector.14", %"class.std::vector.19", %"class.std::set", i32, i8, %"struct.std::atomic.27", [2 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.4" = type { %"struct.std::_Vector_base.5" }
%"struct.std::_Vector_base.5" = 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.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = 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.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = 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.19" = type { %"struct.std::_Vector_base.20" }
%"struct.std::_Vector_base.20" = 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::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::vector<doctest::SubcaseSignature>, std::vector<doctest::SubcaseSignature>, std::_Identity<std::vector<doctest::SubcaseSignature>>, std::less<std::vector<doctest::SubcaseSignature>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::vector<doctest::SubcaseSignature>, std::vector<doctest::SubcaseSignature>, std::_Identity<std::vector<doctest::SubcaseSignature>>, std::less<std::vector<doctest::SubcaseSignature>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::atomic.27" = type { %"struct.std::__atomic_base.28" }
%"struct.std::__atomic_base.28" = type { i8 }
%"struct.std::pair.59" = type { %"struct.std::pair.61", ptr }
%"struct.std::pair.61" = 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, ptr, 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.75 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.97 = 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.209 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.210 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.211 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.212 = 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

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_begin_catch(ptr)

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #3 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 uwtable
declare dso_local noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, i1 noundef zeroext) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt6atomicIbEaSEb(ptr noundef nonnull align 1 dereferenceable(1), i1 noundef zeroext) #4 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 ptr @_ZN7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; 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) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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)) #5

; 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)) #4 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)) #4 align 2

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

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

; 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)) #4 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.53, 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.63", 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.64", align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"struct.std::_Rb_tree_const_iterator.37", align 8
  %32 = alloca %"struct.std::_Rb_tree_const_iterator.37", align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %38 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.69", 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.70", align 8
  %46 = alloca i8, align 1
  %47 = alloca %"class.std::vector.76", 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.69", align 8
  %54 = alloca %"class.__gnu_cxx::__normal_iterator.69", 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.81", 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(4446) %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 %156

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 %155

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 = invoke noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %127)
          to label %129 unwind label %146

129:                                              ; preds = %124
  %130 = icmp ne i32 %128, 0
  br i1 %130, label %131, label %150

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

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

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

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

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

146:                                              ; preds = %156, %136, %131, %124
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %6, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %7, align 4
  br label %1207

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

154:                                              ; preds = %150, %141
  br label %155

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

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

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

166:                                              ; preds = %157
  %167 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %168 = load ptr, ptr %167, align 8, !tbaa !9
  %169 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %168, i32 0, i32 6
  %170 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %169, 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.75)
          to label %171 unwind label %173

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

172:                                              ; preds = %171
  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 %182

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

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

181:                                              ; preds = %177, %173
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #10
  br label %1206

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

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

191:                                              ; preds = %236, %184
  %192 = 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 %192, label %198, label %193

193:                                              ; preds = %191
  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 %240

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

198:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %199 = 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 %199, ptr %13, align 8, !tbaa !5
  %200 = load ptr, ptr %13, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.std::pair.59", ptr %200, i32 0, i32 0
  %202 = getelementptr inbounds %"struct.std::pair.61", ptr %201, i32 0, i32 1
  %203 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %202)
          to label %204 unwind label %227

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

215:                                              ; preds = %204
  br i1 %214, label %216, label %235

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

225:                                              ; preds = %216
  store ptr %224, ptr %14, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %219, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %226 unwind label %231

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

227:                                              ; preds = %204, %198
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %6, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %7, align 4
  br label %238

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

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

236:                                              ; preds = %235
  %237 = 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 %191

238:                                              ; preds = %231, %227
  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 %239

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

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

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

249:                                              ; preds = %277, %242
  %250 = 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 %250, label %256, label %251

251:                                              ; preds = %249
  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 %284

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

256:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %257 = 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 %257, ptr %18, align 8, !tbaa !5
  %258 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !9
  %260 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %259, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %261 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %262 = load ptr, ptr %261, align 8, !tbaa !9
  %263 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %262, i32 0, i32 7
  %264 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %263) #10
  %265 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %264, ptr %265, 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
  %266 = load ptr, ptr %18, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.std::pair.59", ptr %266, i32 0, i32 1
  %268 = load ptr, ptr %267, align 8, !tbaa !24
  %269 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %270 = invoke noundef ptr %268(ptr noundef nonnull align 8 dereferenceable(135) %269)
          to label %271 unwind label %279

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

275:                                              ; preds = %271
  %276 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %22, i32 0, i32 0
  store ptr %274, ptr %276, 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 %277

277:                                              ; preds = %275
  %278 = 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 %249

279:                                              ; preds = %271, %256
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %6, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, 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 %283

283:                                              ; preds = %279, %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %1206

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

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

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

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

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

317:                                              ; preds = %328, %308
  %318 = 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 %318, label %320, label %319

319:                                              ; preds = %317
  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 %334

320:                                              ; preds = %317
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %321 = 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 %321, ptr %26, align 8, !tbaa !5
  %322 = load ptr, ptr %26, align 8, !tbaa !5
  %323 = load ptr, ptr %322, 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
  %324 = load ptr, ptr %323, align 8, !tbaa !31
  %325 = getelementptr inbounds ptr, ptr %324, i64 0
  %326 = load ptr, ptr %325, align 8
  invoke void %326(ptr noundef nonnull align 8 dereferenceable(8) %323, ptr noundef nonnull align 8 dereferenceable(20) %27)
          to label %327 unwind label %330

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

328:                                              ; preds = %327
  %329 = 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 %317

330:                                              ; preds = %320
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %6, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, 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 %1206

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

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

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

341:                                              ; preds = %302
  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
  %342 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest6detail18getRegisteredTestsEv()
  store ptr %342, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %343 = load ptr, ptr %30, align 8, !tbaa !5
  %344 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %343) #10
  %345 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator.37", ptr %31, i32 0, i32 0
  store ptr %344, ptr %345, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  %346 = load ptr, ptr %30, align 8, !tbaa !5
  %347 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %346) #10
  %348 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator.37", ptr %32, i32 0, i32 0
  store ptr %347, ptr %348, align 8
  br label %349

349:                                              ; preds = %356, %341
  %350 = 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 %350, label %352, label %351

351:                                              ; preds = %349
  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 %362

352:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %353 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #10
  store ptr %353, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %354 = load ptr, ptr %33, align 8, !tbaa !5
  store ptr %354, 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 %355 unwind label %358

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

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

358:                                              ; preds = %352
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %6, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, 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 %1203

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

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

375:                                              ; preds = %370
  %376 = icmp eq i32 %374, 0
  br i1 %376, label %377, label %391

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

386:                                              ; preds = %377
  br label %484

387:                                              ; preds = %472, %425, %415, %408, %398, %391, %377, %370
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %6, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %7, align 4
  br label %1203

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

396:                                              ; preds = %391
  %397 = icmp eq i32 %395, 0
  br i1 %397, label %398, label %408

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

407:                                              ; preds = %398
  br label %483

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

413:                                              ; preds = %408
  %414 = icmp eq i32 %412, 0
  br i1 %414, label %415, label %425

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

424:                                              ; preds = %415
  br label %482

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

430:                                              ; preds = %425
  %431 = icmp eq i32 %429, 0
  br i1 %431, label %432, label %472

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

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

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

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

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

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

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

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

479:                                              ; preds = %477
  br label %480

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

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

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

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

484:                                              ; preds = %483, %386
  br label %485

485:                                              ; preds = %484, %362
  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
  %486 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %487 = load ptr, ptr %486, align 8, !tbaa !9
  %488 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %487, i32 0, i32 33
  %489 = load i8, ptr %488, align 1, !tbaa !41, !range !17, !noundef !18
  %490 = trunc i8 %489 to i1
  br i1 %490, label %503, label %491

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

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

503:                                              ; preds = %497, %491, %485
  %504 = phi i1 [ true, %491 ], [ true, %485 ], [ %502, %497 ]
  %505 = zext i1 %504 to i8
  store i8 %505, 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
  %506 = load i8, ptr %46, align 1, !tbaa !11, !range !17, !noundef !18
  %507 = trunc i8 %506 to i1
  br i1 %507, label %535, label %508

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

517:                                              ; preds = %528, %508
  %518 = 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 %518, label %520, label %519

519:                                              ; preds = %517
  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 %534

520:                                              ; preds = %517
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #10
  %521 = 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 %521, ptr %51, align 8, !tbaa !5
  %522 = load ptr, ptr %51, align 8, !tbaa !5
  %523 = load ptr, ptr %522, align 8, !tbaa !5
  %524 = load ptr, ptr %523, align 8, !tbaa !31
  %525 = getelementptr inbounds ptr, ptr %524, i64 1
  %526 = load ptr, ptr %525, align 8
  invoke void %526(ptr noundef nonnull align 8 dereferenceable(8) %523)
          to label %527 unwind label %530

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

528:                                              ; preds = %527
  %529 = 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 %517

530:                                              ; preds = %520
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %6, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, 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 %1202

534:                                              ; preds = %519
  br label %535

535:                                              ; preds = %534, %503
  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
  %536 = load ptr, ptr %52, align 8, !tbaa !5
  %537 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %536) #10
  %538 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.69", ptr %53, i32 0, i32 0
  store ptr %537, ptr %538, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #10
  %539 = load ptr, ptr %52, align 8, !tbaa !5
  %540 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %539) #10
  %541 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.69", ptr %54, i32 0, i32 0
  store ptr %540, ptr %541, align 8
  br label %542

542:                                              ; preds = %1119, %535
  %543 = 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 %543, label %545, label %544

544:                                              ; preds = %542
  store i32 15, ptr %28, align 4
  br label %1123

545:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  %546 = 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 %546, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #10
  %547 = load ptr, ptr %55, align 8, !tbaa !5
  %548 = load ptr, ptr %547, align 8, !tbaa !5
  store ptr %548, 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
  %549 = load ptr, ptr %56, align 8, !tbaa !5
  %550 = getelementptr inbounds %"struct.doctest::TestCaseData", ptr %549, i32 0, i32 5
  %551 = load i8, ptr %550, align 8, !tbaa !44, !range !17, !noundef !18
  %552 = trunc i8 %551 to i1
  br i1 %552, label %553, label %560

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

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

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

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

575:                                              ; preds = %564
  br i1 %574, label %581, label %576

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

577:                                              ; preds = %876, %646, %630, %614, %598, %585, %581, %564, %560
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %6, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %7, align 4
  br label %1122

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

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

596:                                              ; preds = %585
  br i1 %595, label %597, label %598

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

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

612:                                              ; preds = %598
  br i1 %611, label %614, label %613

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

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

628:                                              ; preds = %614
  br i1 %627, label %629, label %630

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

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

644:                                              ; preds = %630
  br i1 %643, label %646, label %645

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

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

660:                                              ; preds = %646
  br i1 %659, label %661, label %662

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

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

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

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

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

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

704:                                              ; preds = %693, %683
  store i8 1, ptr %57, align 1, !tbaa !11
  br label %705

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

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

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

720:                                              ; preds = %732, %711
  %721 = 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 %721, label %723, label %722

722:                                              ; preds = %720
  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 %738

723:                                              ; preds = %720
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #10
  %724 = 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 %724, ptr %61, align 8, !tbaa !5
  %725 = load ptr, ptr %61, align 8, !tbaa !5
  %726 = load ptr, ptr %725, align 8, !tbaa !5
  %727 = load ptr, ptr %56, align 8, !tbaa !5
  %728 = load ptr, ptr %726, align 8, !tbaa !31
  %729 = getelementptr inbounds ptr, ptr %728, i64 11
  %730 = load ptr, ptr %729, align 8
  invoke void %730(ptr noundef nonnull align 8 dereferenceable(8) %726, ptr noundef nonnull align 8 dereferenceable(80) %727)
          to label %731 unwind label %734

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

732:                                              ; preds = %731
  %733 = 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 %720

734:                                              ; preds = %723
  %735 = landingpad { ptr, i32 }
          cleanup
  %736 = extractvalue { ptr, i32 } %735, 0
  store ptr %736, ptr %6, align 8
  %737 = extractvalue { ptr, i32 } %735, 1
  store i32 %737, 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 %1122

738:                                              ; preds = %722
  br label %739

739:                                              ; preds = %738, %708
  store i32 16, ptr %28, align 4
  br label %1113

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

746:                                              ; preds = %740
  store i32 16, ptr %28, align 4
  br label %1113

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

753:                                              ; preds = %747
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  %754 = load ptr, ptr %56, align 8, !tbaa !5
  store ptr %754, 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 %755 unwind label %756

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

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

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

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

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

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

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

782:                                              ; preds = %774, %772
  %783 = phi i1 [ false, %772 ], [ %781, %774 ]
  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 %783, label %784, label %825

784:                                              ; preds = %782
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #10
  %785 = load ptr, ptr %56, align 8, !tbaa !5
  store ptr %785, 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 %786 unwind label %812

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

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

792:                                              ; preds = %790
  %793 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 0
  %794 = extractvalue { ptr, i8 } %791, 0
  store ptr %794, ptr %793, align 8
  %795 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 1
  %796 = extractvalue { ptr, i8 } %791, 1
  store i8 %796, ptr %795, 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
  %797 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %798 = load ptr, ptr %797, align 8, !tbaa !9
  %799 = getelementptr inbounds i8, ptr %798, i64 136
  %800 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %799, i32 0, i32 2
  %801 = load i32, ptr %800, align 8, !tbaa !54
  %802 = add i32 %801, 1
  store i32 %802, ptr %800, align 8, !tbaa !54
  br label %825

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

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

811:                                              ; preds = %807, %803
  call void @llvm.lifetime.end.p0(i64 24, ptr %63) #10
  br label %1122

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

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

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

824:                                              ; preds = %820, %816
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #10
  br label %1122

825:                                              ; preds = %792, %782
  store i32 16, ptr %28, align 4
  br label %1113

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

858:                                              ; preds = %870, %826
  %859 = 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 %859, label %861, label %860

860:                                              ; preds = %858
  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 %876

861:                                              ; preds = %858
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #10
  %862 = 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 %862, ptr %70, align 8, !tbaa !5
  %863 = load ptr, ptr %70, align 8, !tbaa !5
  %864 = load ptr, ptr %863, align 8, !tbaa !5
  %865 = load ptr, ptr %56, align 8, !tbaa !5
  %866 = load ptr, ptr %864, align 8, !tbaa !31
  %867 = getelementptr inbounds ptr, ptr %866, i64 3
  %868 = load ptr, ptr %867, align 8
  invoke void %868(ptr noundef nonnull align 8 dereferenceable(8) %864, ptr noundef nonnull align 8 dereferenceable(80) %865)
          to label %869 unwind label %872

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

870:                                              ; preds = %869
  %871 = 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 %858

872:                                              ; preds = %861
  %873 = landingpad { ptr, i32 }
          cleanup
  %874 = extractvalue { ptr, i32 } %873, 0
  store ptr %874, ptr %6, align 8
  %875 = extractvalue { ptr, i32 } %873, 1
  store i32 %875, 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 %1122

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

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

881:                                              ; preds = %1054, %880
  %882 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %883 = load ptr, ptr %882, align 8, !tbaa !9
  %884 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %883, i32 0, i32 14
  store i8 0, ptr %884, align 4, !tbaa !59
  %885 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %886 = load ptr, ptr %885, align 8, !tbaa !9
  %887 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %886, i32 0, i32 13
  store i32 0, ptr %887, align 8, !tbaa !89
  %888 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %889 = load ptr, ptr %888, align 8, !tbaa !9
  %890 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %889, i32 0, i32 11
  call void @_ZNSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %890) #10
  %891 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %892 = load ptr, ptr %891, align 8, !tbaa !9
  %893 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %892, i32 0, i32 15
  %894 = call noundef zeroext i1 @_ZNSt6atomicIbEaSEb(ptr noundef nonnull align 1 dereferenceable(1) %893, i1 noundef zeroext true) #10
  %895 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %896 = load ptr, ptr %895, align 8, !tbaa !9
  %897 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %896, i32 0, i32 10
  call void @_ZNSt6vectorIN7doctest6StringESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %897) #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 %898 unwind label %904

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

902:                                              ; preds = %898
  invoke void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler5resetEv()
          to label %903 unwind label %908

903:                                              ; preds = %902
  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 %927

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

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

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

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

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

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

927:                                              ; preds = %999, %926, %903
  %928 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %929 = load ptr, ptr %928, align 8, !tbaa !9
  %930 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %929, i32 0, i32 8
  %931 = load i32, ptr %930, align 4, !tbaa !92
  %932 = icmp sgt i32 %931, 0
  br i1 %932, label %933, label %1009

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

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

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

967:                                              ; preds = %981, %956
  %968 = 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 %968, label %970, label %969

969:                                              ; preds = %967
  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 %992

970:                                              ; preds = %967
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #10
  %971 = 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 %971, ptr %76, align 8, !tbaa !5
  %972 = load ptr, ptr %76, align 8, !tbaa !5
  %973 = load ptr, ptr %972, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #10
  %974 = 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 %974)
          to label %975 unwind label %983

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

980:                                              ; preds = %975
  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 %981

981:                                              ; preds = %980
  %982 = 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 %967

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

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

991:                                              ; preds = %987, %983
  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 %1004 unwind label %1213

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

999:                                              ; preds = %992
  br label %927

1000:                                             ; preds = %1057, %992
  %1001 = landingpad { ptr, i32 }
          cleanup
  %1002 = extractvalue { ptr, i32 } %1001, 0
  store ptr %1002, ptr %6, align 8
  %1003 = extractvalue { ptr, i32 } %1001, 1
  store i32 %1003, ptr %7, align 4
  br label %1121

1004:                                             ; preds = %991
  br label %1121

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

1009:                                             ; preds = %949, %933, %927
  %1010 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1011 = load ptr, ptr %1010, align 8, !tbaa !9
  %1012 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1011, i32 0, i32 14
  %1013 = load i8, ptr %1012, align 4, !tbaa !59, !range !17, !noundef !18
  %1014 = trunc i8 %1013 to i1
  br i1 %1014, label %1015, label %1046

1015:                                             ; preds = %1009
  %1016 = load i8, ptr %71, align 1, !tbaa !11, !range !17, !noundef !18
  %1017 = trunc i8 %1016 to i1
  br i1 %1017, label %1018, label %1046

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

1027:                                             ; preds = %1039, %1018
  %1028 = 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 %1028, label %1030, label %1029

1029:                                             ; preds = %1027
  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 %1045

1030:                                             ; preds = %1027
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #10
  %1031 = 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 %1031, ptr %82, align 8, !tbaa !5
  %1032 = load ptr, ptr %82, align 8, !tbaa !5
  %1033 = load ptr, ptr %1032, align 8, !tbaa !5
  %1034 = load ptr, ptr %56, align 8, !tbaa !5
  %1035 = load ptr, ptr %1033, align 8, !tbaa !31
  %1036 = getelementptr inbounds ptr, ptr %1035, i64 4
  %1037 = load ptr, ptr %1036, align 8
  invoke void %1037(ptr noundef nonnull align 8 dereferenceable(8) %1033, ptr noundef nonnull align 8 dereferenceable(80) %1034)
          to label %1038 unwind label %1041

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

1039:                                             ; preds = %1038
  %1040 = 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 %1027

1041:                                             ; preds = %1030
  %1042 = landingpad { ptr, i32 }
          cleanup
  %1043 = extractvalue { ptr, i32 } %1042, 0
  store ptr %1043, ptr %6, align 8
  %1044 = extractvalue { ptr, i32 } %1042, 1
  store i32 %1044, 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 %1121

1045:                                             ; preds = %1029
  br label %1046

1046:                                             ; preds = %1045, %1015, %1009
  %1047 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1048 = load ptr, ptr %1047, align 8, !tbaa !9
  %1049 = getelementptr inbounds %"struct.doctest::detail::ContextState", ptr %1048, i32 0, i32 14
  %1050 = load i8, ptr %1049, align 4, !tbaa !59, !range !17, !noundef !18
  %1051 = trunc i8 %1050 to i1
  br i1 %1051, label %1053, label %1052

1052:                                             ; preds = %1046
  store i8 0, ptr %71, align 1, !tbaa !11
  br label %1053

1053:                                             ; preds = %1052, %1046
  br label %1054

1054:                                             ; preds = %1053
  %1055 = load i8, ptr %71, align 1, !tbaa !11, !range !17, !noundef !18
  %1056 = trunc i8 %1055 to i1
  br i1 %1056, label %881, label %1057, !llvm.loop !96

1057:                                             ; preds = %1054
  %1058 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1059 = load ptr, ptr %1058, align 8, !tbaa !9
  invoke void @_ZN7doctest6detail12ContextState20finalizeTestCaseDataEv(ptr noundef nonnull align 8 dereferenceable(4446) %1059)
          to label %1060 unwind label %1000

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

1069:                                             ; preds = %1082, %1060
  %1070 = 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 %1070, label %1072, label %1071

1071:                                             ; preds = %1069
  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 %1088

1072:                                             ; preds = %1069
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #10
  %1073 = 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 %1073, ptr %86, align 8, !tbaa !5
  %1074 = load ptr, ptr %86, align 8, !tbaa !5
  %1075 = load ptr, ptr %1074, align 8, !tbaa !5
  %1076 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1077 = getelementptr inbounds i8, ptr %1076, i64 160
  %1078 = load ptr, ptr %1075, align 8, !tbaa !31
  %1079 = getelementptr inbounds ptr, ptr %1078, i64 5
  %1080 = load ptr, ptr %1079, align 8
  invoke void %1080(ptr noundef nonnull align 8 dereferenceable(8) %1075, ptr noundef nonnull align 8 dereferenceable(24) %1077)
          to label %1081 unwind label %1084

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

1082:                                             ; preds = %1081
  %1083 = 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 %1069

1084:                                             ; preds = %1072
  %1085 = landingpad { ptr, i32 }
          cleanup
  %1086 = extractvalue { ptr, i32 } %1085, 0
  store ptr %1086, ptr %6, align 8
  %1087 = extractvalue { ptr, i32 } %1085, 1
  store i32 %1087, 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 %1121

1088:                                             ; preds = %1071
  %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 2
  store ptr null, ptr %1091, align 8, !tbaa !55
  %1092 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1093 = load ptr, ptr %1092, align 8, !tbaa !9
  %1094 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %1093, i32 0, i32 8
  %1095 = load i32, ptr %1094, align 4, !tbaa !92
  %1096 = icmp sgt i32 %1095, 0
  br i1 %1096, label %1097, label %1109

1097:                                             ; preds = %1088
  %1098 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1099 = load ptr, ptr %1098, align 8, !tbaa !9
  %1100 = getelementptr inbounds i8, ptr %1099, i64 136
  %1101 = getelementptr inbounds %"struct.doctest::TestRunStats", ptr %1100, i32 0, i32 5
  %1102 = load i32, ptr %1101, align 4, !tbaa !93
  %1103 = getelementptr inbounds %"class.doctest::Context", ptr %96, i32 0, i32 0
  %1104 = load ptr, ptr %1103, align 8, !tbaa !9
  %1105 = getelementptr inbounds %"struct.doctest::ContextOptions", ptr %1104, i32 0, i32 8
  %1106 = load i32, ptr %1105, align 4, !tbaa !92
  %1107 = icmp sge i32 %1102, %1106
  br i1 %1107, label %1108, label %1109

1108:                                             ; preds = %1097
  store i32 15, ptr %28, align 4
  br label %1110

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

1110:                                             ; preds = %1109, %1108
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #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, %825, %755, %746, %739
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  %1114 = load i32, ptr %28, align 4
  switch i32 %1114, label %1116 [
    i32 0, label %1115
  ]

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

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

1118:                                             ; preds = %1116
  br label %1119

1119:                                             ; preds = %1118, %1116
  %1120 = 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 %542

1121:                                             ; preds = %1084, %1041, %1005, %1004, %1000
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #10
  br label %1122

1122:                                             ; preds = %1121, %872, %824, %812, %811, %756, %734, %577
  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 %1202

1123:                                             ; preds = %1116, %544
  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 %1124

1124:                                             ; preds = %1123
  %1125 = load i8, ptr %46, align 1, !tbaa !11, !range !17, !noundef !18
  %1126 = trunc i8 %1125 to i1
  br i1 %1126, label %1156, label %1127

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

1136:                                             ; preds = %1149, %1127
  %1137 = 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 %1137, label %1139, label %1138

1138:                                             ; preds = %1136
  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 %1155

1139:                                             ; preds = %1136
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #10
  %1140 = 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 %1140, ptr %90, align 8, !tbaa !5
  %1141 = load ptr, ptr %90, align 8, !tbaa !5
  %1142 = load ptr, ptr %1141, align 8, !tbaa !5
  %1143 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %1144 = getelementptr inbounds i8, ptr %1143, i64 136
  %1145 = load ptr, ptr %1142, align 8, !tbaa !31
  %1146 = getelementptr inbounds ptr, ptr %1145, i64 2
  %1147 = load ptr, ptr %1146, align 8
  invoke void %1147(ptr noundef nonnull align 8 dereferenceable(8) %1142, ptr noundef nonnull align 4 dereferenceable(24) %1144)
          to label %1148 unwind label %1151

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

1149:                                             ; preds = %1148
  %1150 = 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 %1136

1151:                                             ; preds = %1139
  %1152 = landingpad { ptr, i32 }
          cleanup
  %1153 = extractvalue { ptr, i32 } %1152, 0
  store ptr %1153, ptr %6, align 8
  %1154 = extractvalue { ptr, i32 } %1152, 1
  store i32 %1154, 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 %1202

1155:                                             ; preds = %1138
  br label %1195

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

1159:                                             ; preds = %1156
  %1160 = getelementptr inbounds i8, ptr %1157, i64 136
  br label %1161

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

1177:                                             ; preds = %1188, %1161
  %1178 = 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 %1178, label %1180, label %1179

1179:                                             ; preds = %1177
  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 %1194

1180:                                             ; preds = %1177
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #10
  %1181 = 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 %1181, ptr %95, align 8, !tbaa !5
  %1182 = load ptr, ptr %95, align 8, !tbaa !5
  %1183 = load ptr, ptr %1182, align 8, !tbaa !5
  %1184 = load ptr, ptr %1183, align 8, !tbaa !31
  %1185 = getelementptr inbounds ptr, ptr %1184, i64 0
  %1186 = load ptr, ptr %1185, align 8
  invoke void %1186(ptr noundef nonnull align 8 dereferenceable(8) %1183, ptr noundef nonnull align 8 dereferenceable(20) %91)
          to label %1187 unwind label %1190

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

1188:                                             ; preds = %1187
  %1189 = 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 %1177

1190:                                             ; preds = %1180
  %1191 = landingpad { ptr, i32 }
          cleanup
  %1192 = extractvalue { ptr, i32 } %1191, 0
  store ptr %1192, ptr %6, align 8
  %1193 = extractvalue { ptr, i32 } %1191, 1
  store i32 %1193, 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 %1202

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

1195:                                             ; preds = %1194, %1155
  %1196 = invoke noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %1197 unwind label %1198

1197:                                             ; preds = %1195
  store i32 %1196, 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 %1204

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

1202:                                             ; preds = %1198, %1190, %1151, %1122, %530
  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 %1203

1203:                                             ; preds = %1202, %387, %358
  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 %1206

1204:                                             ; preds = %1197, %336
  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
  %1205 = load i32, ptr %2, align 4
  ret i32 %1205

1206:                                             ; preds = %1203, %337, %330, %283, %239, %181
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #10
  br label %1207

1207:                                             ; preds = %1206, %146
  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 %1208

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

1213:                                             ; preds = %991
  %1214 = landingpad { ptr, i32 }
          catch ptr null
  %1215 = extractvalue { ptr, i32 } %1214, 0
  call void @__clang_call_terminate(ptr %1215) #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(4446)) #4 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)) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) #4 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)) #4 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)) #4

; 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)) #4 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)) #4 align 2

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

; 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 #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #5 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 #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #4 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)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZNKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 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)) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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) #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 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)) #5

; 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)) #4 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) #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 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(4446)) #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)) #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264)) unnamed_addr #4 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 = { 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 #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 = { 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 = { 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 #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 4444}
!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, !75, i64 4368, !79, i64 4392, !16, i64 4440, !12, i64 4444, !87, i64 4445}
!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 = !{!"_ZTSSt3setISt6vectorIN7doctest16SubcaseSignatureESaIS2_EESt4lessIS4_ESaIS4_EE", !80, i64 0}
!80 = !{!"_ZTSSt8_Rb_treeISt6vectorIN7doctest16SubcaseSignatureESaIS2_EES4_St9_IdentityIS4_ESt4lessIS4_ESaIS4_EE", !81, i64 0}
!81 = !{!"_ZTSNSt8_Rb_treeISt6vectorIN7doctest16SubcaseSignatureESaIS2_EES4_St9_IdentityIS4_ESt4lessIS4_ESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !82, i64 0, !84, i64 8}
!82 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt6vectorIN7doctest16SubcaseSignatureESaIS3_EEEE", !83, i64 0}
!83 = !{!"_ZTSSt4lessISt6vectorIN7doctest16SubcaseSignatureESaIS2_EEE"}
!84 = !{!"_ZTSSt15_Rb_tree_header", !85, i64 0, !37, i64 32}
!85 = !{!"_ZTSSt18_Rb_tree_node_base", !86, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!86 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!87 = !{!"_ZTSSt6atomicIbE", !88, i64 0}
!88 = !{!"_ZTSSt13__atomic_baseIbE", !12, i64 0}
!89 = !{!60, !16, i64 4440}
!90 = !{!91, !6, i64 80}
!91 = !{!"_ZTSN7doctest6detail8TestCaseE", !45, i64 0, !6, i64 80, !6, i64 88, !16, i64 96, !15, i64 104}
!92 = !{!14, !16, i64 100}
!93 = !{!34, !16, i64 20}
!94 = !{!95, !12, i64 24}
!95 = !{!"_ZTSN7doctest17TestCaseExceptionE", !15, i64 0, !12, i64 24}
!96 = distinct !{!96, !40}
!97 = !{!98, !6, i64 0}
!98 = !{!"_ZTSN7doctest9QueryDataE", !6, i64 0, !6, i64 8, !16, i64 16}
!99 = !{!98, !6, i64 8}
!100 = !{!98, !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.52, %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%class.anon.52 = 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 }
%union.anon = 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.39 }
%union.anon.39 = type { i32 }
%class.anon.53 = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.63" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.doctest::QueryData" = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.std::vector.64" = type { %"struct.std::_Vector_base.65" }
%"struct.std::_Vector_base.65" = 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.37" = type { ptr }
%"class.std::set.70" = type { %"class.std::_Rb_tree.71" }
%"class.std::_Rb_tree.71" = 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.76" = type { %"struct.std::_Vector_base.77" }
%"struct.std::_Vector_base.77" = 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.69" = 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.75 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.97 = 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.209 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.210 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.211 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.212 = 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

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 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 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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7doctest6detail15MultiLaneAtomicIiEcviEv(ptr noundef nonnull align 4 dereferenceable(2048)) local_unnamed_addr #4 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 #4 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 ptr @_ZN7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; 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 #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #5

; 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 #4 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 #4 align 2

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

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

; 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 #4 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.53, 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.63", 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.64", align 8
  %18 = alloca %"struct.std::_Rb_tree_const_iterator.37", align 8
  %19 = alloca %"struct.std::_Rb_tree_const_iterator.37", align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::set.70", align 8
  %22 = alloca %"class.std::vector.76", 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.69", align 8
  %26 = alloca %"class.__gnu_cxx::__normal_iterator.69", 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(4446) %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 %75

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 %75

61:                                               ; preds = %56
  %62 = getelementptr inbounds i8, ptr %53, i64 40
  %63 = invoke noundef i32 @_ZNK7doctest6String4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62)
          to label %64 unwind label %72

64:                                               ; preds = %61
  %.not = icmp eq i32 %63, 0
  %65 = load ptr, ptr %0, align 8, !tbaa !9
  br i1 %.not, label %74, label %66

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

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

72:                                               ; preds = %75, %66, %61
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %639

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

75:                                               ; preds = %60, %74, %69, %1
  invoke void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandler19allocateAltStackMemEv()
          to label %76 unwind label %72

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

83:                                               ; preds = %76
  %84 = load ptr, ptr %0, align 8, !tbaa !9
  %85 = getelementptr inbounds i8, ptr %84, i64 4280
  %86 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IN7doctest6StringESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %85, 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.75)
          to label %87 unwind label %89

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

88:                                               ; preds = %87
  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 %94

89:                                               ; preds = %83
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %93

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

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

94:                                               ; preds = %88, %76
  %95 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getReportersEv()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  %96 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %95) #10
  store ptr %96, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  %97 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %95) #10
  store ptr %97, ptr %7, align 8
  %98 = 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 %98, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %129, %94
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  %99 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest12_GLOBAL__N_112getListenersEv()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #10
  %100 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %99) #10
  store ptr %100, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #10
  %101 = call ptr @_ZNSt3mapISt4pairIiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEESt4lessIS3_ESaIS0_IKS3_SA_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %99) #10
  store ptr %101, ptr %10, align 8
  %102 = 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 %102, label %.lr.ph161, label %._crit_edge162

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

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

115:                                              ; preds = %106
  br i1 %114, label %116, label %129

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

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

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

125:                                              ; preds = %106, %.lr.ph
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %132

127:                                              ; preds = %122, %116
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %132

129:                                              ; preds = %124, %115
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  %131 = 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 %131, label %.lr.ph, label %._crit_edge

132:                                              ; preds = %127, %125
  %.pn143 = phi { ptr, i32 } [ %128, %127 ], [ %126, %125 ]
  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 %638

._crit_edge162:                                   ; preds = %148, %._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
  %133 = load ptr, ptr %0, align 8, !tbaa !9
  %134 = getelementptr inbounds i8, ptr %133, i64 116
  %135 = load i8, ptr %134, align 4, !tbaa !27, !range !17, !noundef !18
  %136 = trunc nuw i8 %135 to i1
  br i1 %136, label %165, label %153

.lr.ph161:                                        ; preds = %._crit_edge, %148
  %137 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #10
  %138 = load ptr, ptr %0, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %139 = getelementptr inbounds i8, ptr %138, i64 4304
  %140 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %139) #10
  store ptr %140, 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
  %141 = getelementptr inbounds i8, ptr %137, i64 32
  %142 = load ptr, ptr %141, align 8, !tbaa !24
  %143 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %144 = invoke noundef ptr %142(ptr noundef nonnull align 8 dereferenceable(135) %143)
          to label %145 unwind label %151

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

148:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  %149 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiN7doctest6StringEEPFPNS1_9IReporterERKNS1_14ContextOptionsEEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #10
  %150 = 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 %150, label %.lr.ph161, label %._crit_edge162

151:                                              ; preds = %145, %.lr.ph161
  %152 = 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 %638

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

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

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

165:                                              ; preds = %161, %157, %153, %._crit_edge162
  %166 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %167 = getelementptr inbounds i8, ptr %166, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %168 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %167) #10
  store ptr %168, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %169 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %167) #10
  store ptr %169, ptr %15, align 8
  %170 = 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 %170, label %.lr.ph201, label %._crit_edge202

._crit_edge202:                                   ; preds = %176, %165
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  %171 = invoke noundef i32 @"_ZZN7doctest7Context3runEvENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %637 unwind label %181

.lr.ph201:                                        ; preds = %165, %176
  %172 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  %173 = load ptr, ptr %172, 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
  %174 = load ptr, ptr %173, align 8, !tbaa !31
  %175 = load ptr, ptr %174, align 8
  invoke void %175(ptr noundef nonnull align 8 dereferenceable(8) %173, ptr noundef nonnull align 8 dereferenceable(20) %16)
          to label %176 unwind label %179

176:                                              ; preds = %.lr.ph201
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  %178 = 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 %178, label %.lr.ph201, label %._crit_edge202

179:                                              ; preds = %.lr.ph201
  %180 = 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 %638

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

183:                                              ; preds = %161
  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
  %184 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN7doctest6detail18getRegisteredTestsEv()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  %185 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %184) #10
  store ptr %185, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #10
  %186 = call ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %184) #10
  store ptr %186, ptr %19, align 8
  %187 = 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 %187, label %.lr.ph164, label %._crit_edge165

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

.lr.ph164:                                        ; preds = %183, %194
  %193 = call noundef nonnull align 8 dereferenceable(128) 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 %193, 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 %194 unwind label %197

194:                                              ; preds = %.lr.ph164
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  %195 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  %196 = 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 %196, label %.lr.ph164, label %._crit_edge165

197:                                              ; preds = %.lr.ph164
  %198 = 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 %636

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

203:                                              ; preds = %199
  %204 = icmp eq i32 %202, 0
  br i1 %204, label %.invoke, label %207

205:                                              ; preds = %.invoke, %242, %222, %213, %207, %199
  %206 = landingpad { ptr, i32 }
          cleanup
  br label %636

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

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

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

217:                                              ; preds = %213
  %218 = icmp eq i32 %216, 0
  br i1 %218, label %.invoke, label %222

.invoke:                                          ; preds = %217, %211, %203
  %219 = phi ptr [ @_ZN7doctest12_GLOBAL__N_119fileOrderComparatorEPKNS_6detail8TestCaseES4_, %203 ], [ @_ZN7doctest12_GLOBAL__N_120suiteOrderComparatorEPKNS_6detail8TestCaseES4_, %211 ], [ @_ZN7doctest12_GLOBAL__N_119nameOrderComparatorEPKNS_6detail8TestCaseES4_, %217 ]
  %220 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  %221 = 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 %220, ptr %221, ptr noundef nonnull %219)
          to label %.loopexit159 unwind label %205

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

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

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

.lr.ph171:                                        ; preds = %229, %.lr.ph171
  %.0109169 = phi i64 [ %.0109, %.lr.ph171 ], [ %.0109166, %229 ]
  %.0109.in168 = phi i64 [ %.0109169, %.lr.ph171 ], [ %233, %229 ]
  %234 = call i32 @rand() #10
  %235 = sext i32 %234 to i64
  %236 = urem i64 %235, %.0109.in168
  %237 = getelementptr inbounds ptr, ptr %232, i64 %.0109169
  %238 = load ptr, ptr %237, align 8, !tbaa !5
  %sext = shl i64 %236, 32
  %239 = ashr exact i64 %sext, 29
  %240 = getelementptr inbounds i8, ptr %232, i64 %239
  %241 = load ptr, ptr %240, align 8, !tbaa !5
  store ptr %241, ptr %237, align 8, !tbaa !5
  store ptr %238, ptr %240, 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

242:                                              ; preds = %226
  %243 = getelementptr inbounds i8, ptr %228, i64 64
  %244 = invoke noundef i32 @_ZNK7doctest6String7compareEPKcb(ptr noundef nonnull align 8 dereferenceable(24) %243, ptr noundef nonnull @.str.212, i1 noundef zeroext true)
          to label %.loopexit159 unwind label %205

.loopexit159:                                     ; preds = %.lr.ph171, %.invoke, %229, %242, %._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
  %245 = load ptr, ptr %0, align 8, !tbaa !9
  %246 = getelementptr inbounds i8, ptr %245, i64 131
  %247 = load i8, ptr %246, align 1, !tbaa !38, !range !17, !noundef !18
  %248 = trunc nuw i8 %247 to i1
  br i1 %248, label %.thread, label %249

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

.thread:                                          ; preds = %249, %.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 %273

253:                                              ; preds = %249
  %254 = getelementptr inbounds i8, ptr %245, i64 133
  %255 = load i8, ptr %254, align 1, !tbaa !40, !range !17, !noundef !18
  %256 = trunc nuw i8 %255 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 %256, label %273, label %257

257:                                              ; preds = %253
  %258 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %259 = getelementptr inbounds i8, ptr %258, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #10
  %260 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %259) #10
  store ptr %260, ptr %23, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #10
  %261 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %259) #10
  store ptr %261, ptr %24, align 8
  %262 = 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 %262, label %.lr.ph173, label %._crit_edge174

._crit_edge174:                                   ; preds = %268, %257
  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 %273

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

268:                                              ; preds = %.lr.ph173
  %269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  %270 = 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 %270, label %.lr.ph173, label %._crit_edge174

271:                                              ; preds = %.lr.ph173
  %272 = 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 %635

273:                                              ; preds = %.thread, %._crit_edge174, %253
  %274 = phi i1 [ true, %.thread ], [ false, %._crit_edge174 ], [ true, %253 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #10
  %275 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  store ptr %275, ptr %25, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  %276 = call ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  store ptr %276, ptr %26, align 8
  %277 = 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 %277, label %.lr.ph191, label %._crit_edge192

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

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

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

289:                                              ; preds = %285, %279
  %.0110 = phi i8 [ 0, %279 ], [ %not., %285 ]
  %290 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %281)
          to label %291 unwind label %303

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

300:                                              ; preds = %291
  %301 = trunc nuw i8 %.0110 to i1
  %302 = invoke noundef ptr @_ZNK7doctest6String5c_strEv(ptr noundef nonnull align 8 dereferenceable(24) %281)
          to label %305 unwind label %303

303:                                              ; preds = %346, %335, %325, %314, %305, %300, %291, %289
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %588

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

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

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

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

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

356:                                              ; preds = %346
  %357 = and i1 %299, %324
  %358 = xor i1 %357, true
  %359 = or i1 %313, %358
  %360 = or i1 %334, %359
  %not.215 = xor i1 %345, true
  %361 = or i1 %360, %not.215
  %362 = or i1 %355, %361
  %363 = select i1 %362, i1 true, i1 %301
  %.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 %363, label %._crit_edge203, label %364

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

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

.thread154:                                       ; preds = %._crit_edge203
  br i1 %274, label %585, label %373

373:                                              ; preds = %.thread154
  %374 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %375 = getelementptr inbounds i8, ptr %374, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #10
  %376 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %375) #10
  store ptr %376, ptr %27, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #10
  %377 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %375) #10
  store ptr %377, ptr %28, align 8
  %378 = 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 %378, label %.lr.ph188, label %._crit_edge189

._crit_edge189:                                   ; preds = %384, %373
  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 %585

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

384:                                              ; preds = %.lr.ph188
  %385 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  %386 = 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 %386, label %.lr.ph188, label %._crit_edge189

387:                                              ; preds = %.lr.ph188
  %388 = 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 %588

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

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

397:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #10
  store ptr %281, 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 %398 unwind label %399

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

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

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

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

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

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

411:                                              ; preds = %409
  %412 = load ptr, ptr %315, align 8, !tbaa !45
  %413 = load i8, ptr %412, align 1, !tbaa !50
  %.not134 = icmp eq i8 %413, 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 %585, label %414

414:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #10
  store ptr %281, 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 %415 unwind label %429

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

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

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

424:                                              ; preds = %405
  %425 = landingpad { ptr, i32 }
          cleanup
  br label %428

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

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

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

431:                                              ; preds = %415
  %432 = landingpad { ptr, i32 }
          cleanup
  br label %435

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

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

.critedge:                                        ; preds = %409
  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 %585

436:                                              ; preds = %401
  %437 = getelementptr inbounds i8, ptr %.pre, i64 32
  store ptr %281, ptr %437, align 8, !tbaa !52
  %438 = getelementptr inbounds i8, ptr %.pre, i64 176
  store i32 0, ptr %438, align 8, !tbaa !53
  %439 = getelementptr inbounds i8, ptr %.pre, i64 168
  store double 0.000000e+00, ptr %439, align 8, !tbaa !55
  %440 = getelementptr inbounds i8, ptr %.pre, i64 2232
  %441 = call noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048) %440, i32 noundef 0) #10
  %442 = load ptr, ptr %0, align 8, !tbaa !9
  %443 = getelementptr inbounds i8, ptr %442, i64 184
  %444 = call noundef i32 @_ZN7doctest6detail15MultiLaneAtomicIiEaSEi(ptr noundef nonnull align 4 dereferenceable(2048) %443, i32 noundef 0) #10
  %445 = load ptr, ptr %0, align 8, !tbaa !9
  %446 = getelementptr inbounds i8, ptr %445, i64 4392
  call void @_ZNSt3setISt6vectorIN7doctest16SubcaseSignatureESaIS2_EESt4lessIS4_ESaIS4_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(48) %446) #10
  %447 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %448 = getelementptr inbounds i8, ptr %447, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #10
  %449 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %448) #10
  store ptr %449, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #10
  %450 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %448) #10
  store ptr %450, ptr %34, align 8
  %451 = 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 %451, label %.lr.ph176, label %._crit_edge177

._crit_edge177:                                   ; preds = %460, %436
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  %452 = load ptr, ptr %0, align 8, !tbaa !9
  %453 = getelementptr inbounds i8, ptr %452, i64 4336
  call void @_ZN7doctest6detail5Timer5startEv(ptr noundef nonnull align 8 dereferenceable(8) %453)
  %454 = getelementptr inbounds i8, ptr %281, i64 80
  %.pre208 = load ptr, ptr %0, align 8, !tbaa !9
  br label %465

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

460:                                              ; preds = %.lr.ph176
  %461 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  %462 = 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 %462, label %.lr.ph176, label %._crit_edge177

463:                                              ; preds = %.lr.ph176
  %464 = 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 %588

465:                                              ; preds = %.thread216, %._crit_edge177
  %466 = phi ptr [ %.pre208, %._crit_edge177 ], [ %556, %.thread216 ]
  %.0118 = phi i8 [ 1, %._crit_edge177 ], [ %.1119, %.thread216 ]
  %467 = getelementptr inbounds i8, ptr %466, i64 4444
  store i8 0, ptr %467, align 4, !tbaa !56
  %468 = getelementptr inbounds i8, ptr %466, i64 4440
  store i32 0, ptr %468, align 8, !tbaa !87
  %469 = getelementptr inbounds i8, ptr %466, i64 4368
  call void @_ZNSt6vectorIN7doctest16SubcaseSignatureESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %469) #10
  %470 = load ptr, ptr %0, align 8, !tbaa !9
  %471 = getelementptr inbounds i8, ptr %470, i64 4445
  %472 = call noundef zeroext i1 @_ZNSt6atomicIbEaSEb(ptr noundef nonnull align 1 dereferenceable(1) %471, i1 noundef zeroext true) #10
  %473 = load ptr, ptr %0, align 8, !tbaa !9
  %474 = getelementptr inbounds i8, ptr %473, i64 4344
  call void @_ZNSt6vectorIN7doctest6StringESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %474) #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)
  %475 = load ptr, ptr %454, align 8, !tbaa !88
  invoke void %475()
          to label %476 unwind label %477

476:                                              ; preds = %465
  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 %489

477:                                              ; preds = %465
  %478 = landingpad { ptr, i32 }
          catch ptr @_ZTIN7doctest6detail20TestFailureExceptionE
          catch ptr null
  %479 = extractvalue { ptr, i32 } %478, 0
  %480 = extractvalue { ptr, i32 } %478, 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
  %481 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIN7doctest6detail20TestFailureExceptionE) #10
  %482 = icmp eq i32 %480, %481
  %483 = call ptr @__cxa_begin_catch(ptr %479) #10
  br i1 %482, label %484, label %507

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

489:                                              ; preds = %484, %._crit_edge180, %476
  %490 = load ptr, ptr %0, align 8, !tbaa !9
  %491 = getelementptr inbounds i8, ptr %490, i64 100
  %492 = load i32, ptr %491, align 4, !tbaa !90
  %493 = icmp sgt i32 %492, 0
  br i1 %493, label %494, label %533

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

503:                                              ; preds = %494
  %504 = getelementptr inbounds i8, ptr %500, i64 176
  %505 = load i32, ptr %504, align 8, !tbaa !53
  %506 = or i32 %505, 8
  store i32 %506, ptr %504, align 8, !tbaa !53
  br label %533

507:                                              ; preds = %477
  %508 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %509 = getelementptr inbounds i8, ptr %508, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #10
  %510 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %509) #10
  store ptr %510, ptr %36, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #10
  %511 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %509) #10
  store ptr %511, ptr %37, align 8
  %512 = 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 %512, label %.lr.ph179, label %._crit_edge180

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

.lr.ph179:                                        ; preds = %507, %523
  %517 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  %518 = load ptr, ptr %517, 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 %519 unwind label %526

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

523:                                              ; preds = %519
  call void @_ZN7doctest17TestCaseExceptionD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %38) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #10
  %524 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  %525 = 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 %525, label %.lr.ph179, label %._crit_edge180

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

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

530:                                              ; preds = %528, %526
  %.pn126 = phi { ptr, i32 } [ %529, %528 ], [ %527, %526 ]
  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 %588 unwind label %640

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

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

531:                                              ; preds = %484
  %532 = landingpad { ptr, i32 }
          cleanup
  br label %588

533:                                              ; preds = %503, %494, %489
  %534 = phi ptr [ %500, %503 ], [ %500, %494 ], [ %490, %489 ]
  %.1119 = phi i8 [ 0, %503 ], [ %.0118, %494 ], [ %.0118, %489 ]
  %535 = getelementptr inbounds i8, ptr %534, i64 4444
  %536 = load i8, ptr %535, align 4, !tbaa !56, !range !17, !noundef !18
  %537 = trunc nuw i8 %536 to i1
  br i1 %537, label %538, label %.thread222

538:                                              ; preds = %533
  %539 = trunc nuw i8 %.1119 to i1
  br i1 %539, label %540, label %.thread216

540:                                              ; preds = %538
  %541 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %542 = getelementptr inbounds i8, ptr %541, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #10
  %543 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %542) #10
  store ptr %543, ptr %39, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #10
  %544 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %542) #10
  store ptr %544, ptr %40, align 8
  %545 = 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 %545, label %.lr.ph182, label %.loopexit223

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

551:                                              ; preds = %.lr.ph182
  %552 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %39) #10
  %553 = 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 %553, label %.lr.ph182, label %.loopexit223

554:                                              ; preds = %.lr.ph182
  %555 = 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 %588

.loopexit223:                                     ; preds = %551, %540
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #10
  %.pre209 = load ptr, ptr %0, align 8, !tbaa !9
  %.phi.trans.insert210 = getelementptr inbounds i8, ptr %.pre209, i64 4444
  %.pre211 = load i8, ptr %.phi.trans.insert210, align 4, !tbaa !56, !range !17
  %.pre211.fr = freeze i8 %.pre211
  %.pre212 = trunc i8 %.pre211.fr to i1
  br i1 %.pre212, label %.thread216, label %.thread222

.thread216:                                       ; preds = %.loopexit223, %538
  %556 = phi ptr [ %534, %538 ], [ %.pre209, %.loopexit223 ]
  %557 = trunc nuw i8 %.1119 to i1
  br i1 %557, label %465, label %.thread222, !llvm.loop !94

.thread222:                                       ; preds = %533, %.loopexit223, %.thread216
  %558 = phi ptr [ %556, %.thread216 ], [ %.pre209, %.loopexit223 ], [ %534, %533 ]
  invoke void @_ZN7doctest6detail12ContextState20finalizeTestCaseDataEv(ptr noundef nonnull align 8 dereferenceable(4446) %558)
          to label %559 unwind label %.loopexit.split-lp

559:                                              ; preds = %.thread222
  %560 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %561 = getelementptr inbounds i8, ptr %560, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #10
  %562 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %561) #10
  store ptr %562, ptr %41, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #10
  %563 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %561) #10
  store ptr %563, ptr %42, align 8
  %564 = 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 %564, label %.lr.ph185, label %._crit_edge186

._crit_edge186:                                   ; preds = %577, %559
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #10
  %565 = load ptr, ptr %0, align 8, !tbaa !9
  %566 = getelementptr inbounds i8, ptr %565, i64 32
  store ptr null, ptr %566, align 8, !tbaa !52
  %567 = getelementptr inbounds i8, ptr %565, i64 100
  %568 = load i32, ptr %567, align 4, !tbaa !90
  %569 = icmp sgt i32 %568, 0
  br i1 %569, label %582, label %585

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

577:                                              ; preds = %.lr.ph185
  %578 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  %579 = 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 %579, label %.lr.ph185, label %._crit_edge186

580:                                              ; preds = %.lr.ph185
  %581 = 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 %588

582:                                              ; preds = %._crit_edge186
  %583 = getelementptr inbounds i8, ptr %565, i64 156
  %584 = load i32, ptr %583, align 4, !tbaa !91
  %.not129 = icmp slt i32 %584, %568
  br i1 %.not129, label %585, label %._crit_edge192

585:                                              ; preds = %._crit_edge186, %582, %398, %._crit_edge189, %.thread154, %389, %.critedge, %419, %411
  %586 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPKN7doctest6detail8TestCaseESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #10
  %587 = 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 %587, label %279, label %._crit_edge192

588:                                              ; preds = %.loopexit, %.loopexit.split-lp, %531, %554, %580, %530, %463, %435, %429, %428, %399, %387, %303
  %.pn137 = phi { ptr, i32 } [ %388, %387 ], [ %400, %399 ], [ %.pn135, %435 ], [ %430, %429 ], [ %.pn132, %428 ], [ %464, %463 ], [ %304, %303 ], [ %555, %554 ], [ %581, %580 ], [ %532, %531 ], [ %.pn126, %530 ], [ %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 %635

._crit_edge192:                                   ; preds = %585, %582, %273
  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 %274, label %607, label %589

589:                                              ; preds = %._crit_edge192
  %590 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %591 = getelementptr inbounds i8, ptr %590, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #10
  %592 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %591) #10
  store ptr %592, ptr %43, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #10
  %593 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %591) #10
  store ptr %593, ptr %44, align 8
  %594 = 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 %594, label %.lr.ph195, label %._crit_edge196

._crit_edge196:                                   ; preds = %602, %589
  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 %630

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

602:                                              ; preds = %.lr.ph195
  %603 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #10
  %604 = 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 %604, label %.lr.ph195, label %._crit_edge196

605:                                              ; preds = %.lr.ph195
  %606 = 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 %635

607:                                              ; 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
  %608 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %609 = icmp eq ptr %608, null
  %610 = getelementptr inbounds i8, ptr %608, i64 136
  %spec.select3 = select i1 %609, ptr null, ptr %610
  store ptr %spec.select3, ptr %45, align 8, !tbaa !95
  %611 = call noundef ptr @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %612 = getelementptr inbounds i8, ptr %45, i64 8
  store ptr %611, ptr %612, align 8, !tbaa !97
  %613 = call noundef i64 @_ZNKSt6vectorIPKN7doctest12TestCaseDataESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %614 = trunc i64 %613 to i32
  %615 = getelementptr inbounds i8, ptr %45, i64 16
  store i32 %614, ptr %615, align 8, !tbaa !98
  %616 = load ptr, ptr @_ZN7doctest6detail4g_csE, align 8, !tbaa !5
  %617 = getelementptr inbounds i8, ptr %616, i64 4304
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #10
  %618 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %617) #10
  store ptr %618, ptr %46, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #10
  %619 = call ptr @_ZNSt6vectorIPN7doctest9IReporterESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %617) #10
  store ptr %619, ptr %47, align 8
  %620 = 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 %620, label %.lr.ph198, label %._crit_edge199

._crit_edge199:                                   ; preds = %625, %607
  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 %630

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

625:                                              ; preds = %.lr.ph198
  %626 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN7doctest9IReporterESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  %627 = 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 %627, label %.lr.ph198, label %._crit_edge199

628:                                              ; preds = %.lr.ph198
  %629 = 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 %635

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

632:                                              ; preds = %630
  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 %637

633:                                              ; preds = %630
  %634 = landingpad { ptr, i32 }
          cleanup
  br label %635

635:                                              ; preds = %633, %628, %605, %588, %271
  %.pn139 = phi { ptr, i32 } [ %629, %628 ], [ %634, %633 ], [ %606, %605 ], [ %.pn137, %588 ], [ %272, %271 ]
  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 %636

636:                                              ; preds = %635, %205, %197
  %.pn141 = phi { ptr, i32 } [ %198, %197 ], [ %.pn139, %635 ], [ %206, %205 ]
  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 %638

637:                                              ; preds = %._crit_edge202, %632
  %.0 = phi i32 [ %631, %632 ], [ %171, %._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

638:                                              ; preds = %636, %181, %179, %151, %132, %93
  %.pn143.pn = phi { ptr, i32 } [ %.pn143, %132 ], [ %152, %151 ], [ %180, %179 ], [ %182, %181 ], [ %.pn141, %636 ], [ %.pn, %93 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  br label %639

639:                                              ; preds = %638, %72
  %.pn143.pn.pn = phi { ptr, i32 } [ %.pn143.pn, %638 ], [ %73, %72 ]
  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

640:                                              ; preds = %530
  %641 = landingpad { ptr, i32 }
          catch ptr null
  %642 = extractvalue { ptr, i32 } %641, 0
  call void @__clang_call_terminate(ptr %642) #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(4446)) local_unnamed_addr #4 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 #4 align 2

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

; 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 #4 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 #4 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 #4

; 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 #4 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 #4 align 2

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

; 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 #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7doctest9QueryDataC2Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #5 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 #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIN7doctest6detail8TestCaseESt4lessIS2_ESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #4 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 #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZNKSt23_Rb_tree_const_iteratorIN7doctest6detail8TestCaseEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIPKN7doctest6detail8TestCaseESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKN7doctest12TestCaseDataESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 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 #5

; 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 #4 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 #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN7doctest12_GLOBAL__N_121FatalConditionHandlerD2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 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(4446)) 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 #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(264)) unnamed_addr #4 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 = { 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 #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 = { 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 = { 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 #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 4444}
!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, !73, i64 4368, !77, i64 4392, !16, i64 4440, !12, i64 4444, !85, i64 4445}
!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 = !{!"_ZTSSt3setISt6vectorIN7doctest16SubcaseSignatureESaIS2_EESt4lessIS4_ESaIS4_EE", !78, i64 0}
!78 = !{!"_ZTSSt8_Rb_treeISt6vectorIN7doctest16SubcaseSignatureESaIS2_EES4_St9_IdentityIS4_ESt4lessIS4_ESaIS4_EE", !79, i64 0}
!79 = !{!"_ZTSNSt8_Rb_treeISt6vectorIN7doctest16SubcaseSignatureESaIS2_EES4_St9_IdentityIS4_ESt4lessIS4_ESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !80, i64 0, !82, i64 8}
!80 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt6vectorIN7doctest16SubcaseSignatureESaIS3_EEEE", !81, i64 0}
!81 = !{!"_ZTSSt4lessISt6vectorIN7doctest16SubcaseSignatureESaIS2_EEE"}
!82 = !{!"_ZTSSt15_Rb_tree_header", !83, i64 0, !68, i64 32}
!83 = !{!"_ZTSSt18_Rb_tree_node_base", !84, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!84 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!85 = !{!"_ZTSSt6atomicIbE", !86, i64 0}
!86 = !{!"_ZTSSt13__atomic_baseIbE", !12, i64 0}
!87 = !{!57, !16, i64 4440}
!88 = !{!89, !6, i64 80}
!89 = !{!"_ZTSN7doctest6detail8TestCaseE", !42, i64 0, !6, i64 80, !6, i64 88, !16, i64 96, !15, i64 104}
!90 = !{!14, !16, i64 100}
!91 = !{!34, !16, i64 20}
!92 = !{!93, !12, i64 24}
!93 = !{!"_ZTSN7doctest17TestCaseExceptionE", !15, i64 0, !12, i64 24}
!94 = distinct !{!94, !37}
!95 = !{!96, !6, i64 0}
!96 = !{!"_ZTSN7doctest9QueryDataE", !6, i64 0, !6, i64 8, !16, i64 16}
!97 = !{!96, !6, i64 8}
!98 = !{!96, !16, i64 16}


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