; LLVM IR from niessner/Matterport :: code/gaps/pkgs/RNBasics/json.ll (ZN4Json6Reader9readValueEv)

; 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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.6" = type { i8 }
%"class.Json::Reader::Token" = type { i32, ptr, ptr }
%"class.Json::Value" = type { %"union.Json::Value::ValueHolder", i16, ptr, i64, i64 }
%"union.Json::Value::ValueHolder" = type { i64 }
%"class.Json::Reader" = type <{ %"class.std::stack", %"class.std::deque.0", %"class.std::__cxx11::basic_string", ptr, ptr, ptr, ptr, ptr, %"class.std::__cxx11::basic_string", %"class.Json::Features", i8, [3 x i8] }>
%"class.std::stack" = type { %"class.std::deque" }
%"class.std::deque" = type { %"class.std::_Deque_base" }
%"class.std::_Deque_base" = type { %"struct.std::_Deque_base<Json::Value *, std::allocator<Json::Value *>>::_Deque_impl" }
%"struct.std::_Deque_base<Json::Value *, std::allocator<Json::Value *>>::_Deque_impl" = type { %"struct.std::_Deque_base<Json::Value *, std::allocator<Json::Value *>>::_Deque_impl_data" }
%"struct.std::_Deque_base<Json::Value *, std::allocator<Json::Value *>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator", %"struct.std::_Deque_iterator" }
%"struct.std::_Deque_iterator" = type { ptr, ptr, ptr, ptr }
%"class.std::deque.0" = type { %"class.std::_Deque_base.1" }
%"class.std::_Deque_base.1" = type { %"struct.std::_Deque_base<Json::Reader::ErrorInfo, std::allocator<Json::Reader::ErrorInfo>>::_Deque_impl" }
%"struct.std::_Deque_base<Json::Reader::ErrorInfo, std::allocator<Json::Reader::ErrorInfo>>::_Deque_impl" = type { %"struct.std::_Deque_base<Json::Reader::ErrorInfo, std::allocator<Json::Reader::ErrorInfo>>::_Deque_impl_data" }
%"struct.std::_Deque_base<Json::Reader::ErrorInfo, std::allocator<Json::Reader::ErrorInfo>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator.5", %"struct.std::_Deque_iterator.5" }
%"struct.std::_Deque_iterator.5" = type { ptr, ptr, ptr, ptr }
%"class.Json::Features" = type { i8, i8, i8, i8 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@_ZL12stackDepth_g = external hidden global i32, align 4
@.str.2 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [47 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4Json6Reader9readValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i1, align 1
  %3 = alloca ptr, align 8
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::allocator.6", align 1
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.Json::Reader::Token", align 8
  %9 = alloca i8, align 1
  %10 = alloca %"class.Json::Value", align 8
  %11 = alloca %"class.Json::Value", align 8
  %12 = alloca %"class.Json::Value", align 8
  %13 = alloca %"class.Json::Value", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator.6", align 1
  %16 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %17 = load ptr, ptr %3, align 8
  %18 = load i32, ptr @_ZL12stackDepth_g, align 4, !tbaa !9
  %19 = icmp sge i32 %18, 1000
  br i1 %19, label %20, label %32

20:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 32, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #3
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %21 unwind label %23

21:                                               ; preds = %20
  invoke void @_ZN4Json17throwRuntimeErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %22 unwind label %27

22:                                               ; preds = %21
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #3
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %4) #3
  br label %32

23:                                               ; preds = %20
  %24 = landingpad { ptr, i32 }
          cleanup
  %25 = extractvalue { ptr, i32 } %24, 0
  store ptr %25, ptr %6, align 8
  %26 = extractvalue { ptr, i32 } %24, 1
  store i32 %26, ptr %7, align 4
  br label %31

27:                                               ; preds = %21
  %28 = landingpad { ptr, i32 }
          cleanup
  %29 = extractvalue { ptr, i32 } %28, 0
  store ptr %29, ptr %6, align 8
  %30 = extractvalue { ptr, i32 } %28, 1
  store i32 %30, ptr %7, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #3
  br label %31

31:                                               ; preds = %27, %23
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %4) #3
  br label %246

32:                                               ; preds = %22, %1
  %33 = load i32, ptr @_ZL12stackDepth_g, align 4, !tbaa !9
  %34 = add nsw i32 %33, 1
  store i32 %34, ptr @_ZL12stackDepth_g, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #3
  call void @_ZN4Json6Reader17skipCommentTokensERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %17, ptr noundef nonnull align 8 dereferenceable(24) %8)
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #3
  store i8 1, ptr %9, align 1, !tbaa !11
  %35 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 10
  %36 = load i8, ptr %35, align 4, !tbaa !13, !range !30, !noundef !31
  %37 = trunc i8 %36 to i1
  br i1 %37, label %38, label %46

38:                                               ; preds = %32
  %39 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 8
  %40 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %39) #3
  br i1 %40, label %46, label %41

41:                                               ; preds = %38
  %42 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
  %43 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 8
  call void @_ZN4Json5Value10setCommentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_16CommentPlacementE(ptr noundef nonnull align 8 dereferenceable(40) %42, ptr noundef nonnull align 8 dereferenceable(32) %43, i32 noundef 0)
  %44 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 8
  %45 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef @.str)
  br label %46

46:                                               ; preds = %41, %38, %32
  %47 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 0
  %48 = load i32, ptr %47, align 8, !tbaa !32
  switch i32 %48, label %199 [
    i32 1, label %49
    i32 3, label %60
    i32 6, label %71
    i32 5, label %74
    i32 7, label %77
    i32 8, label %105
    i32 9, label %133
    i32 10, label %161
    i32 2, label %161
    i32 4, label %161
  ]

49:                                               ; preds = %46
  %50 = call noundef zeroext i1 @_ZN4Json6Reader10readObjectERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %17, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %51 = zext i1 %50 to i8
  store i8 %51, ptr %9, align 1, !tbaa !11
  %52 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
  %53 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 5
  %54 = load ptr, ptr %53, align 8, !tbaa !35
  %55 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %56 = load ptr, ptr %55, align 8, !tbaa !36
  %57 = ptrtoint ptr %54 to i64
  %58 = ptrtoint ptr %56 to i64
  %59 = sub i64 %57, %58
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %52, i64 noundef %59)
  br label %228

60:                                               ; preds = %46
  %61 = call noundef zeroext i1 @_ZN4Json6Reader9readArrayERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %17, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %62 = zext i1 %61 to i8
  store i8 %62, ptr %9, align 1, !tbaa !11
  %63 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
  %64 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 5
  %65 = load ptr, ptr %64, align 8, !tbaa !35
  %66 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %67 = load ptr, ptr %66, align 8, !tbaa !36
  %68 = ptrtoint ptr %65 to i64
  %69 = ptrtoint ptr %67 to i64
  %70 = sub i64 %68, %69
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %63, i64 noundef %70)
  br label %228

71:                                               ; preds = %46
  %72 = call noundef zeroext i1 @_ZN4Json6Reader12decodeNumberERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %17, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %73 = zext i1 %72 to i8
  store i8 %73, ptr %9, align 1, !tbaa !11
  br label %228

74:                                               ; preds = %46
  %75 = call noundef zeroext i1 @_ZN4Json6Reader12decodeStringERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %17, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %76 = zext i1 %75 to i8
  store i8 %76, ptr %9, align 1, !tbaa !11
  br label %228

77:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 40, ptr %10) #3
  call void @_ZN4Json5ValueC1Eb(ptr noundef nonnull align 8 dereferenceable(40) %10, i1 noundef zeroext true)
  %78 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %79 unwind label %101

79:                                               ; preds = %77
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %78, ptr noundef nonnull align 8 dereferenceable(40) %10)
          to label %80 unwind label %101

80:                                               ; preds = %79
  %81 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %82 unwind label %101

82:                                               ; preds = %80
  %83 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 1
  %84 = load ptr, ptr %83, align 8, !tbaa !37
  %85 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %86 = load ptr, ptr %85, align 8, !tbaa !36
  %87 = ptrtoint ptr %84 to i64
  %88 = ptrtoint ptr %86 to i64
  %89 = sub i64 %87, %88
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %81, i64 noundef %89)
          to label %90 unwind label %101

90:                                               ; preds = %82
  %91 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %92 unwind label %101

92:                                               ; preds = %90
  %93 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 2
  %94 = load ptr, ptr %93, align 8, !tbaa !38
  %95 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %96 = load ptr, ptr %95, align 8, !tbaa !36
  %97 = ptrtoint ptr %94 to i64
  %98 = ptrtoint ptr %96 to i64
  %99 = sub i64 %97, %98
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %91, i64 noundef %99)
          to label %100 unwind label %101

100:                                              ; preds = %92
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #3
  br label %228

101:                                              ; preds = %92, %90, %82, %80, %79, %77
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %6, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %7, align 4
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #3
  br label %245

105:                                              ; preds = %46
  call void @llvm.lifetime.start.p0(i64 40, ptr %11) #3
  call void @_ZN4Json5ValueC1Eb(ptr noundef nonnull align 8 dereferenceable(40) %11, i1 noundef zeroext false)
  %106 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %107 unwind label %129

107:                                              ; preds = %105
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %106, ptr noundef nonnull align 8 dereferenceable(40) %11)
          to label %108 unwind label %129

