Author: Timm Bäder Date: 2022-10-14T12:31:24+02:00 New Revision: 55c7ad31aacb6cdef19a7296fda56cc8b177e2b4
URL: https://github.com/llvm/llvm-project/commit/55c7ad31aacb6cdef19a7296fda56cc8b177e2b4 DIFF: https://github.com/llvm/llvm-project/commit/55c7ad31aacb6cdef19a7296fda56cc8b177e2b4.diff LOG: [clang][Interp][NFC] Pass Function* pointers around as const Added: Modified: clang/lib/AST/Interp/EvalEmitter.cpp clang/lib/AST/Interp/EvalEmitter.h clang/lib/AST/Interp/Function.h clang/lib/AST/Interp/InterpFrame.cpp clang/lib/AST/Interp/InterpFrame.h clang/lib/AST/Interp/InterpState.h clang/lib/AST/Interp/Source.cpp clang/lib/AST/Interp/Source.h Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/EvalEmitter.cpp b/clang/lib/AST/Interp/EvalEmitter.cpp index aa4396f135d2..0638a68297ed 100644 --- a/clang/lib/AST/Interp/EvalEmitter.cpp +++ b/clang/lib/AST/Interp/EvalEmitter.cpp @@ -105,7 +105,7 @@ template <PrimType OpType> bool EvalEmitter::emitRet(const SourceInfo &Info) { template <PrimType OpType> bool EvalEmitter::emitCall(const Function *Func, const SourceInfo &Info) { - S.Current = new InterpFrame(S, const_cast<Function *>(Func), {}); + S.Current = new InterpFrame(S, Func, {}); // Result of call will be on the stack and needs to be handled by the caller. return Interpret(S, Result); } @@ -114,7 +114,7 @@ bool EvalEmitter::emitCallVoid(const Function *Func, const SourceInfo &Info) { APValue VoidResult; InterpFrame *before = S.Current; (void)before; - S.Current = new InterpFrame(S, const_cast<Function *>(Func), {}); + S.Current = new InterpFrame(S, Func, {}); bool Success = Interpret(S, VoidResult); assert(VoidResult.isAbsent()); assert(S.Current == before); diff --git a/clang/lib/AST/Interp/EvalEmitter.h b/clang/lib/AST/Interp/EvalEmitter.h index 94c58ec11e2b..560ce6f6f470 100644 --- a/clang/lib/AST/Interp/EvalEmitter.h +++ b/clang/lib/AST/Interp/EvalEmitter.h @@ -71,7 +71,7 @@ class EvalEmitter : public SourceMapper { Local createLocal(Descriptor *D); /// Returns the source location of the current opcode. - SourceInfo getSource(Function *F, CodePtr PC) const override { + SourceInfo getSource(const Function *F, CodePtr PC) const override { return F ? F->getSource(PC) : CurrentSource; } diff --git a/clang/lib/AST/Interp/Function.h b/clang/lib/AST/Interp/Function.h index 1fc27ee60734..bb99ea72a442 100644 --- a/clang/lib/AST/Interp/Function.h +++ b/clang/lib/AST/Interp/Function.h @@ -43,7 +43,7 @@ class Scope final { Scope(LocalVectorTy &&Descriptors) : Descriptors(std::move(Descriptors)) {} - llvm::iterator_range<LocalVectorTy::iterator> locals() { + llvm::iterator_range<LocalVectorTy::const_iterator> locals() const { return llvm::make_range(Descriptors.begin(), Descriptors.end()); } @@ -102,18 +102,21 @@ class Function final { bool hasRVO() const { return HasRVO; } /// Range over the scope blocks. - llvm::iterator_range<llvm::SmallVector<Scope, 2>::iterator> scopes() { + llvm::iterator_range<llvm::SmallVector<Scope, 2>::const_iterator> + scopes() const { return llvm::make_range(Scopes.begin(), Scopes.end()); } /// Range over argument types. - using arg_reverse_iterator = SmallVectorImpl<PrimType>::reverse_iterator; - llvm::iterator_range<arg_reverse_iterator> args_reverse() { + using arg_reverse_iterator = + SmallVectorImpl<PrimType>::const_reverse_iterator; + llvm::iterator_range<arg_reverse_iterator> args_reverse() const { return llvm::make_range(ParamTypes.rbegin(), ParamTypes.rend()); } /// Returns a specific scope. Scope &getScope(unsigned Idx) { return Scopes[Idx]; } + const Scope &getScope(unsigned Idx) const { return Scopes[Idx]; } /// Returns the source information at a given PC. SourceInfo getSource(CodePtr PC) const; diff --git a/clang/lib/AST/Interp/InterpFrame.cpp b/clang/lib/AST/Interp/InterpFrame.cpp index fb8e5cf51a95..a2320f0d2076 100644 --- a/clang/lib/AST/Interp/InterpFrame.cpp +++ b/clang/lib/AST/Interp/InterpFrame.cpp @@ -18,8 +18,8 @@ using namespace clang; using namespace clang::interp; -InterpFrame::InterpFrame(InterpState &S, Function *Func, InterpFrame *Caller, - CodePtr RetPC, Pointer &&This) +InterpFrame::InterpFrame(InterpState &S, const Function *Func, + InterpFrame *Caller, CodePtr RetPC, Pointer &&This) : Caller(Caller), S(S), Func(Func), This(std::move(This)), RetPC(RetPC), ArgSize(Func ? Func->getArgSize() : 0), Args(static_cast<char *>(S.Stk.top())), FrameOffset(S.Stk.size()) { @@ -36,7 +36,7 @@ InterpFrame::InterpFrame(InterpState &S, Function *Func, InterpFrame *Caller, } } -InterpFrame::InterpFrame(InterpState &S, Function *Func, CodePtr RetPC) +InterpFrame::InterpFrame(InterpState &S, const Function *Func, CodePtr RetPC) : Caller(S.Current), S(S), Func(Func), RetPC(RetPC), ArgSize(Func ? Func->getArgSize() : 0), Args(static_cast<char *>(S.Stk.top())), FrameOffset(S.Stk.size()) { diff --git a/clang/lib/AST/Interp/InterpFrame.h b/clang/lib/AST/Interp/InterpFrame.h index 3cc894cd2334..ecbe697eacdd 100644 --- a/clang/lib/AST/Interp/InterpFrame.h +++ b/clang/lib/AST/Interp/InterpFrame.h @@ -32,13 +32,13 @@ class InterpFrame final : public Frame { InterpFrame *Caller; /// Creates a new frame for a method call. - InterpFrame(InterpState &S, Function *Func, InterpFrame *Caller, + InterpFrame(InterpState &S, const Function *Func, InterpFrame *Caller, CodePtr RetPC, Pointer &&This); /// Creates a new frame with the values that make sense. /// I.e., the caller is the current frame of S, /// and the This() pointer is the current Pointer on the top of S's stack, - InterpFrame(InterpState &S, Function *Func, CodePtr RetPC); + InterpFrame(InterpState &S, const Function *Func, CodePtr RetPC); /// Destroys the frame, killing all live pointers to stack slots. ~InterpFrame(); @@ -62,7 +62,7 @@ class InterpFrame final : public Frame { const FunctionDecl *getCallee() const override; /// Returns the current function. - Function *getFunction() const { return Func; } + const Function *getFunction() const { return Func; } /// Returns the offset on the stack at which the frame starts. size_t getFrameOffset() const { return FrameOffset; } @@ -136,7 +136,7 @@ class InterpFrame final : public Frame { /// Reference to the interpreter state. InterpState &S; /// Reference to the function being executed. - Function *Func; + const Function *Func; /// Current object pointer for methods. Pointer This; /// Return address. diff --git a/clang/lib/AST/Interp/InterpState.h b/clang/lib/AST/Interp/InterpState.h index 57e36c4c63ea..72f6dd09dc2e 100644 --- a/clang/lib/AST/Interp/InterpState.h +++ b/clang/lib/AST/Interp/InterpState.h @@ -81,7 +81,7 @@ class InterpState final : public State, public SourceMapper { void deallocate(Block *B); /// Delegates source mapping to the mapper. - SourceInfo getSource(Function *F, CodePtr PC) const override { + SourceInfo getSource(const Function *F, CodePtr PC) const override { return M ? M->getSource(F, PC) : F->getSource(PC); } diff --git a/clang/lib/AST/Interp/Source.cpp b/clang/lib/AST/Interp/Source.cpp index 4bec87812638..467cde116843 100644 --- a/clang/lib/AST/Interp/Source.cpp +++ b/clang/lib/AST/Interp/Source.cpp @@ -28,12 +28,12 @@ const Expr *SourceInfo::asExpr() const { return nullptr; } -const Expr *SourceMapper::getExpr(Function *F, CodePtr PC) const { +const Expr *SourceMapper::getExpr(const Function *F, CodePtr PC) const { if (const Expr *E = getSource(F, PC).asExpr()) return E; llvm::report_fatal_error("missing source expression"); } -SourceLocation SourceMapper::getLocation(Function *F, CodePtr PC) const { +SourceLocation SourceMapper::getLocation(const Function *F, CodePtr PC) const { return getSource(F, PC).getLoc(); } diff --git a/clang/lib/AST/Interp/Source.h b/clang/lib/AST/Interp/Source.h index 0d9780ca1c46..de4ae559e4bb 100644 --- a/clang/lib/AST/Interp/Source.h +++ b/clang/lib/AST/Interp/Source.h @@ -91,12 +91,12 @@ class SourceMapper { virtual ~SourceMapper() {} /// Returns source information for a given PC in a function. - virtual SourceInfo getSource(Function *F, CodePtr PC) const = 0; + virtual SourceInfo getSource(const Function *F, CodePtr PC) const = 0; /// Returns the expression if an opcode belongs to one, null otherwise. - const Expr *getExpr(Function *F, CodePtr PC) const; + const Expr *getExpr(const Function *F, CodePtr PC) const; /// Returns the location from which an opcode originates. - SourceLocation getLocation(Function *F, CodePtr PC) const; + SourceLocation getLocation(const Function *F, CodePtr PC) const; }; } // namespace interp _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits