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

; 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::OurReader::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::OurReader" = type <{ %"class.std::stack", %"class.std::deque.13", %"class.std::__cxx11::basic_string", ptr, ptr, ptr, ptr, ptr, %"class.std::__cxx11::basic_string", i32, %"class.Json::OurFeatures", i8, [7 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.13" = type { %"class.std::_Deque_base.14" }
%"class.std::_Deque_base.14" = type { %"struct.std::_Deque_base<Json::OurReader::ErrorInfo, std::allocator<Json::OurReader::ErrorInfo>>::_Deque_impl" }
%"struct.std::_Deque_base<Json::OurReader::ErrorInfo, std::allocator<Json::OurReader::ErrorInfo>>::_Deque_impl" = type { %"struct.std::_Deque_base<Json::OurReader::ErrorInfo, std::allocator<Json::OurReader::ErrorInfo>>::_Deque_impl_data" }
%"struct.std::_Deque_base<Json::OurReader::ErrorInfo, std::allocator<Json::OurReader::ErrorInfo>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator.18", %"struct.std::_Deque_iterator.18" }
%"struct.std::_Deque_iterator.18" = type { ptr, ptr, ptr, ptr }
%"class.Json::OurFeatures" = type { i8, i8, i8, i8, i8, i8, i8, i8, i32 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@.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 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 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 nounwind uwtable
declare dso_local void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #0 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 uwtable
define dso_local noundef zeroext i1 @_ZN4Json9OurReader9readValueEv(ptr noundef nonnull align 8 dereferenceable(281) %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::OurReader::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.Json::Value", align 8
  %15 = alloca %"class.Json::Value", align 8
  %16 = alloca %"class.Json::Value", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::allocator.6", align 1
  %19 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %20 = load ptr, ptr %3, align 8
  %21 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 9
  %22 = load i32, ptr %21, align 8, !tbaa !9
  %23 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 10
  %24 = getelementptr inbounds %"class.Json::OurFeatures", ptr %23, i32 0, i32 8
  %25 = load i32, ptr %24, align 4, !tbaa !28
  %26 = icmp sge i32 %22, %25
  br i1 %26, label %27, label %39

27:                                               ; 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 %28 unwind label %30

28:                                               ; preds = %27
  invoke void @_ZN4Json17throwRuntimeErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %29 unwind label %34

29:                                               ; preds = %28
  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 %39

30:                                               ; preds = %27
  %31 = landingpad { ptr, i32 }
          cleanup
  %32 = extractvalue { ptr, i32 } %31, 0
  store ptr %32, ptr %6, align 8
  %33 = extractvalue { ptr, i32 } %31, 1
  store i32 %33, ptr %7, align 4
  br label %38

34:                                               ; preds = %28
  %35 = landingpad { ptr, i32 }
          cleanup
  %36 = extractvalue { ptr, i32 } %35, 0
  store ptr %36, ptr %6, align 8
  %37 = extractvalue { ptr, i32 } %35, 1
  store i32 %37, ptr %7, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #3
  br label %38

38:                                               ; preds = %34, %30
  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 %343

39:                                               ; preds = %29, %1
  %40 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 9
  %41 = load i32, ptr %40, align 8, !tbaa !9
  %42 = add nsw i32 %41, 1
  store i32 %42, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #3
  call void @_ZN4Json9OurReader17skipCommentTokensERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %20, 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 !29
  %43 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 11
  %44 = load i8, ptr %43, align 8, !tbaa !30, !range !31, !noundef !32
  %45 = trunc i8 %44 to i1
  br i1 %45, label %46, label %54

46:                                               ; preds = %39
  %47 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 8
  %48 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %47) #3
  br i1 %48, label %54, label %49

49:                                               ; preds = %46
  %50 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
  %51 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 8
  call void @_ZN4Json5Value10setCommentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_16CommentPlacementE(ptr noundef nonnull align 8 dereferenceable(40) %50, ptr noundef nonnull align 8 dereferenceable(32) %51, i32 noundef 0)
  %52 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 8
  %53 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef @.str)
  br label %54

54:                                               ; preds = %49, %46, %39
  %55 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 0
  %56 = load i32, ptr %55, align 8, !tbaa !33
  switch i32 %56, label %295 [
    i32 1, label %57
    i32 3, label %68
    i32 6, label %79
    i32 5, label %82
    i32 7, label %85
    i32 8, label %113
    i32 9, label %141
    i32 10, label %169
    i32 11, label %198
    i32 12, label %227
    i32 13, label %257
    i32 2, label %257
    i32 4, label %257
  ]

57:                                               ; preds = %54
  %58 = call noundef zeroext i1 @_ZN4Json9OurReader10readObjectERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %20, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %59 = zext i1 %58 to i8
  store i8 %59, ptr %9, align 1, !tbaa !29
  %60 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
  %61 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 5
  %62 = load ptr, ptr %61, align 8, !tbaa !36
  %63 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %64 = load ptr, ptr %63, align 8, !tbaa !37
  %65 = ptrtoint ptr %62 to i64
  %66 = ptrtoint ptr %64 to i64
  %67 = sub i64 %65, %66
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %60, i64 noundef %67)
  br label %324

68:                                               ; preds = %54
  %69 = call noundef zeroext i1 @_ZN4Json9OurReader9readArrayERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %20, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %70 = zext i1 %69 to i8
  store i8 %70, ptr %9, align 1, !tbaa !29
  %71 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
  %72 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 5
  %73 = load ptr, ptr %72, align 8, !tbaa !36
  %74 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %75 = load ptr, ptr %74, align 8, !tbaa !37
  %76 = ptrtoint ptr %73 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)
  br label %324

79:                                               ; preds = %54
  %80 = call noundef zeroext i1 @_ZN4Json9OurReader12decodeNumberERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %20, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %81 = zext i1 %80 to i8
  store i8 %81, ptr %9, align 1, !tbaa !29
  br label %324

82:                                               ; preds = %54
  %83 = call noundef zeroext i1 @_ZN4Json9OurReader12decodeStringERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %20, ptr noundef nonnull align 8 dereferenceable(24) %8)
  %84 = zext i1 %83 to i8
  store i8 %84, ptr %9, align 1, !tbaa !29
  br label %324

85:                                               ; preds = %54
  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)
  %86 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %87 unwind label %109

87:                                               ; preds = %85
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %86, ptr noundef nonnull align 8 dereferenceable(40) %10)
          to label %88 unwind label %109

88:                                               ; preds = %87
  %89 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %90 unwind label %109

90:                                               ; preds = %88
  %91 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 1
  %92 = load ptr, ptr %91, align 8, !tbaa !38
  %93 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %94 = load ptr, ptr %93, align 8, !tbaa !37
  %95 = ptrtoint ptr %92 to i64
  %96 = ptrtoint ptr %94 to i64
  %97 = sub i64 %95, %96
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %89, i64 noundef %97)
          to label %98 unwind label %109

98:                                               ; preds = %90
  %99 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %100 unwind label %109

100:                                              ; preds = %98
  %101 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 2
  %102 = load ptr, ptr %101, align 8, !tbaa !39
  %103 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %104 = load ptr, ptr %103, align 8, !tbaa !37
  %105 = ptrtoint ptr %102 to i64
  %106 = ptrtoint ptr %104 to i64
  %107 = sub i64 %105, %106
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %99, i64 noundef %107)
          to label %108 unwind label %109

108:                                              ; preds = %100
  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 %324

109:                                              ; preds = %100, %98, %90, %88, %87, %85
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %6, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, 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 %342

113:                                              ; preds = %54
  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)
  %114 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %115 unwind label %137

115:                                              ; preds = %113
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %114, ptr noundef nonnull align 8 dereferenceable(40) %11)
          to label %116 unwind label %137

116:                                              ; preds = %115
  %117 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %118 unwind label %137

118:                                              ; preds = %116
  %119 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 1
  %120 = load ptr, ptr %119, align 8, !tbaa !38
  %121 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %122 = load ptr, ptr %121, align 8, !tbaa !37
  %123 = ptrtoint ptr %120 to i64
  %124 = ptrtoint ptr %122 to i64
  %125 = sub i64 %123, %124
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %117, i64 noundef %125)
          to label %126 unwind label %137

126:                                              ; preds = %118
  %127 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %128 unwind label %137

128:                                              ; preds = %126
  %129 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 2
  %130 = load ptr, ptr %129, align 8, !tbaa !39
  %131 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %132 = load ptr, ptr %131, align 8, !tbaa !37
  %133 = ptrtoint ptr %130 to i64
  %134 = ptrtoint ptr %132 to i64
  %135 = sub i64 %133, %134
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %127, i64 noundef %135)
          to label %136 unwind label %137

136:                                              ; preds = %128
  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 %324

137:                                              ; preds = %128, %126, %118, %116, %115, %113
  %138 = landingpad { ptr, i32 }
          cleanup
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %6, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, 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 %342

141:                                              ; preds = %54
  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)
  %142 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %143 unwind label %165

143:                                              ; preds = %141
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %142, ptr noundef nonnull align 8 dereferenceable(40) %12)
          to label %144 unwind label %165

144:                                              ; preds = %143
  %145 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %146 unwind label %165

146:                                              ; preds = %144
  %147 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 1
  %148 = load ptr, ptr %147, align 8, !tbaa !38
  %149 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %150 = load ptr, ptr %149, align 8, !tbaa !37
  %151 = ptrtoint ptr %148 to i64
  %152 = ptrtoint ptr %150 to i64
  %153 = sub i64 %151, %152
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %145, i64 noundef %153)
          to label %154 unwind label %165

154:                                              ; preds = %146
  %155 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %156 unwind label %165

156:                                              ; preds = %154
  %157 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 2
  %158 = load ptr, ptr %157, align 8, !tbaa !39
  %159 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %160 = load ptr, ptr %159, align 8, !tbaa !37
  %161 = ptrtoint ptr %158 to i64
  %162 = ptrtoint ptr %160 to i64
  %163 = sub i64 %161, %162
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %155, i64 noundef %163)
          to label %164 unwind label %165

164:                                              ; preds = %156
  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 %324

165:                                              ; preds = %156, %154, %146, %144, %143, %141
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %6, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, 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 %342

169:                                              ; preds = %54
  call void @llvm.lifetime.start.p0(i64 40, ptr %13) #3
  %170 = call noundef double @_ZNSt14numeric_limitsIdE9quiet_NaNEv() #3
  call void @_ZN4Json5ValueC1Ed(ptr noundef nonnull align 8 dereferenceable(40) %13, double noundef %170)
  %171 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %172 unwind label %194

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

173:                                              ; preds = %172
  %174 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %175 unwind label %194

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

183:                                              ; preds = %175
  %184 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %185 unwind label %194

185:                                              ; preds = %183
  %186 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 2
  %187 = load ptr, ptr %186, align 8, !tbaa !39
  %188 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %189 = load ptr, ptr %188, align 8, !tbaa !37
  %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 %324

