Author: Timm Bäder Date: 2024-06-29T21:10:24+02:00 New Revision: 37698d924840a229e5a1bece8f5e845e0f5c80a6
URL: https://github.com/llvm/llvm-project/commit/37698d924840a229e5a1bece8f5e845e0f5c80a6 DIFF: https://github.com/llvm/llvm-project/commit/37698d924840a229e5a1bece8f5e845e0f5c80a6.diff LOG: [clang][Interp][NFC] Use CheckLoad() in Inc/Dec ops CheckLoad checks more things than we did before. Added: Modified: clang/lib/AST/Interp/Interp.cpp clang/lib/AST/Interp/Interp.h Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Interp.cpp b/clang/lib/AST/Interp/Interp.cpp index 76a0751a006e4..2fe8ab7d0df4b 100644 --- a/clang/lib/AST/Interp/Interp.cpp +++ b/clang/lib/AST/Interp/Interp.cpp @@ -476,23 +476,24 @@ bool CheckGlobalInitialized(InterpState &S, CodePtr OpPC, const Pointer &Ptr) { return false; } -bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr) { - if (!CheckLive(S, OpPC, Ptr, AK_Read)) +bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr, + AccessKinds AK) { + if (!CheckLive(S, OpPC, Ptr, AK)) return false; if (!CheckConstant(S, OpPC, Ptr)) return false; - if (!CheckDummy(S, OpPC, Ptr, AK_Read)) + if (!CheckDummy(S, OpPC, Ptr, AK)) return false; if (!CheckExtern(S, OpPC, Ptr)) return false; - if (!CheckRange(S, OpPC, Ptr, AK_Read)) + if (!CheckRange(S, OpPC, Ptr, AK)) return false; - if (!CheckActive(S, OpPC, Ptr, AK_Read)) + if (!CheckActive(S, OpPC, Ptr, AK)) return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Read)) + if (!CheckInitialized(S, OpPC, Ptr, AK)) return false; - if (!CheckTemporary(S, OpPC, Ptr, AK_Read)) + if (!CheckTemporary(S, OpPC, Ptr, AK)) return false; if (!CheckMutable(S, OpPC, Ptr)) return false; diff --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h index 75a8f66cc5d50..866593b9af094 100644 --- a/clang/lib/AST/Interp/Interp.h +++ b/clang/lib/AST/Interp/Interp.h @@ -92,7 +92,8 @@ bool CheckConstant(InterpState &S, CodePtr OpPC, const Descriptor *Desc); bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr); /// Checks if a value can be loaded from a block. -bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr); +bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr, + AccessKinds AK = AK_Read); bool CheckInitialized(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK); @@ -724,9 +725,7 @@ bool IncDecHelper(InterpState &S, CodePtr OpPC, const Pointer &Ptr) { template <PrimType Name, class T = typename PrimConv<Name>::T> bool Inc(InterpState &S, CodePtr OpPC) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - if (!CheckDummy(S, OpPC, Ptr, AK_Increment)) - return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Increment)) + if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) return false; return IncDecHelper<T, IncDecOp::Inc, PushVal::Yes>(S, OpPC, Ptr); @@ -738,9 +737,7 @@ bool Inc(InterpState &S, CodePtr OpPC) { template <PrimType Name, class T = typename PrimConv<Name>::T> bool IncPop(InterpState &S, CodePtr OpPC) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - if (!CheckDummy(S, OpPC, Ptr, AK_Increment)) - return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Increment)) + if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) return false; return IncDecHelper<T, IncDecOp::Inc, PushVal::No>(S, OpPC, Ptr); @@ -753,9 +750,7 @@ bool IncPop(InterpState &S, CodePtr OpPC) { template <PrimType Name, class T = typename PrimConv<Name>::T> bool Dec(InterpState &S, CodePtr OpPC) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - if (!CheckDummy(S, OpPC, Ptr, AK_Decrement)) - return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Decrement)) + if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) return false; return IncDecHelper<T, IncDecOp::Dec, PushVal::Yes>(S, OpPC, Ptr); @@ -767,9 +762,7 @@ bool Dec(InterpState &S, CodePtr OpPC) { template <PrimType Name, class T = typename PrimConv<Name>::T> bool DecPop(InterpState &S, CodePtr OpPC) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - if (!CheckDummy(S, OpPC, Ptr, AK_Decrement)) - return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Decrement)) + if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) return false; return IncDecHelper<T, IncDecOp::Dec, PushVal::No>(S, OpPC, Ptr); @@ -797,9 +790,7 @@ bool IncDecFloatHelper(InterpState &S, CodePtr OpPC, const Pointer &Ptr, inline bool Incf(InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - if (Ptr.isDummy()) - return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Increment)) + if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) return false; return IncDecFloatHelper<IncDecOp::Inc, PushVal::Yes>(S, OpPC, Ptr, RM); @@ -807,9 +798,7 @@ inline bool Incf(InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) { inline bool IncfPop(InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - if (Ptr.isDummy()) - return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Increment)) + if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) return false; return IncDecFloatHelper<IncDecOp::Inc, PushVal::No>(S, OpPC, Ptr, RM); @@ -817,11 +806,7 @@ inline bool IncfPop(InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) { inline bool Decf(InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - - if (Ptr.isDummy()) - return false; - - if (!CheckInitialized(S, OpPC, Ptr, AK_Decrement)) + if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) return false; return IncDecFloatHelper<IncDecOp::Dec, PushVal::Yes>(S, OpPC, Ptr, RM); @@ -829,10 +814,7 @@ inline bool Decf(InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) { inline bool DecfPop(InterpState &S, CodePtr OpPC, llvm::RoundingMode RM) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - - if (Ptr.isDummy()) - return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Decrement)) + if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) return false; return IncDecFloatHelper<IncDecOp::Dec, PushVal::No>(S, OpPC, Ptr, RM); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits