@@ -92,7 +92,8 @@ bool CheckConstant(InterpState &S, CodePtr OpPC, const Descriptor *Desc);
92
92
bool CheckMutable (InterpState &S, CodePtr OpPC, const Pointer &Ptr);
93
93
94
94
// / Checks if a value can be loaded from a block.
95
- bool CheckLoad (InterpState &S, CodePtr OpPC, const Pointer &Ptr);
95
+ bool CheckLoad (InterpState &S, CodePtr OpPC, const Pointer &Ptr,
96
+ AccessKinds AK = AK_Read);
96
97
97
98
bool CheckInitialized (InterpState &S, CodePtr OpPC, const Pointer &Ptr,
98
99
AccessKinds AK);
@@ -724,9 +725,7 @@ bool IncDecHelper(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {
724
725
template <PrimType Name, class T = typename PrimConv<Name>::T>
725
726
bool Inc (InterpState &S, CodePtr OpPC) {
726
727
const Pointer &Ptr = S.Stk .pop <Pointer>();
727
- if (!CheckDummy (S, OpPC, Ptr, AK_Increment))
728
- return false ;
729
- if (!CheckInitialized (S, OpPC, Ptr, AK_Increment))
728
+ if (!CheckLoad (S, OpPC, Ptr, AK_Increment))
730
729
return false ;
731
730
732
731
return IncDecHelper<T, IncDecOp::Inc, PushVal::Yes>(S, OpPC, Ptr);
@@ -738,9 +737,7 @@ bool Inc(InterpState &S, CodePtr OpPC) {
738
737
template <PrimType Name, class T = typename PrimConv<Name>::T>
739
738
bool IncPop (InterpState &S, CodePtr OpPC) {
740
739
const Pointer &Ptr = S.Stk .pop <Pointer>();
741
- if (!CheckDummy (S, OpPC, Ptr, AK_Increment))
742
- return false ;
743
- if (!CheckInitialized (S, OpPC, Ptr, AK_Increment))
740
+ if (!CheckLoad (S, OpPC, Ptr, AK_Increment))
744
741
return false ;
745
742
746
743
return IncDecHelper<T, IncDecOp::Inc, PushVal::No>(S, OpPC, Ptr);
@@ -753,9 +750,7 @@ bool IncPop(InterpState &S, CodePtr OpPC) {
753
750
template <PrimType Name, class T = typename PrimConv<Name>::T>
754
751
bool Dec (InterpState &S, CodePtr OpPC) {
755
752
const Pointer &Ptr = S.Stk .pop <Pointer>();
756
- if (!CheckDummy (S, OpPC, Ptr, AK_Decrement))
757
- return false ;
758
- if (!CheckInitialized (S, OpPC, Ptr, AK_Decrement))
753
+ if (!CheckLoad (S, OpPC, Ptr, AK_Decrement))
759
754
return false ;
760
755
761
756
return IncDecHelper<T, IncDecOp::Dec, PushVal::Yes>(S, OpPC, Ptr);
@@ -767,9 +762,7 @@ bool Dec(InterpState &S, CodePtr OpPC) {
767
762
template <PrimType Name, class T = typename PrimConv<Name>::T>
768
763
bool DecPop (InterpState &S, CodePtr OpPC) {
769
764
const Pointer &Ptr = S.Stk .pop <Pointer>();
770
- if (!CheckDummy (S, OpPC, Ptr, AK_Decrement))
771
- return false ;
772
- if (!CheckInitialized (S, OpPC, Ptr, AK_Decrement))
765
+ if (!CheckLoad (S, OpPC, Ptr, AK_Decrement))
773
766
return false ;
774
767
775
768
return IncDecHelper<T, IncDecOp::Dec, PushVal::No>(S, OpPC, Ptr);
@@ -797,42 +790,31 @@ bool IncDecFloatHelper(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
797
790
798
791
inline bool Incf (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) {
799
792
const Pointer &Ptr = S.Stk .pop <Pointer>();
800
- if (Ptr.isDummy ())
801
- return false ;
802
- if (!CheckInitialized (S, OpPC, Ptr, AK_Increment))
793
+ if (!CheckLoad (S, OpPC, Ptr, AK_Increment))
803
794
return false ;
804
795
805
796
return IncDecFloatHelper<IncDecOp::Inc, PushVal::Yes>(S, OpPC, Ptr, RM);
806
797
}
807
798
808
799
inline bool IncfPop (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) {
809
800
const Pointer &Ptr = S.Stk .pop <Pointer>();
810
- if (Ptr.isDummy ())
811
- return false ;
812
- if (!CheckInitialized (S, OpPC, Ptr, AK_Increment))
801
+ if (!CheckLoad (S, OpPC, Ptr, AK_Increment))
813
802
return false ;
814
803
815
804
return IncDecFloatHelper<IncDecOp::Inc, PushVal::No>(S, OpPC, Ptr, RM);
816
805
}
817
806
818
807
inline bool Decf (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) {
819
808
const Pointer &Ptr = S.Stk .pop <Pointer>();
820
-
821
- if (Ptr.isDummy ())
822
- return false ;
823
-
824
- if (!CheckInitialized (S, OpPC, Ptr, AK_Decrement))
809
+ if (!CheckLoad (S, OpPC, Ptr, AK_Decrement))
825
810
return false ;
826
811
827
812
return IncDecFloatHelper<IncDecOp::Dec, PushVal::Yes>(S, OpPC, Ptr, RM);
828
813
}
829
814
830
815
inline bool DecfPop (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) {
831
816
const Pointer &Ptr = S.Stk .pop <Pointer>();
832
-
833
- if (Ptr.isDummy ())
834
- return false ;
835
- if (!CheckInitialized (S, OpPC, Ptr, AK_Decrement))
817
+ if (!CheckLoad (S, OpPC, Ptr, AK_Decrement))
836
818
return false ;
837
819
838
820
return IncDecFloatHelper<IncDecOp::Dec, PushVal::No>(S, OpPC, Ptr, RM);
0 commit comments