194:                                              ; preds = %185, %183, %175, %173, %172, %169
  %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 %342

198:                                              ; preds = %54
  call void @llvm.lifetime.start.p0(i64 40, ptr %14) #3
  %199 = call noundef double @_ZNSt14numeric_limitsIdE8infinityEv() #3
  call void @_ZN4Json5ValueC1Ed(ptr noundef nonnull align 8 dereferenceable(40) %14, double noundef %199)
  %200 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %201 unwind label %223

201:                                              ; preds = %198
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %200, ptr noundef nonnull align 8 dereferenceable(40) %14)
          to label %202 unwind label %223

202:                                              ; preds = %201
  %203 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %204 unwind label %223

204:                                              ; preds = %202
  %205 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 1
  %206 = load ptr, ptr %205, align 8, !tbaa !38
  %207 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %208 = load ptr, ptr %207, align 8, !tbaa !37
  %209 = ptrtoint ptr %206 to i64
  %210 = ptrtoint ptr %208 to i64
  %211 = sub i64 %209, %210
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %203, i64 noundef %211)
          to label %212 unwind label %223

212:                                              ; preds = %204
  %213 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %214 unwind label %223

214:                                              ; preds = %212
  %215 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 2
  %216 = load ptr, ptr %215, align 8, !tbaa !39
  %217 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %218 = load ptr, ptr %217, align 8, !tbaa !37
  %219 = ptrtoint ptr %216 to i64
  %220 = ptrtoint ptr %218 to i64
  %221 = sub i64 %219, %220
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %213, i64 noundef %221)
          to label %222 unwind label %223

222:                                              ; preds = %214
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %14) #3
  br label %324

223:                                              ; preds = %214, %212, %204, %202, %201, %198
  %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 @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %14) #3
  br label %342

227:                                              ; preds = %54
  call void @llvm.lifetime.start.p0(i64 40, ptr %15) #3
  %228 = call noundef double @_ZNSt14numeric_limitsIdE8infinityEv() #3
  %229 = fneg double %228
  call void @_ZN4Json5ValueC1Ed(ptr noundef nonnull align 8 dereferenceable(40) %15, double noundef %229)
  %230 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %231 unwind label %253

231:                                              ; preds = %227
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %230, ptr noundef nonnull align 8 dereferenceable(40) %15)
          to label %232 unwind label %253

232:                                              ; preds = %231
  %233 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %234 unwind label %253

234:                                              ; preds = %232
  %235 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 1
  %236 = load ptr, ptr %235, align 8, !tbaa !38
  %237 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %238 = load ptr, ptr %237, align 8, !tbaa !37
  %239 = ptrtoint ptr %236 to i64
  %240 = ptrtoint ptr %238 to i64
  %241 = sub i64 %239, %240
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %233, i64 noundef %241)
          to label %242 unwind label %253

242:                                              ; preds = %234
  %243 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %244 unwind label %253

244:                                              ; preds = %242
  %245 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 2
  %246 = load ptr, ptr %245, align 8, !tbaa !39
  %247 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %248 = load ptr, ptr %247, align 8, !tbaa !37
  %249 = ptrtoint ptr %246 to i64
  %250 = ptrtoint ptr %248 to i64
  %251 = sub i64 %249, %250
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %243, i64 noundef %251)
          to label %252 unwind label %253

252:                                              ; preds = %244
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #3
  br label %324

253:                                              ; preds = %244, %242, %234, %232, %231, %227
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %6, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %7, align 4
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #3
  br label %342

257:                                              ; preds = %54, %54, %54
  %258 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 10
  %259 = getelementptr inbounds %"class.Json::OurFeatures", ptr %258, i32 0, i32 2
  %260 = load i8, ptr %259, align 2, !tbaa !40, !range !31, !noundef !32
  %261 = trunc i8 %260 to i1
  br i1 %261, label %262, label %294

262:                                              ; preds = %257
  %263 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 5
  %264 = load ptr, ptr %263, align 8, !tbaa !36
  %265 = getelementptr inbounds i8, ptr %264, i32 -1
  store ptr %265, ptr %263, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 40, ptr %16) #3
  call void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr noundef nonnull align 8 dereferenceable(40) %16, i32 noundef 0)
  %266 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %267 unwind label %290

267:                                              ; preds = %262
  invoke void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %266, ptr noundef nonnull align 8 dereferenceable(40) %16)
          to label %268 unwind label %290

268:                                              ; preds = %267
  %269 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %270 unwind label %290

270:                                              ; preds = %268
  %271 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 5
  %272 = load ptr, ptr %271, align 8, !tbaa !36
  %273 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %274 = load ptr, ptr %273, align 8, !tbaa !37
  %275 = ptrtoint ptr %272 to i64
  %276 = ptrtoint ptr %274 to i64
  %277 = sub i64 %275, %276
  %278 = sub nsw i64 %277, 1
  invoke void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %269, i64 noundef %278)
          to label %279 unwind label %290

279:                                              ; preds = %270
  %280 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
          to label %281 unwind label %290

281:                                              ; preds = %279
  %282 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 5
  %283 = load ptr, ptr %282, align 8, !tbaa !36
  %284 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %285 = load ptr, ptr %284, align 8, !tbaa !37
  %286 = ptrtoint ptr %283 to i64
  %287 = ptrtoint ptr %285 to i64
  %288 = sub i64 %286, %287
  invoke void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %280, i64 noundef %288)
          to label %289 unwind label %290

289:                                              ; preds = %281
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %16) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #3
  br label %324

290:                                              ; preds = %281, %279, %270, %268, %267, %262
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %6, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %7, align 4
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %16) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #3
  br label %342

294:                                              ; preds = %257
  br label %295

295:                                              ; preds = %294, %54
  %296 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
  %297 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 1
  %298 = load ptr, ptr %297, align 8, !tbaa !38
  %299 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %300 = load ptr, ptr %299, align 8, !tbaa !37
  %301 = ptrtoint ptr %298 to i64
  %302 = ptrtoint ptr %300 to i64
  %303 = sub i64 %301, %302
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %296, i64 noundef %303)
  %304 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
  %305 = getelementptr inbounds %"class.Json::OurReader::Token", ptr %8, i32 0, i32 2
  %306 = load ptr, ptr %305, align 8, !tbaa !39
  %307 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 3
  %308 = load ptr, ptr %307, align 8, !tbaa !37
  %309 = ptrtoint ptr %306 to i64
  %310 = ptrtoint ptr %308 to i64
  %311 = sub i64 %309, %310
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %304, i64 noundef %311)
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #3
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %312 unwind label %315

312:                                              ; preds = %295
  %313 = invoke noundef zeroext i1 @_ZN4Json9OurReader8addErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_5TokenEPKc(ptr noundef nonnull align 8 dereferenceable(281) %20, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef null)
          to label %314 unwind label %319

314:                                              ; preds = %312
  store i1 %313, ptr %2, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #3
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #3
  store i32 1, ptr %19, align 4
  br label %340

315:                                              ; preds = %295
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %6, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %7, align 4
  br label %323

319:                                              ; preds = %312
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %6, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %7, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #3
  br label %323

323:                                              ; preds = %319, %315
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #3
  br label %342

324:                                              ; preds = %289, %252, %222, %193, %164, %136, %108, %82, %79, %68, %57
  %325 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 11
  %326 = load i8, ptr %325, align 8, !tbaa !30, !range !31, !noundef !32
  %327 = trunc i8 %326 to i1
  br i1 %327, label %328, label %334

328:                                              ; preds = %324
  %329 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 5
  %330 = load ptr, ptr %329, align 8, !tbaa !36
  %331 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 6
  store ptr %330, ptr %331, align 8, !tbaa !41
  %332 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %20)
  %333 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 7
  store ptr %332, ptr %333, align 8, !tbaa !42
  br label %334

334:                                              ; preds = %328, %324
  %335 = getelementptr inbounds %"class.Json::OurReader", ptr %20, i32 0, i32 9
  %336 = load i32, ptr %335, align 8, !tbaa !9
  %337 = add nsw i32 %336, -1
  store i32 %337, ptr %335, align 8, !tbaa !9
  %338 = load i8, ptr %9, align 1, !tbaa !29, !range !31, !noundef !32
  %339 = trunc i8 %338 to i1
  store i1 %339, ptr %2, align 1
  store i32 1, ptr %19, align 4
  br label %340

340:                                              ; preds = %334, %314
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #3
  %341 = load i1, ptr %2, align 1
  ret i1 %341

342:                                              ; preds = %323, %290, %253, %223, %194, %165, %137, %109
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #3
  br label %343

343:                                              ; preds = %342, %38
  %344 = load ptr, ptr %6, align 8
  %345 = load i32, ptr %7, align 4
  %346 = insertvalue { ptr, i32 } poison, ptr %344, 0
  %347 = insertvalue { ptr, i32 } %346, i32 %345, 1
  resume { ptr, i32 } %347
}

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNSt14numeric_limitsIdE9quiet_NaNEv() #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNSt14numeric_limitsIdE8infinityEv() #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 @_ZN4Json5ValueC1Ed(ptr, double)

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, !25, i64 264}
!10 = !{!"_ZTSN4Json9OurReaderE", !11, i64 0, !18, i64 80, !23, i64 160, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !23, i64 232, !25, i64 264, !26, i64 268, !27, i64 280}
!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", !6, i64 0, !16, i64 8, !17, i64 16, !17, i64 48}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSSt15_Deque_iteratorIPN4Json5ValueERS2_PS2_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!18 = !{!"_ZTSSt5dequeIN4Json9OurReader9ErrorInfoESaIS2_EE", !19, i64 0}
!19 = !{!"_ZTSSt11_Deque_baseIN4Json9OurReader9ErrorInfoESaIS2_EE", !20, i64 0}
!20 = !{!"_ZTSNSt11_Deque_baseIN4Json9OurReader9ErrorInfoESaIS2_EE11_Deque_implE", !21, i64 0}
!21 = !{!"_ZTSNSt11_Deque_baseIN4Json9OurReader9ErrorInfoESaIS2_EE16_Deque_impl_dataE", !6, i64 0, !16, i64 8, !22, i64 16, !22, i64 48}
!22 = !{!"_ZTSSt15_Deque_iteratorIN4Json9OurReader9ErrorInfoERS2_PS2_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !24, i64 0, !16, i64 8, !7, i64 16}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!25 = !{!"int", !7, i64 0}
!26 = !{!"_ZTSN4Json11OurFeaturesE", !27, i64 0, !27, i64 1, !27, i64 2, !27, i64 3, !27, i64 4, !27, i64 5, !27, i64 6, !27, i64 7, !25, i64 8}
!27 = !{!"bool", !7, i64 0}
!28 = !{!10, !25, i64 276}
!29 = !{!27, !27, i64 0}
!30 = !{!10, !27, i64 280}
!31 = !{i8 0, i8 2}
!32 = !{}
!33 = !{!34, !35, i64 0}
!34 = !{!"_ZTSN4Json9OurReader5TokenE", !35, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"_ZTSN4Json9OurReader9TokenTypeE", !7, i64 0}
!36 = !{!10, !6, i64 208}
!37 = !{!10, !6, i64 192}
!38 = !{!34, !6, i64 8}
!39 = !{!34, !6, i64 16}
!40 = !{!10, !27, i64 270}
!41 = !{!10, !6, i64 216}
!42 = !{!10, !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::OurReader::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
@.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 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 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 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 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 uwtable
define dso_local noundef zeroext i1 @_ZN4Json9OurReader9readValueEv(ptr noundef nonnull align 8 dereferenceable(281) %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::OurReader::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.Json::Value", align 8
  %10 = alloca %"class.Json::Value", align 8
  %11 = alloca %"class.Json::Value", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator.6", align 1
  %14 = getelementptr inbounds i8, ptr %0, i64 264
  %15 = load i32, ptr %14, align 8, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %0, i64 276
  %17 = load i32, ptr %16, align 4, !tbaa !27
  %.not = icmp slt i32 %15, %17
  br i1 %.not, label %26, label %18

18:                                               ; 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 %19 unwind label %21

19:                                               ; preds = %18
  invoke void @_ZN4Json17throwRuntimeErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %20 unwind label %23

20:                                               ; preds = %19
  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 %14, align 8, !tbaa !5
  br label %26

21:                                               ; preds = %18
  %22 = landingpad { ptr, i32 }
          cleanup
  br label %25

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

25:                                               ; preds = %23, %21
  %.pn = phi { ptr, i32 } [ %24, %23 ], [ %22, %21 ]
  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 %266

26:                                               ; preds = %20, %1
  %27 = phi i32 [ %.pre, %20 ], [ %15, %1 ]
  %28 = add nsw i32 %27, 1
  store i32 %28, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #3
  call void @_ZN4Json9OurReader17skipCommentTokensERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  %29 = getelementptr inbounds i8, ptr %0, i64 280
  %30 = load i8, ptr %29, align 8, !tbaa !28, !range !29, !noundef !30
  %31 = trunc nuw i8 %30 to i1
  br i1 %31, label %32, label %38

32:                                               ; preds = %26
  %33 = getelementptr inbounds i8, ptr %0, i64 232
  %34 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %33) #3
  br i1 %34, label %38, label %35

35:                                               ; preds = %32
  %36 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
  call void @_ZN4Json5Value10setCommentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_16CommentPlacementE(ptr noundef nonnull align 8 dereferenceable(40) %36, ptr noundef nonnull align 8 dereferenceable(32) %33, i32 noundef 0)
  %37 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str)
  br label %38

38:                                               ; preds = %35, %32, %26
  %39 = load i32, ptr %4, align 8, !tbaa !31
  switch i32 %39, label %228 [
    i32 1, label %40
    i32 3, label %50
    i32 6, label %60
    i32 5, label %62
    i32 7, label %64
    i32 8, label %86
    i32 9, label %108
    i32 10, label %130
    i32 11, label %153
    i32 12, label %176
    i32 13, label %200
    i32 2, label %200
    i32 4, label %200
  ]

40:                                               ; preds = %38
  %41 = call noundef zeroext i1 @_ZN4Json9OurReader10readObjectERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  %42 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
  %43 = getelementptr inbounds i8, ptr %0, i64 208
  %44 = load ptr, ptr %43, align 8, !tbaa !34
  %45 = getelementptr inbounds i8, ptr %0, i64 192
  %46 = load ptr, ptr %45, align 8, !tbaa !35
  %47 = ptrtoint ptr %44 to i64
  %48 = ptrtoint ptr %46 to i64
  %49 = sub i64 %47, %48
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %42, i64 noundef %49)
  br label %252

50:                                               ; preds = %38
  %51 = call noundef zeroext i1 @_ZN4Json9OurReader9readArrayERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  %52 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
  %53 = getelementptr inbounds i8, ptr %0, i64 208
  %54 = load ptr, ptr %53, align 8, !tbaa !34
  %55 = getelementptr inbounds i8, ptr %0, i64 192
  %56 = load ptr, ptr %55, align 8, !tbaa !35
  %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 %252

60:                                               ; preds = %38
  %61 = call noundef zeroext i1 @_ZN4Json9OurReader12decodeNumberERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  br label %252

62:                                               ; preds = %38
  %63 = call noundef zeroext i1 @_ZN4Json9OurReader12decodeStringERNS0_5TokenE(ptr noundef nonnull align 8 dereferenceable(281) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
  br label %252

64:                                               ; preds = %38
  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)
  %65 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %66 unwind label %84

66:                                               ; preds = %64
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %65, ptr noundef nonnull align 8 dereferenceable(40) %5)
  %67 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %68 unwind label %84

68:                                               ; preds = %66
  %69 = getelementptr inbounds i8, ptr %4, i64 8
  %70 = load ptr, ptr %69, align 8, !tbaa !36
  %71 = getelementptr inbounds i8, ptr %0, i64 192
  %72 = load ptr, ptr %71, align 8, !tbaa !35
  %73 = ptrtoint ptr %70 to i64
  %74 = ptrtoint ptr %72 to i64
  %75 = sub i64 %73, %74
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %67, i64 noundef %75)
  %76 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %77 unwind label %84

77:                                               ; preds = %68
  %78 = getelementptr inbounds i8, ptr %4, i64 16
  %79 = load ptr, ptr %78, align 8, !tbaa !37
  %80 = load ptr, ptr %71, align 8, !tbaa !35
  %81 = ptrtoint ptr %79 to i64
  %82 = ptrtoint ptr %80 to i64
  %83 = sub i64 %81, %82
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %76, i64 noundef %83)
  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 %252

84:                                               ; preds = %68, %66, %64
  %85 = 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 %265

86:                                               ; preds = %38
  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)
  %87 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %88 unwind label %106

88:                                               ; preds = %86
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %87, ptr noundef nonnull align 8 dereferenceable(40) %6)
  %89 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %90 unwind label %106

90:                                               ; preds = %88
  %91 = getelementptr inbounds i8, ptr %4, i64 8
  %92 = load ptr, ptr %91, align 8, !tbaa !36
  %93 = getelementptr inbounds i8, ptr %0, i64 192
  %94 = load ptr, ptr %93, align 8, !tbaa !35
  %95 = ptrtoint ptr %92 to i64
  %96 = ptrtoint ptr %94 to i64
  %97 = sub i64 %95, %96
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %89, i64 noundef %97)
  %98 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %99 unwind label %106

99:                                               ; preds = %90
  %100 = getelementptr inbounds i8, ptr %4, i64 16
  %101 = load ptr, ptr %100, align 8, !tbaa !37
  %102 = load ptr, ptr %93, align 8, !tbaa !35
  %103 = ptrtoint ptr %101 to i64
  %104 = ptrtoint ptr %102 to i64
  %105 = sub i64 %103, %104
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %98, i64 noundef %105)
  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 %252

106:                                              ; preds = %90, %88, %86
  %107 = 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 %265

108:                                              ; preds = %38
  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)
  %109 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %110 unwind label %128

110:                                              ; preds = %108
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %109, ptr noundef nonnull align 8 dereferenceable(40) %7)
  %111 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %112 unwind label %128

112:                                              ; preds = %110
  %113 = getelementptr inbounds i8, ptr %4, i64 8
  %114 = load ptr, ptr %113, align 8, !tbaa !36
  %115 = getelementptr inbounds i8, ptr %0, i64 192
  %116 = load ptr, ptr %115, align 8, !tbaa !35
  %117 = ptrtoint ptr %114 to i64
  %118 = ptrtoint ptr %116 to i64
  %119 = sub i64 %117, %118
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %111, i64 noundef %119)
  %120 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %121 unwind label %128

121:                                              ; preds = %112
  %122 = getelementptr inbounds i8, ptr %4, i64 16
  %123 = load ptr, ptr %122, align 8, !tbaa !37
  %124 = load ptr, ptr %115, align 8, !tbaa !35
  %125 = ptrtoint ptr %123 to i64
  %126 = ptrtoint ptr %124 to i64
  %127 = sub i64 %125, %126
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %120, i64 noundef %127)
  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 %252

128:                                              ; preds = %112, %110, %108
  %129 = 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 %265

130:                                              ; preds = %38
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #3
  %131 = call noundef double @_ZNSt14numeric_limitsIdE9quiet_NaNEv() #3
  call void @_ZN4Json5ValueC1Ed(ptr noundef nonnull align 8 dereferenceable(40) %8, double noundef %131)
  %132 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %133 unwind label %151

133:                                              ; preds = %130
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %132, ptr noundef nonnull align 8 dereferenceable(40) %8)
  %134 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %135 unwind label %151

135:                                              ; preds = %133
  %136 = getelementptr inbounds i8, ptr %4, i64 8
  %137 = load ptr, ptr %136, align 8, !tbaa !36
  %138 = getelementptr inbounds i8, ptr %0, i64 192
  %139 = load ptr, ptr %138, align 8, !tbaa !35
  %140 = ptrtoint ptr %137 to i64
  %141 = ptrtoint ptr %139 to i64
  %142 = sub i64 %140, %141
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %134, i64 noundef %142)
  %143 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %144 unwind label %151

144:                                              ; preds = %135
  %145 = getelementptr inbounds i8, ptr %4, i64 16
  %146 = load ptr, ptr %145, align 8, !tbaa !37
  %147 = load ptr, ptr %138, align 8, !tbaa !35
  %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) %143, 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 %252

151:                                              ; preds = %135, %133, %130
  %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 %265

153:                                              ; preds = %38
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %9) #3
  %154 = call noundef double @_ZNSt14numeric_limitsIdE8infinityEv() #3
  call void @_ZN4Json5ValueC1Ed(ptr noundef nonnull align 8 dereferenceable(40) %9, double noundef %154)
  %155 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %156 unwind label %174

156:                                              ; preds = %153
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %155, ptr noundef nonnull align 8 dereferenceable(40) %9)
  %157 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %158 unwind label %174

158:                                              ; preds = %156
  %159 = getelementptr inbounds i8, ptr %4, i64 8
  %160 = load ptr, ptr %159, align 8, !tbaa !36
  %161 = getelementptr inbounds i8, ptr %0, i64 192
  %162 = load ptr, ptr %161, align 8, !tbaa !35
  %163 = ptrtoint ptr %160 to i64
  %164 = ptrtoint ptr %162 to i64
  %165 = sub i64 %163, %164
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %157, i64 noundef %165)
  %166 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %167 unwind label %174

167:                                              ; preds = %158
  %168 = getelementptr inbounds i8, ptr %4, i64 16
  %169 = load ptr, ptr %168, align 8, !tbaa !37
  %170 = load ptr, ptr %161, align 8, !tbaa !35
  %171 = ptrtoint ptr %169 to i64
  %172 = ptrtoint ptr %170 to i64
  %173 = sub i64 %171, %172
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %166, i64 noundef %173)
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #3
  br label %252

174:                                              ; preds = %158, %156, %153
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #3
  br label %265

176:                                              ; preds = %38
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #3
  %177 = call noundef double @_ZNSt14numeric_limitsIdE8infinityEv() #3
  %178 = fneg double %177
  call void @_ZN4Json5ValueC1Ed(ptr noundef nonnull align 8 dereferenceable(40) %10, double noundef %178)
  %179 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %180 unwind label %198

180:                                              ; preds = %176
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %179, ptr noundef nonnull align 8 dereferenceable(40) %10)
  %181 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %182 unwind label %198

182:                                              ; preds = %180
  %183 = getelementptr inbounds i8, ptr %4, i64 8
  %184 = load ptr, ptr %183, align 8, !tbaa !36
  %185 = getelementptr inbounds i8, ptr %0, i64 192
  %186 = load ptr, ptr %185, align 8, !tbaa !35
  %187 = ptrtoint ptr %184 to i64
  %188 = ptrtoint ptr %186 to i64
  %189 = sub i64 %187, %188
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %181, i64 noundef %189)
  %190 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %191 unwind label %198

191:                                              ; preds = %182
  %192 = getelementptr inbounds i8, ptr %4, i64 16
  %193 = load ptr, ptr %192, align 8, !tbaa !37
  %194 = load ptr, ptr %185, align 8, !tbaa !35
  %195 = ptrtoint ptr %193 to i64
  %196 = ptrtoint ptr %194 to i64
  %197 = sub i64 %195, %196
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %190, i64 noundef %197)
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #3
  br label %252

198:                                              ; preds = %182, %180, %176
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #3
  br label %265

200:                                              ; preds = %38, %38, %38
  %201 = getelementptr inbounds i8, ptr %0, i64 270
  %202 = load i8, ptr %201, align 2, !tbaa !38, !range !29, !noundef !30
  %203 = trunc nuw i8 %202 to i1
  br i1 %203, label %204, label %228

204:                                              ; preds = %200
  %205 = getelementptr inbounds i8, ptr %0, i64 208
  %206 = load ptr, ptr %205, align 8, !tbaa !34
  %207 = getelementptr inbounds i8, ptr %206, i64 -1
  store ptr %207, ptr %205, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #3
  call void @_ZN4Json5ValueC1ENS_9ValueTypeE(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
  %208 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %209 unwind label %226

209:                                              ; preds = %204
  call void @_ZN4Json5Value11swapPayloadERS0_(ptr noundef nonnull align 8 dereferenceable(40) %208, ptr noundef nonnull align 8 dereferenceable(40) %11)
  %210 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %211 unwind label %226

211:                                              ; preds = %209
  %212 = load ptr, ptr %205, align 8, !tbaa !34
  %213 = getelementptr inbounds i8, ptr %0, i64 192
  %214 = load ptr, ptr %213, align 8, !tbaa !35
  %215 = ptrtoint ptr %212 to i64
  %216 = ptrtoint ptr %214 to i64
  %217 = xor i64 %216, -1
  %218 = add i64 %217, %215
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %210, i64 noundef %218)
  %219 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
          to label %220 unwind label %226

220:                                              ; preds = %211
  %221 = load ptr, ptr %205, align 8, !tbaa !34
  %222 = load ptr, ptr %213, align 8, !tbaa !35
  %223 = ptrtoint ptr %221 to i64
  %224 = ptrtoint ptr %222 to i64
  %225 = sub i64 %223, %224
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %219, i64 noundef %225)
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #3
  br label %252

226:                                              ; preds = %211, %209, %204
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Json5ValueD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #3
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #3
  br label %265

228:                                              ; preds = %200, %38
  %229 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
  %230 = getelementptr inbounds i8, ptr %4, i64 8
  %231 = load ptr, ptr %230, align 8, !tbaa !36
  %232 = getelementptr inbounds i8, ptr %0, i64 192
  %233 = load ptr, ptr %232, align 8, !tbaa !35
  %234 = ptrtoint ptr %231 to i64
  %235 = ptrtoint ptr %233 to i64
  %236 = sub i64 %234, %235
  call void @_ZN4Json5Value14setOffsetStartEl(ptr noundef nonnull align 8 dereferenceable(40) %229, i64 noundef %236)
  %237 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
  %238 = getelementptr inbounds i8, ptr %4, i64 16
  %239 = load ptr, ptr %238, align 8, !tbaa !37
  %240 = load ptr, ptr %232, align 8, !tbaa !35
  %241 = ptrtoint ptr %239 to i64
  %242 = ptrtoint ptr %240 to i64
  %243 = sub i64 %241, %242
  call void @_ZN4Json5Value14setOffsetLimitEl(ptr noundef nonnull align 8 dereferenceable(40) %237, i64 noundef %243)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #3
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %244 unwind label %247

244:                                              ; preds = %228
  %245 = invoke noundef zeroext i1 @_ZN4Json9OurReader8addErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_5TokenEPKc(ptr noundef nonnull align 8 dereferenceable(281) %0, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef null)
          to label %246 unwind label %249

246:                                              ; preds = %244
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #3
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #3
  br label %264

247:                                              ; preds = %228
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %251

249:                                              ; preds = %244
  %250 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #3
  br label %251

251:                                              ; preds = %249, %247
  %.pn11 = phi { ptr, i32 } [ %250, %249 ], [ %248, %247 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #3
  br label %265

252:                                              ; preds = %220, %191, %167, %144, %121, %99, %77, %62, %60, %50, %40
  %.0.shrunk = phi i1 [ true, %220 ], [ true, %191 ], [ true, %167 ], [ true, %144 ], [ true, %121 ], [ true, %99 ], [ true, %77 ], [ %63, %62 ], [ %61, %60 ], [ %51, %50 ], [ %41, %40 ]
  %253 = load i8, ptr %29, align 8, !tbaa !28, !range !29, !noundef !30
  %254 = trunc nuw i8 %253 to i1
  br i1 %254, label %255, label %261

255:                                              ; preds = %252
  %256 = getelementptr inbounds i8, ptr %0, i64 208
  %257 = load ptr, ptr %256, align 8, !tbaa !34
  %258 = getelementptr inbounds i8, ptr %0, i64 216
  store ptr %257, ptr %258, align 8, !tbaa !39
  %259 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281) %0)
  %260 = getelementptr inbounds i8, ptr %0, i64 224
  store ptr %259, ptr %260, align 8, !tbaa !40
  br label %261

261:                                              ; preds = %255, %252
  %262 = load i32, ptr %14, align 8, !tbaa !5
  %263 = add nsw i32 %262, -1
  store i32 %263, ptr %14, align 8, !tbaa !5
  br label %264

264:                                              ; preds = %261, %246
  %.09 = phi i1 [ %245, %246 ], [ %.0.shrunk, %261 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #3
  ret i1 %.09

265:                                              ; preds = %251, %226, %198, %174, %151, %128, %106, %84
  %.pn11.pn = phi { ptr, i32 } [ %.pn11, %251 ], [ %227, %226 ], [ %199, %198 ], [ %175, %174 ], [ %152, %151 ], [ %129, %128 ], [ %107, %106 ], [ %85, %84 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #3
  br label %266

266:                                              ; preds = %265, %25
  %.pn11.pn.pn = phi { ptr, i32 } [ %.pn11.pn, %265 ], [ %.pn, %25 ]
  resume { ptr, i32 } %.pn11.pn.pn
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN4Json9OurReader8addErrorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_5TokenEPKc(ptr noundef nonnull align 8 dereferenceable(281), 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 uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN4Json9OurReader12currentValueEv(ptr noundef nonnull align 8 dereferenceable(281)) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNSt14numeric_limitsIdE9quiet_NaNEv() local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNSt14numeric_limitsIdE8infinityEv() 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 @_ZN4Json5ValueC1Ed(ptr, double) 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, !24, i64 264}
!6 = !{!"_ZTSN4Json9OurReaderE", !7, i64 0, !17, i64 80, !22, i64 160, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !12, i64 224, !22, i64 232, !24, i64 264, !25, i64 268, !26, i64 280}
!7 = !{!"_ZTSSt5stackIPN4Json5ValueESt5dequeIS2_SaIS2_EEE", !8, i64 0}
!8 = !{!"_ZTSSt5dequeIPN4Json5ValueESaIS2_EE", !9, i64 0}
!9 = !{!"_ZTSSt11_Deque_baseIPN4Json5ValueESaIS2_EE", !10, i64 0}
!10 = !{!"_ZTSNSt11_Deque_baseIPN4Json5ValueESaIS2_EE11_Deque_implE", !11, i64 0}
!11 = !{!"_ZTSNSt11_Deque_baseIPN4Json5ValueESaIS2_EE16_Deque_impl_dataE", !12, i64 0, !15, i64 8, !16, i64 16, !16, i64 48}
!12 = !{!"any pointer", !13, i64 0}
!13 = !{!"omnipotent char", !14, i64 0}
!14 = !{!"Simple C++ TBAA"}
!15 = !{!"long", !13, i64 0}
!16 = !{!"_ZTSSt15_Deque_iteratorIPN4Json5ValueERS2_PS2_E", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!17 = !{!"_ZTSSt5dequeIN4Json9OurReader9ErrorInfoESaIS2_EE", !18, i64 0}
!18 = !{!"_ZTSSt11_Deque_baseIN4Json9OurReader9ErrorInfoESaIS2_EE", !19, i64 0}
!19 = !{!"_ZTSNSt11_Deque_baseIN4Json9OurReader9ErrorInfoESaIS2_EE11_Deque_implE", !20, i64 0}
!20 = !{!"_ZTSNSt11_Deque_baseIN4Json9OurReader9ErrorInfoESaIS2_EE16_Deque_impl_dataE", !12, i64 0, !15, i64 8, !21, i64 16, !21, i64 48}
!21 = !{!"_ZTSSt15_Deque_iteratorIN4Json9OurReader9ErrorInfoERS2_PS2_E", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !23, i64 0, !15, i64 8, !13, i64 16}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !12, i64 0}
!24 = !{!"int", !13, i64 0}
!25 = !{!"_ZTSN4Json11OurFeaturesE", !26, i64 0, !26, i64 1, !26, i64 2, !26, i64 3, !26, i64 4, !26, i64 5, !26, i64 6, !26, i64 7, !24, i64 8}
!26 = !{!"bool", !13, i64 0}
!27 = !{!6, !24, i64 276}
!28 = !{!6, !26, i64 280}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!32, !33, i64 0}
!32 = !{!"_ZTSN4Json9OurReader5TokenE", !33, i64 0, !12, i64 8, !12, i64 16}
!33 = !{!"_ZTSN4Json9OurReader9TokenTypeE", !13, i64 0}
!34 = !{!6, !12, i64 208}
!35 = !{!6, !12, i64 192}
!36 = !{!32, !12, i64 8}
!37 = !{!32, !12, i64 16}
!38 = !{!6, !26, i64 270}
!39 = !{!6, !12, i64 216}
!40 = !{!6, !12, i64 224}


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