108:                                              ; preds = %107
  %109 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %110 unwind label %129

110:                                              ; preds = %108
  %111 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 1
  %112 = load ptr, ptr %111, align 8, !tbaa !37
  %113 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %114 = load ptr, ptr %113, align 8, !tbaa !36
  %115 = ptrtoint ptr %112 to i64
  %116 = ptrtoint ptr %114 to i64
  %117 = sub i64 %115, %116
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %109, i64 noundef %117)
          to label %118 unwind label %129

118:                                              ; preds = %110
  %119 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %120 unwind label %129

120:                                              ; preds = %118
  %121 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 2
  %122 = load ptr, ptr %121, align 8, !tbaa !38
  %123 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %124 = load ptr, ptr %123, align 8, !tbaa !36
  %125 = ptrtoint ptr %122 to i64
  %126 = ptrtoint ptr %124 to i64
  %127 = sub i64 %125, %126
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %119, i64 noundef %127)
          to label %128 unwind label %129

128:                                              ; preds = %120
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #3
  br label %228

129:                                              ; preds = %120, %118, %110, %108, %107, %105
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %6, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %7, align 4
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #3
  br label %245

133:                                              ; preds = %46
  call void @llvm.lifetime.start.p0(i64 40, ptr %12) #3
  call void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr noundef nonnull align 8 dereferenceable(40) %12, i32 noundef 0)
  %134 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %135 unwind label %157

135:                                              ; preds = %133
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %134, ptr noundef nonnull align 8 dereferenceable(40) %12)
          to label %136 unwind label %157

136:                                              ; preds = %135
  %137 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %138 unwind label %157

138:                                              ; preds = %136
  %139 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 1
  %140 = load ptr, ptr %139, align 8, !tbaa !37
  %141 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %142 = load ptr, ptr %141, align 8, !tbaa !36
  %143 = ptrtoint ptr %140 to i64
  %144 = ptrtoint ptr %142 to i64
  %145 = sub i64 %143, %144
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %137, i64 noundef %145)
          to label %146 unwind label %157

146:                                              ; preds = %138
  %147 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %148 unwind label %157

148:                                              ; preds = %146
  %149 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 2
  %150 = load ptr, ptr %149, align 8, !tbaa !38
  %151 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %152 = load ptr, ptr %151, align 8, !tbaa !36
  %153 = ptrtoint ptr %150 to i64
  %154 = ptrtoint ptr %152 to i64
  %155 = sub i64 %153, %154
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %147, i64 noundef %155)
          to label %156 unwind label %157

156:                                              ; preds = %148
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %12) #3
  br label %228

157:                                              ; preds = %148, %146, %138, %136, %135, %133
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %6, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %7, align 4
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %12) #3
  br label %245

161:                                              ; preds = %46, %46, %46
  %162 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 9
  %163 = getelementptr inbounds %"class.Json::Features", ptr %162, i32 0, i32 2
  %164 = load i8, ptr %163, align 2, !tbaa !39, !range !30, !noundef !31
  %165 = trunc i8 %164 to i1
  br i1 %165, label %166, label %198

166:                                              ; preds = %161
  %167 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 5
  %168 = load ptr, ptr %167, align 8, !tbaa !35
  %169 = getelementptr inbounds i8, ptr %168, i32 -1
  store ptr %169, ptr %167, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 40, ptr %13) #3
  call void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr noundef nonnull align 8 dereferenceable(40) %13, i32 noundef 0)
  %170 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %171 unwind label %194

171:                                              ; preds = %166
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %170, ptr noundef nonnull align 8 dereferenceable(40) %13)
          to label %172 unwind label %194

172:                                              ; preds = %171
  %173 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %174 unwind label %194

174:                                              ; preds = %172
  %175 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 5
  %176 = load ptr, ptr %175, align 8, !tbaa !35
  %177 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %178 = load ptr, ptr %177, align 8, !tbaa !36
  %179 = ptrtoint ptr %176 to i64
  %180 = ptrtoint ptr %178 to i64
  %181 = sub i64 %179, %180
  %182 = sub nsw i64 %181, 1
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %173, i64 noundef %182)
          to label %183 unwind label %194

183:                                              ; preds = %174
  %184 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
          to label %185 unwind label %194

185:                                              ; preds = %183
  %186 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 5
  %187 = load ptr, ptr %186, align 8, !tbaa !35
  %188 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %189 = load ptr, ptr %188, align 8, !tbaa !36
  %190 = ptrtoint ptr %187 to i64
  %191 = ptrtoint ptr %189 to i64
  %192 = sub i64 %190, %191
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %184, i64 noundef %192)
          to label %193 unwind label %194

193:                                              ; preds = %185
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #3
  br label %228

194:                                              ; preds = %185, %183, %174, %172, %171, %166
  %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
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #3
  br label %245

198:                                              ; preds = %161
  br label %199

199:                                              ; preds = %198, %46
  %200 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
  %201 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 1
  %202 = load ptr, ptr %201, align 8, !tbaa !37
  %203 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %204 = load ptr, ptr %203, align 8, !tbaa !36
  %205 = ptrtoint ptr %202 to i64
  %206 = ptrtoint ptr %204 to i64
  %207 = sub i64 %205, %206
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %200, i64 noundef %207)
  %208 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
  %209 = getelementptr inbounds %"class.Json::Reader::Token", ptr %8, i32 0, i32 2
  %210 = load ptr, ptr %209, align 8, !tbaa !38
  %211 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 3
  %212 = load ptr, ptr %211, align 8, !tbaa !36
  %213 = ptrtoint ptr %210 to i64
  %214 = ptrtoint ptr %212 to i64
  %215 = sub i64 %213, %214
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %208, i64 noundef %215)
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #3
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %216 unwind label %219

216:                                              ; preds = %199
  %217 = invoke noundef zeroext i1 @_ZN4Json6Reader8addErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_5TokenEPKc(ptr noundef nonnull align 8 dereferenceable(269) %17, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef null)
          to label %218 unwind label %223

218:                                              ; preds = %216
  store i1 %217, ptr %2, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #3
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #3
  store i32 1, ptr %16, align 4
  br label %243

219:                                              ; preds = %199
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %6, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %7, align 4
  br label %227

223:                                              ; preds = %216
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %6, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %7, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #3
  br label %227

227:                                              ; preds = %223, %219
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #3
  br label %245

228:                                              ; preds = %193, %156, %128, %100, %74, %71, %60, %49
  %229 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 10
  %230 = load i8, ptr %229, align 4, !tbaa !13, !range !30, !noundef !31
  %231 = trunc i8 %230 to i1
  br i1 %231, label %232, label %238

232:                                              ; preds = %228
  %233 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 5
  %234 = load ptr, ptr %233, align 8, !tbaa !35
  %235 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 6
  store ptr %234, ptr %235, align 8, !tbaa !40
  %236 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %17)
  %237 = getelementptr inbounds %"class.Json::Reader", ptr %17, i32 0, i32 7
  store ptr %236, ptr %237, align 8, !tbaa !41
  br label %238

238:                                              ; preds = %232, %228
  %239 = load i32, ptr @_ZL12stackDepth_g, align 4, !tbaa !9
  %240 = add nsw i32 %239, -1
  store i32 %240, ptr @_ZL12stackDepth_g, align 4, !tbaa !9
  %241 = load i8, ptr %9, align 1, !tbaa !11, !range !30, !noundef !31
  %242 = trunc i8 %241 to i1
  store i1 %242, ptr %2, align 1
  store i32 1, ptr %16, align 4
  br label %243

243:                                              ; preds = %238, %218
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #3
  %244 = load i1, ptr %2, align 1
  ret i1 %244

245:                                              ; preds = %227, %194, %157, %129, %101
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #3
  br label %246

246:                                              ; preds = %245, %31
  %247 = load ptr, ptr %6, align 8
  %248 = load i32, ptr %7, align 4
  %249 = insertvalue { ptr, i32 } poison, ptr %247, 0
  %250 = insertvalue { ptr, i32 } %249, i32 %248, 1
  resume { ptr, i32 } %250
}

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Json5Value10setCommentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_16CommentPlacementE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN4Json6Reader8addErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_5TokenEPKc(ptr noundef nonnull align 8 dereferenceable(269), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #2 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #0 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #0 align 2

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

declare void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr, i32)

declare void @_ZN4Json5ValueC1Eb(ptr, i1)

declare void @_ZN4Json5ValueD1Ev(ptr)

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !12, i64 268}
!14 = !{!"_ZTSN4Json6ReaderE", !15, i64 0, !22, i64 80, !27, i64 160, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !27, i64 232, !29, i64 264, !12, i64 268}
!15 = !{!"_ZTSSt5stackIPN4Json5ValueESt5dequeIS2_SaIS2_EEE", !16, i64 0}
!16 = !{!"_ZTSSt5dequeIPN4Json5ValueESaIS2_EE", !17, i64 0}
!17 = !{!"_ZTSSt11_Deque_baseIPN4Json5ValueESaIS2_EE", !18, i64 0}
!18 = !{!"_ZTSNSt11_Deque_baseIPN4Json5ValueESaIS2_EE11_Deque_implE", !19, i64 0}
!19 = !{!"_ZTSNSt11_Deque_baseIPN4Json5ValueESaIS2_EE16_Deque_impl_dataE", !6, i64 0, !20, i64 8, !21, i64 16, !21, i64 48}
!20 = !{!"long", !7, i64 0}
!21 = !{!"_ZTSSt15_Deque_iteratorIPN4Json5ValueERS2_PS2_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!22 = !{!"_ZTSSt5dequeIN4Json6Reader9ErrorInfoESaIS2_EE", !23, i64 0}
!23 = !{!"_ZTSSt11_Deque_baseIN4Json6Reader9ErrorInfoESaIS2_EE", !24, i64 0}
!24 = !{!"_ZTSNSt11_Deque_baseIN4Json6Reader9ErrorInfoESaIS2_EE11_Deque_implE", !25, i64 0}
!25 = !{!"_ZTSNSt11_Deque_baseIN4Json6Reader9ErrorInfoESaIS2_EE16_Deque_impl_dataE", !6, i64 0, !20, i64 8, !26, i64 16, !26, i64 48}
!26 = !{!"_ZTSSt15_Deque_iteratorIN4Json6Reader9ErrorInfoERS2_PS2_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!27 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !28, i64 0, !20, i64 8, !7, i64 16}
!28 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!29 = !{!"_ZTSN4Json8FeaturesE", !12, i64 0, !12, i64 1, !12, i64 2, !12, i64 3}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!33, !34, i64 0}
!33 = !{!"_ZTSN4Json6Reader5TokenE", !34, i64 0, !6, i64 8, !6, i64 16}
!34 = !{!"_ZTSN4Json6Reader9TokenTypeE", !7, i64 0}
!35 = !{!14, !6, i64 208}
!36 = !{!14, !6, i64 192}
!37 = !{!33, !6, i64 8}
!38 = !{!33, !6, i64 16}
!39 = !{!14, !12, i64 266}
!40 = !{!14, !6, i64 216}
!41 = !{!14, !6, i64 224}


; 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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.6" = type { i8 }
%"class.Json::Reader::Token" = type { i32, ptr, ptr }
%"class.Json::Value" = type { %"union.Json::Value::ValueHolder", i16, ptr, i64, i64 }
%"union.Json::Value::ValueHolder" = type { i64 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@_ZL12stackDepth_g = external hidden local_unnamed_addr global i32, align 4
@.str.2 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [47 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4Json6Reader9readValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::__cxx11::basic_string", align 8
  %3 = alloca %"class.std::allocator.6", align 1
  %4 = alloca %"class.Json::Reader::Token", align 8
  %5 = alloca %"class.Json::Value", align 8
  %6 = alloca %"class.Json::Value", align 8
  %7 = alloca %"class.Json::Value", align 8
  %8 = alloca %"class.Json::Value", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator.6", align 1
  %11 = load i32, ptr @_ZL12stackDepth_g, align 4, !tbaa !5
  %12 = icmp sgt i32 %11, 999
  br i1 %12, label %13, label %21

13:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #3
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %3)
          to label %14 unwind label %16

14:                                               ; preds = %13
  invoke void @_ZN4Json17throwRuntimeErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %15 unwind label %18

15:                                               ; preds = %14
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #3
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #3
  %.pre = load i32, ptr @_ZL12stackDepth_g, align 4, !tbaa !5
  br label %21

16:                                               ; preds = %13
  %17 = landingpad { ptr, i32 }
          cleanup
  br label %20

18:                                               ; preds = %14
  %19 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #3
  br label %20

20:                                               ; preds = %18, %16
  %.pn = phi { ptr, i32 } [ %19, %18 ], [ %17, %16 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #3
  br label %191

21:                                               ; preds = %15, %1
  %22 = phi i32 [ %.pre, %15 ], [ %11, %1 ]
  %23 = add nsw i32 %22, 1
  store i32 %23, ptr @_ZL12stackDepth_g, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #3
  call void @_ZN4Json6Reader17skipCommentTokensERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  %24 = getelementptr inbounds i8, ptr %0, i64 268
  %25 = load i8, ptr %24, align 4, !tbaa !9, !range !28, !noundef !29
  %26 = trunc nuw i8 %25 to i1
  br i1 %26, label %27, label %33

27:                                               ; preds = %21
  %28 = getelementptr inbounds i8, ptr %0, i64 232
  %29 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %28) #3
  br i1 %29, label %33, label %30

30:                                               ; preds = %27
  %31 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
  call void @_ZN4Json5Value10setCommentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_16CommentPlacementE(ptr noundef nonnull align 8 dereferenceable(40) %31, ptr noundef nonnull align 8 dereferenceable(32) %28, i32 noundef 0)
  %32 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull @.str)
  br label %33

33:                                               ; preds = %30, %27, %21
  %34 = load i32, ptr %4, align 8, !tbaa !30
  switch i32 %34, label %153 [
    i32 1, label %35
    i32 3, label %45
    i32 6, label %55
    i32 5, label %57
    i32 7, label %59
    i32 8, label %81
    i32 9, label %103
    i32 10, label %125
    i32 2, label %125
    i32 4, label %125
  ]

35:                                               ; preds = %33
  %36 = call noundef zeroext i1 @_ZN4Json6Reader10readObjectERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  %37 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
  %38 = getelementptr inbounds i8, ptr %0, i64 208
  %39 = load ptr, ptr %38, align 8, !tbaa !33
  %40 = getelementptr inbounds i8, ptr %0, i64 192
  %41 = load ptr, ptr %40, align 8, !tbaa !34
  %42 = ptrtoint ptr %39 to i64
  %43 = ptrtoint ptr %41 to i64
  %44 = sub i64 %42, %43
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %37, i64 noundef %44)
  br label %177

45:                                               ; preds = %33
  %46 = call noundef zeroext i1 @_ZN4Json6Reader9readArrayERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  %47 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
  %48 = getelementptr inbounds i8, ptr %0, i64 208
  %49 = load ptr, ptr %48, align 8, !tbaa !33
  %50 = getelementptr inbounds i8, ptr %0, i64 192
  %51 = load ptr, ptr %50, align 8, !tbaa !34
  %52 = ptrtoint ptr %49 to i64
  %53 = ptrtoint ptr %51 to i64
  %54 = sub i64 %52, %53
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %47, i64 noundef %54)
  br label %177

55:                                               ; preds = %33
  %56 = call noundef zeroext i1 @_ZN4Json6Reader12decodeNumberERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  br label %177

57:                                               ; preds = %33
  %58 = call noundef zeroext i1 @_ZN4Json6Reader12decodeStringERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(269) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  br label %177

59:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #3
  call void @_ZN4Json5ValueC1Eb(ptr noundef nonnull align 8 dereferenceable(40) %5, i1 noundef zeroext true)
  %60 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %61 unwind label %79

61:                                               ; preds = %59
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %60, ptr noundef nonnull align 8 dereferenceable(40) %5)
  %62 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %63 unwind label %79

63:                                               ; preds = %61
  %64 = getelementptr inbounds i8, ptr %4, i64 8
  %65 = load ptr, ptr %64, align 8, !tbaa !35
  %66 = getelementptr inbounds i8, ptr %0, i64 192
  %67 = load ptr, ptr %66, align 8, !tbaa !34
  %68 = ptrtoint ptr %65 to i64
  %69 = ptrtoint ptr %67 to i64
  %70 = sub i64 %68, %69
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %62, i64 noundef %70)
  %71 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %72 unwind label %79

72:                                               ; preds = %63
  %73 = getelementptr inbounds i8, ptr %4, i64 16
  %74 = load ptr, ptr %73, align 8, !tbaa !36
  %75 = load ptr, ptr %66, align 8, !tbaa !34
  %76 = ptrtoint ptr %74 to i64
  %77 = ptrtoint ptr %75 to i64
  %78 = sub i64 %76, %77
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %71, i64 noundef %78)
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #3
  br label %177

79:                                               ; preds = %63, %61, %59
  %80 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #3
  br label %190

81:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %6) #3
  call void @_ZN4Json5ValueC1Eb(ptr noundef nonnull align 8 dereferenceable(40) %6, i1 noundef zeroext false)
  %82 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %83 unwind label %101

83:                                               ; preds = %81
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %6)
  %84 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %85 unwind label %101

85:                                               ; preds = %83
  %86 = getelementptr inbounds i8, ptr %4, i64 8
  %87 = load ptr, ptr %86, align 8, !tbaa !35
  %88 = getelementptr inbounds i8, ptr %0, i64 192
  %89 = load ptr, ptr %88, align 8, !tbaa !34
  %90 = ptrtoint ptr %87 to i64
  %91 = ptrtoint ptr %89 to i64
  %92 = sub i64 %90, %91
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %84, i64 noundef %92)
  %93 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %94 unwind label %101

94:                                               ; preds = %85
  %95 = getelementptr inbounds i8, ptr %4, i64 16
  %96 = load ptr, ptr %95, align 8, !tbaa !36
  %97 = load ptr, ptr %88, align 8, !tbaa !34
  %98 = ptrtoint ptr %96 to i64
  %99 = ptrtoint ptr %97 to i64
  %100 = sub i64 %98, %99
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %93, i64 noundef %100)
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #3
  br label %177

101:                                              ; preds = %85, %83, %81
  %102 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #3
  br label %190

103:                                              ; preds = %33
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #3
  call void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr noundef nonnull align 8 dereferenceable(40) %7, i32 noundef 0)
  %104 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %105 unwind label %123

105:                                              ; preds = %103
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(40) %7)
  %106 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %107 unwind label %123

107:                                              ; preds = %105
  %108 = getelementptr inbounds i8, ptr %4, i64 8
  %109 = load ptr, ptr %108, align 8, !tbaa !35
  %110 = getelementptr inbounds i8, ptr %0, i64 192
  %111 = load ptr, ptr %110, align 8, !tbaa !34
  %112 = ptrtoint ptr %109 to i64
  %113 = ptrtoint ptr %111 to i64
  %114 = sub i64 %112, %113
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %106, i64 noundef %114)
  %115 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %116 unwind label %123

116:                                              ; preds = %107
  %117 = getelementptr inbounds i8, ptr %4, i64 16
  %118 = load ptr, ptr %117, align 8, !tbaa !36
  %119 = load ptr, ptr %110, align 8, !tbaa !34
  %120 = ptrtoint ptr %118 to i64
  %121 = ptrtoint ptr %119 to i64
  %122 = sub i64 %120, %121
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %115, i64 noundef %122)
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #3
  br label %177

123:                                              ; preds = %107, %105, %103
  %124 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #3
  br label %190

125:                                              ; preds = %33, %33, %33
  %126 = getelementptr inbounds i8, ptr %0, i64 266
  %127 = load i8, ptr %126, align 2, !tbaa !37, !range !28, !noundef !29
  %128 = trunc nuw i8 %127 to i1
  br i1 %128, label %129, label %153

129:                                              ; preds = %125
  %130 = getelementptr inbounds i8, ptr %0, i64 208
  %131 = load ptr, ptr %130, align 8, !tbaa !33
  %132 = getelementptr inbounds i8, ptr %131, i64 -1
  store ptr %132, ptr %130, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #3
  call void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr noundef nonnull align 8 dereferenceable(40) %8, i32 noundef 0)
  %133 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %134 unwind label %151

134:                                              ; preds = %129
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %133, ptr noundef nonnull align 8 dereferenceable(40) %8)
  %135 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %136 unwind label %151

136:                                              ; preds = %134
  %137 = load ptr, ptr %130, align 8, !tbaa !33
  %138 = getelementptr inbounds i8, ptr %0, i64 192
  %139 = load ptr, ptr %138, align 8, !tbaa !34
  %140 = ptrtoint ptr %137 to i64
  %141 = ptrtoint ptr %139 to i64
  %142 = xor i64 %141, -1
  %143 = add i64 %142, %140
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %135, i64 noundef %143)
  %144 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
          to label %145 unwind label %151

145:                                              ; preds = %136
  %146 = load ptr, ptr %130, align 8, !tbaa !33
  %147 = load ptr, ptr %138, align 8, !tbaa !34
  %148 = ptrtoint ptr %146 to i64
  %149 = ptrtoint ptr %147 to i64
  %150 = sub i64 %148, %149
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %144, i64 noundef %150)
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #3
  br label %177

151:                                              ; preds = %136, %134, %129
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #3
  br label %190

153:                                              ; preds = %125, %33
  %154 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
  %155 = getelementptr inbounds i8, ptr %4, i64 8
  %156 = load ptr, ptr %155, align 8, !tbaa !35
  %157 = getelementptr inbounds i8, ptr %0, i64 192
  %158 = load ptr, ptr %157, align 8, !tbaa !34
  %159 = ptrtoint ptr %156 to i64
  %160 = ptrtoint ptr %158 to i64
  %161 = sub i64 %159, %160
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %154, i64 noundef %161)
  %162 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
  %163 = getelementptr inbounds i8, ptr %4, i64 16
  %164 = load ptr, ptr %163, align 8, !tbaa !36
  %165 = load ptr, ptr %157, align 8, !tbaa !34
  %166 = ptrtoint ptr %164 to i64
  %167 = ptrtoint ptr %165 to i64
  %168 = sub i64 %166, %167
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %162, i64 noundef %168)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #3
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %169 unwind label %172

169:                                              ; preds = %153
  %170 = invoke noundef zeroext i1 @_ZN4Json6Reader8addErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_5TokenEPKc(ptr noundef nonnull align 8 dereferenceable(269) %0, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef null)
          to label %171 unwind label %174

171:                                              ; preds = %169
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #3
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #3
  br label %189

172:                                              ; preds = %153
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %176

174:                                              ; preds = %169
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #3
  br label %176

176:                                              ; preds = %174, %172
  %.pn11 = phi { ptr, i32 } [ %175, %174 ], [ %173, %172 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #3
  br label %190

177:                                              ; preds = %145, %116, %94, %72, %57, %55, %45, %35
  %.0.shrunk = phi i1 [ true, %145 ], [ true, %116 ], [ true, %94 ], [ true, %72 ], [ %58, %57 ], [ %56, %55 ], [ %46, %45 ], [ %36, %35 ]
  %178 = load i8, ptr %24, align 4, !tbaa !9, !range !28, !noundef !29
  %179 = trunc nuw i8 %178 to i1
  br i1 %179, label %180, label %186

180:                                              ; preds = %177
  %181 = getelementptr inbounds i8, ptr %0, i64 208
  %182 = load ptr, ptr %181, align 8, !tbaa !33
  %183 = getelementptr inbounds i8, ptr %0, i64 216
  store ptr %182, ptr %183, align 8, !tbaa !38
  %184 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json6Reader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(269) %0)
  %185 = getelementptr inbounds i8, ptr %0, i64 224
  store ptr %184, ptr %185, align 8, !tbaa !39
  br label %186

186:                                              ; preds = %180, %177
  %187 = load i32, ptr @_ZL12stackDepth_g, align 4, !tbaa !5
  %188 = add nsw i32 %187, -1
  store i32 %188, ptr @_ZL12stackDepth_g, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %186, %171
  %.09 = phi i1 [ %170, %171 ], [ %.0.shrunk, %186 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #3
  ret i1 %.09

190:                                              ; preds = %176, %151, %123, %101, %79
  %.pn11.pn = phi { ptr, i32 } [ %.pn11, %176 ], [ %152, %151 ], [ %124, %123 ], [ %102, %101 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #3
  br label %191

191:                                              ; preds = %190, %20
  %.pn11.pn.pn = phi { ptr, i32 } [ %.pn11.pn, %190 ], [ %.pn, %20 ]
  resume { ptr, i32 } %.pn11.pn.pn
}

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Json5Value10setCommentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_16CommentPlacementE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #2 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #0 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #0 align 2

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

declare void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr, i32) local_unnamed_addr

declare void @_ZN4Json5ValueC1Eb(ptr, i1) local_unnamed_addr

declare void @_ZN4Json5ValueD1Ev(ptr) local_unnamed_addr

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !27, i64 268}
!10 = !{!"_ZTSN4Json6ReaderE", !11, i64 0, !19, i64 80, !24, i64 160, !16, i64 192, !16, i64 200, !16, i64 208, !16, i64 216, !16, i64 224, !24, i64 232, !26, i64 264, !27, i64 268}
!11 = !{!"_ZTSSt5stackIPN4Json5ValueESt5dequeIS2_SaIS2_EEE", !12, i64 0}
!12 = !{!"_ZTSSt5dequeIPN4Json5ValueESaIS2_EE", !13, i64 0}
!13 = !{!"_ZTSSt11_Deque_baseIPN4Json5ValueESaIS2_EE", !14, i64 0}
!14 = !{!"_ZTSNSt11_Deque_baseIPN4Json5ValueESaIS2_EE11_Deque_implE", !15, i64 0}
!15 = !{!"_ZTSNSt11_Deque_baseIPN4Json5ValueESaIS2_EE16_Deque_impl_dataE", !16, i64 0, !17, i64 8, !18, i64 16, !18, i64 48}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_ZTSSt15_Deque_iteratorIPN4Json5ValueERS2_PS2_E", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!19 = !{!"_ZTSSt5dequeIN4Json6Reader9ErrorInfoESaIS2_EE", !20, i64 0}
!20 = !{!"_ZTSSt11_Deque_baseIN4Json6Reader9ErrorInfoESaIS2_EE", !21, i64 0}
!21 = !{!"_ZTSNSt11_Deque_baseIN4Json6Reader9ErrorInfoESaIS2_EE11_Deque_implE", !22, i64 0}
!22 = !{!"_ZTSNSt11_Deque_baseIN4Json6Reader9ErrorInfoESaIS2_EE16_Deque_impl_dataE", !16, i64 0, !17, i64 8, !23, i64 16, !23, i64 48}
!23 = !{!"_ZTSSt15_Deque_iteratorIN4Json6Reader9ErrorInfoERS2_PS2_E", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !25, i64 0, !17, i64 8, !7, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!26 = !{!"_ZTSN4Json8FeaturesE", !27, i64 0, !27, i64 1, !27, i64 2, !27, i64 3}
!27 = !{!"bool", !7, i64 0}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!31, !32, i64 0}
!31 = !{!"_ZTSN4Json6Reader5TokenE", !32, i64 0, !16, i64 8, !16, i64 16}
!32 = !{!"_ZTSN4Json6Reader9TokenTypeE", !7, i64 0}
!33 = !{!10, !16, i64 208}
!34 = !{!10, !16, i64 192}
!35 = !{!31, !16, i64 8}
!36 = !{!31, !16, i64 16}
!37 = !{!10, !27, i64 266}
!38 = !{!10, !16, i64 216}
!39 = !{!10, !16, i64 224}


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