Lines Matching refs:Ptr

49 bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
52 bool CheckArray(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
55 bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
59 bool CheckDummy(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
63 bool CheckNull(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
67 bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
71 bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
75 bool CheckSubobject(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
80 bool CheckDowncast(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
84 bool CheckConst(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
90 bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
93 bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
96 bool CheckInitialized(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
99 bool CheckGlobalInitialized(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
102 bool CheckStore(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
105 bool CheckInvoke(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
108 bool CheckInit(InterpState &S, CodePtr OpPC, const Pointer &Ptr);
139 const Pointer &Ptr);
144 const Pointer &Ptr, const APSInt &IntValue);
718 bool IncDecHelper(InterpState &S, CodePtr OpPC, const Pointer &Ptr) { in IncDecHelper() argument
719 assert(!Ptr.isDummy()); in IncDecHelper()
726 const T &Value = Ptr.deref<T>(); in IncDecHelper()
734 Ptr.deref<T>() = Result; in IncDecHelper()
739 Ptr.deref<T>() = Result; in IncDecHelper()
777 const Pointer &Ptr = S.Stk.pop<Pointer>(); in Inc() local
778 if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) in Inc()
781 return IncDecHelper<T, IncDecOp::Inc, PushVal::Yes>(S, OpPC, Ptr); in Inc()
789 const Pointer &Ptr = S.Stk.pop<Pointer>(); in IncPop() local
790 if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) in IncPop()
793 return IncDecHelper<T, IncDecOp::Inc, PushVal::No>(S, OpPC, Ptr); in IncPop()
802 const Pointer &Ptr = S.Stk.pop<Pointer>(); in Dec() local
803 if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) in Dec()
806 return IncDecHelper<T, IncDecOp::Dec, PushVal::Yes>(S, OpPC, Ptr); in Dec()
814 const Pointer &Ptr = S.Stk.pop<Pointer>(); in DecPop() local
815 if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) in DecPop()
818 return IncDecHelper<T, IncDecOp::Dec, PushVal::No>(S, OpPC, Ptr); in DecPop()
822 bool IncDecFloatHelper(InterpState &S, CodePtr OpPC, const Pointer &Ptr, in IncDecFloatHelper() argument
824 Floating Value = Ptr.deref<Floating>(); in IncDecFloatHelper()
836 Ptr.deref<Floating>() = Result; in IncDecFloatHelper()
842 const Pointer &Ptr = S.Stk.pop<Pointer>(); in Incf() local
843 if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) in Incf()
846 return IncDecFloatHelper<IncDecOp::Inc, PushVal::Yes>(S, OpPC, Ptr, RM); in Incf()
850 const Pointer &Ptr = S.Stk.pop<Pointer>(); in IncfPop() local
851 if (!CheckLoad(S, OpPC, Ptr, AK_Increment)) in IncfPop()
854 return IncDecFloatHelper<IncDecOp::Inc, PushVal::No>(S, OpPC, Ptr, RM); in IncfPop()
858 const Pointer &Ptr = S.Stk.pop<Pointer>(); in Decf() local
859 if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) in Decf()
862 return IncDecFloatHelper<IncDecOp::Dec, PushVal::Yes>(S, OpPC, Ptr, RM); in Decf()
866 const Pointer &Ptr = S.Stk.pop<Pointer>(); in DecfPop() local
867 if (!CheckLoad(S, OpPC, Ptr, AK_Decrement)) in DecfPop()
870 return IncDecFloatHelper<IncDecOp::Dec, PushVal::No>(S, OpPC, Ptr, RM); in DecfPop()
1177 const Pointer &Ptr = S.Current->getLocalPointer(I); in GetLocal() local
1178 if (!CheckLoad(S, OpPC, Ptr)) in GetLocal()
1180 S.Stk.push<T>(Ptr.deref<T>()); in GetLocal()
1287 const Pointer &Ptr = S.P.getPtrGlobal(I); in GetGlobal() local
1288 if (!CheckConstant(S, OpPC, Ptr.getFieldDesc())) in GetGlobal()
1290 if (Ptr.isExtern()) in GetGlobal()
1295 if (!CheckGlobalInitialized(S, OpPC, Ptr)) in GetGlobal()
1298 S.Stk.push<T>(Ptr.deref<T>()); in GetGlobal()
1305 const Pointer &Ptr = S.P.getPtrGlobal(I); in GetGlobalUnchecked() local
1306 if (!Ptr.isInitialized()) in GetGlobalUnchecked()
1308 S.Stk.push<T>(Ptr.deref<T>()); in GetGlobalUnchecked()
1332 const Pointer &Ptr = S.P.getGlobal(I); in InitGlobalTemp() local
1339 assert(Ptr.getDeclDesc()->asExpr()); in InitGlobalTemp()
1342 std::make_pair(Ptr.getDeclDesc()->asExpr(), Temp)); in InitGlobalTemp()
1344 Ptr.deref<T>() = S.Stk.pop<T>(); in InitGlobalTemp()
1345 Ptr.initialize(); in InitGlobalTemp()
1442 const Pointer &Ptr = S.Stk.pop<Pointer>(); in InitFieldActive() local
1443 const Pointer &Field = Ptr.atField(I); in InitFieldActive()
1475 const Pointer &Ptr = S.Stk.peek<Pointer>(); in GetPtrField() local
1478 !CheckNull(S, OpPC, Ptr, CSK_Field)) in GetPtrField()
1481 if (!CheckExtern(S, OpPC, Ptr)) in GetPtrField()
1483 if (!CheckRange(S, OpPC, Ptr, CSK_Field)) in GetPtrField()
1485 if (!CheckArray(S, OpPC, Ptr)) in GetPtrField()
1487 if (!CheckSubobject(S, OpPC, Ptr, CSK_Field)) in GetPtrField()
1490 if (Ptr.isBlockPointer() && Off > Ptr.block()->getSize()) in GetPtrField()
1492 S.Stk.push<Pointer>(Ptr.atField(Off)); in GetPtrField()
1497 const Pointer &Ptr = S.Stk.pop<Pointer>(); in GetPtrFieldPop() local
1500 !CheckNull(S, OpPC, Ptr, CSK_Field)) in GetPtrFieldPop()
1503 if (!CheckExtern(S, OpPC, Ptr)) in GetPtrFieldPop()
1505 if (!CheckRange(S, OpPC, Ptr, CSK_Field)) in GetPtrFieldPop()
1507 if (!CheckArray(S, OpPC, Ptr)) in GetPtrFieldPop()
1509 if (!CheckSubobject(S, OpPC, Ptr, CSK_Field)) in GetPtrFieldPop()
1512 if (Ptr.isBlockPointer() && Off > Ptr.block()->getSize()) in GetPtrFieldPop()
1515 S.Stk.push<Pointer>(Ptr.atField(Off)); in GetPtrFieldPop()
1530 const Pointer &Ptr = S.Stk.pop<Pointer>(); in GetPtrActiveField() local
1531 if (!CheckNull(S, OpPC, Ptr, CSK_Field)) in GetPtrActiveField()
1533 if (!CheckRange(S, OpPC, Ptr, CSK_Field)) in GetPtrActiveField()
1535 Pointer Field = Ptr.atField(Off); in GetPtrActiveField()
1536 Ptr.deactivate(); in GetPtrActiveField()
1556 const Pointer &Ptr = S.Stk.pop<Pointer>(); in GetPtrDerivedPop() local
1557 if (!CheckNull(S, OpPC, Ptr, CSK_Derived)) in GetPtrDerivedPop()
1559 if (!CheckSubobject(S, OpPC, Ptr, CSK_Derived)) in GetPtrDerivedPop()
1561 if (!CheckDowncast(S, OpPC, Ptr, Off)) in GetPtrDerivedPop()
1564 S.Stk.push<Pointer>(Ptr.atFieldSub(Off)); in GetPtrDerivedPop()
1569 const Pointer &Ptr = S.Stk.peek<Pointer>(); in GetPtrBase() local
1570 if (!CheckNull(S, OpPC, Ptr, CSK_Base)) in GetPtrBase()
1572 if (!CheckSubobject(S, OpPC, Ptr, CSK_Base)) in GetPtrBase()
1574 S.Stk.push<Pointer>(Ptr.atField(Off)); in GetPtrBase()
1579 const Pointer &Ptr = S.Stk.pop<Pointer>(); in GetPtrBasePop() local
1580 if (!CheckNull(S, OpPC, Ptr, CSK_Base)) in GetPtrBasePop()
1582 if (!CheckSubobject(S, OpPC, Ptr, CSK_Base)) in GetPtrBasePop()
1584 S.Stk.push<Pointer>(Ptr.atField(Off)); in GetPtrBasePop()
1589 const auto &Ptr = S.Stk.pop<MemberPointer>(); in GetMemberPtrBasePop() local
1590 S.Stk.push<MemberPointer>(Ptr.atInstanceBase(Off)); in GetMemberPtrBasePop()
1605 const Pointer &Ptr = S.Stk.pop<Pointer>(); in FinishInitPop() local
1606 if (Ptr.canBeInitialized()) { in FinishInitPop()
1607 Ptr.initialize(); in FinishInitPop()
1608 Ptr.activate(); in FinishInitPop()
1614 const Pointer &Ptr = S.Stk.peek<Pointer>(); in FinishInit() local
1615 if (Ptr.canBeInitialized()) { in FinishInit()
1616 Ptr.initialize(); in FinishInit()
1617 Ptr.activate(); in FinishInit()
1628 const Pointer &Ptr) { in VirtBaseHelper() argument
1629 Pointer Base = Ptr; in VirtBaseHelper()
1641 const Pointer &Ptr = S.Stk.pop<Pointer>(); in GetPtrVirtBasePop() local
1642 if (!CheckNull(S, OpPC, Ptr, CSK_Base)) in GetPtrVirtBasePop()
1644 return VirtBaseHelper(S, OpPC, D, Ptr); in GetPtrVirtBasePop()
1664 const Pointer &Ptr = S.Stk.peek<Pointer>(); in Load() local
1665 if (!CheckLoad(S, OpPC, Ptr)) in Load()
1667 if (!Ptr.isBlockPointer()) in Load()
1669 S.Stk.push<T>(Ptr.deref<T>()); in Load()
1675 const Pointer &Ptr = S.Stk.pop<Pointer>(); in LoadPop() local
1676 if (!CheckLoad(S, OpPC, Ptr)) in LoadPop()
1678 if (!Ptr.isBlockPointer()) in LoadPop()
1680 S.Stk.push<T>(Ptr.deref<T>()); in LoadPop()
1687 const Pointer &Ptr = S.Stk.peek<Pointer>(); in Store() local
1688 if (!CheckStore(S, OpPC, Ptr)) in Store()
1690 if (Ptr.canBeInitialized()) in Store()
1691 Ptr.initialize(); in Store()
1692 Ptr.deref<T>() = Value; in Store()
1699 const Pointer &Ptr = S.Stk.pop<Pointer>(); in StorePop() local
1700 if (!CheckStore(S, OpPC, Ptr)) in StorePop()
1702 if (Ptr.canBeInitialized()) in StorePop()
1703 Ptr.initialize(); in StorePop()
1704 Ptr.deref<T>() = Value; in StorePop()
1711 const Pointer &Ptr = S.Stk.peek<Pointer>(); in StoreBitField() local
1712 if (!CheckStore(S, OpPC, Ptr)) in StoreBitField()
1714 if (Ptr.canBeInitialized()) in StoreBitField()
1715 Ptr.initialize(); in StoreBitField()
1716 if (const auto *FD = Ptr.getField()) in StoreBitField()
1717 Ptr.deref<T>() = Value.truncate(FD->getBitWidthValue(S.getCtx())); in StoreBitField()
1719 Ptr.deref<T>() = Value; in StoreBitField()
1726 const Pointer &Ptr = S.Stk.pop<Pointer>(); in StoreBitFieldPop() local
1727 if (!CheckStore(S, OpPC, Ptr)) in StoreBitFieldPop()
1729 if (Ptr.canBeInitialized()) in StoreBitFieldPop()
1730 Ptr.initialize(); in StoreBitFieldPop()
1731 if (const auto *FD = Ptr.getField()) in StoreBitFieldPop()
1732 Ptr.deref<T>() = Value.truncate(FD->getBitWidthValue(S.getCtx())); in StoreBitFieldPop()
1734 Ptr.deref<T>() = Value; in StoreBitFieldPop()
1741 const Pointer &Ptr = S.Stk.peek<Pointer>(); in Init() local
1742 if (!CheckInit(S, OpPC, Ptr)) { in Init()
1746 Ptr.initialize(); in Init()
1747 new (&Ptr.deref<T>()) T(Value); in Init()
1754 const Pointer &Ptr = S.Stk.pop<Pointer>(); in InitPop() local
1755 if (!CheckInit(S, OpPC, Ptr)) in InitPop()
1757 Ptr.initialize(); in InitPop()
1758 new (&Ptr.deref<T>()) T(Value); in InitPop()
1768 const Pointer &Ptr = S.Stk.peek<Pointer>().atIndex(Idx); in InitElem() local
1769 if (Ptr.isUnknownSizeArray()) in InitElem()
1771 if (!CheckInit(S, OpPC, Ptr)) in InitElem()
1773 Ptr.initialize(); in InitElem()
1774 new (&Ptr.deref<T>()) T(Value); in InitElem()
1782 const Pointer &Ptr = S.Stk.pop<Pointer>().atIndex(Idx); in InitElemPop() local
1783 if (Ptr.isUnknownSizeArray()) in InitElemPop()
1785 if (!CheckInit(S, OpPC, Ptr)) in InitElemPop()
1787 Ptr.initialize(); in InitElemPop()
1788 new (&Ptr.deref<T>()) T(Value); in InitElemPop()
1813 if (std::optional<Pointer> Ptr = MP.toPointer(S.Ctx)) { in CastMemberPtrPtr() local
1814 S.Stk.push<Pointer>(*Ptr); in CastMemberPtrPtr()
1826 const Pointer &Ptr) { in OffsetHelper() argument
1829 S.Stk.push<Pointer>(Ptr); in OffsetHelper()
1833 if (!CheckNull(S, OpPC, Ptr, CSK_ArrayIndex)) { in OffsetHelper()
1841 if (!CheckArray(S, OpPC, Ptr)) in OffsetHelper()
1844 uint64_t MaxIndex = static_cast<uint64_t>(Ptr.getNumElems()); in OffsetHelper()
1846 if (Ptr.isOnePastEnd()) in OffsetHelper()
1849 Index = Ptr.getIndex(); in OffsetHelper()
1861 << NewIndex << /*array*/ static_cast<int>(!Ptr.inArray()) << MaxIndex; in OffsetHelper()
1865 if (Ptr.isBlockPointer()) { in OffsetHelper()
1903 if (Result == 0 && Ptr.isOnePastEnd()) { in OffsetHelper()
1904 S.Stk.push<Pointer>(Ptr.asBlockPointer().Pointee, in OffsetHelper()
1905 Ptr.asBlockPointer().Base); in OffsetHelper()
1909 S.Stk.push<Pointer>(Ptr.atIndex(static_cast<uint64_t>(Result))); in OffsetHelper()
1916 const Pointer &Ptr = S.Stk.pop<Pointer>(); in AddOffset() local
1917 return OffsetHelper<T, ArithOp::Add>(S, OpPC, Offset, Ptr); in AddOffset()
1923 const Pointer &Ptr = S.Stk.pop<Pointer>(); in SubOffset() local
1924 return OffsetHelper<T, ArithOp::Sub>(S, OpPC, Offset, Ptr); in SubOffset()
1929 const Pointer &Ptr) { in IncDecPtrHelper() argument
1930 if (Ptr.isDummy()) in IncDecPtrHelper()
1935 const Pointer &P = Ptr.deref<Pointer>(); in IncDecPtrHelper()
1948 Ptr.deref<Pointer>() = S.Stk.pop<Pointer>(); in IncDecPtrHelper()
1953 const Pointer &Ptr = S.Stk.pop<Pointer>(); in IncPtr() local
1955 if (!CheckInitialized(S, OpPC, Ptr, AK_Increment)) in IncPtr()
1958 return IncDecPtrHelper<ArithOp::Add>(S, OpPC, Ptr); in IncPtr()
1962 const Pointer &Ptr = S.Stk.pop<Pointer>(); in DecPtr() local
1964 if (!CheckInitialized(S, OpPC, Ptr, AK_Decrement)) in DecPtr()
1967 return IncDecPtrHelper<ArithOp::Sub>(S, OpPC, Ptr); in DecPtr()
2132 const Pointer &Ptr = S.Stk.pop<Pointer>(); in CastPointerIntegral() local
2134 if (Ptr.isDummy()) in CastPointerIntegral()
2141 S.Stk.push<T>(T::from(Ptr.getIntegerRepresentation())); in CastPointerIntegral()
2147 const Pointer &Ptr = S.Stk.pop<Pointer>(); in CastPointerIntegralAP() local
2149 if (Ptr.isDummy()) in CastPointerIntegralAP()
2157 IntegralAP<false>::from(Ptr.getIntegerRepresentation(), BitWidth)); in CastPointerIntegralAP()
2163 const Pointer &Ptr = S.Stk.pop<Pointer>(); in CastPointerIntegralAPS() local
2165 if (Ptr.isDummy()) in CastPointerIntegralAPS()
2173 IntegralAP<true>::from(Ptr.getIntegerRepresentation(), BitWidth)); in CastPointerIntegralAPS()
2178 const auto &Ptr = S.Stk.peek<Pointer>(); in PtrPtrCast() local
2181 bool HasValidResult = !Ptr.isZero(); in PtrPtrCast()
2363 const Pointer &Ptr = S.Stk.pop<Pointer>(); in NarrowPtr() local
2364 S.Stk.push<Pointer>(Ptr.narrow()); in NarrowPtr()
2369 const Pointer &Ptr = S.Stk.pop<Pointer>(); in ExpandPtr() local
2370 S.Stk.push<Pointer>(Ptr.expand()); in ExpandPtr()
2385 const Pointer &Ptr = S.Stk.peek<Pointer>(); in ArrayElemPtr() local
2387 if (!Ptr.isZero()) { in ArrayElemPtr()
2388 if (!CheckArray(S, OpPC, Ptr)) in ArrayElemPtr()
2392 if (!OffsetHelper<T, ArithOp::Add>(S, OpPC, Offset, Ptr)) in ArrayElemPtr()
2401 const Pointer &Ptr = S.Stk.pop<Pointer>(); in ArrayElemPtrPop() local
2403 if (!Ptr.isZero()) { in ArrayElemPtrPop()
2404 if (!CheckArray(S, OpPC, Ptr)) in ArrayElemPtrPop()
2408 if (!OffsetHelper<T, ArithOp::Add>(S, OpPC, Offset, Ptr)) in ArrayElemPtrPop()
2416 const Pointer &Ptr = S.Stk.peek<Pointer>(); in ArrayElem() local
2418 if (!CheckLoad(S, OpPC, Ptr)) in ArrayElem()
2421 S.Stk.push<T>(Ptr.atIndex(Index).deref<T>()); in ArrayElem()
2427 const Pointer &Ptr = S.Stk.pop<Pointer>(); in ArrayElemPop() local
2429 if (!CheckLoad(S, OpPC, Ptr)) in ArrayElemPop()
2432 S.Stk.push<T>(Ptr.atIndex(Index).deref<T>()); in ArrayElemPop()
2457 const Pointer &Ptr = S.Stk.pop<Pointer>(); in ArrayDecay() local
2459 if (Ptr.isZero()) { in ArrayDecay()
2460 S.Stk.push<Pointer>(Ptr); in ArrayDecay()
2464 if (!CheckRange(S, OpPC, Ptr, CSK_ArrayToPointer)) in ArrayDecay()
2467 if (Ptr.isRoot() || !Ptr.isUnknownSizeArray() || Ptr.isDummy()) { in ArrayDecay()
2468 S.Stk.push<Pointer>(Ptr.atIndex(0)); in ArrayDecay()
2920 const Pointer &Ptr = S.Stk.pop<Pointer>(); in Free() local
2923 if (Ptr.isZero()) in Free()
2926 if (!Ptr.isRoot() || Ptr.isOnePastEnd() || Ptr.isArrayElement()) { in Free()
2929 << Ptr.toDiagnosticString(S.getCtx()) << Ptr.isOnePastEnd(); in Free()
2933 Source = Ptr.getDeclDesc()->asExpr(); in Free()
2934 BlockToDelete = Ptr.block(); in Free()
2936 if (!CheckDeleteSource(S, OpPC, Source, Ptr)) in Free()