llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Timm Baeder (tbaederr) <details> <summary>Changes</summary> Do the `const_cast` only once, in `ASTContext::getInterpContext()`. --- Full diff: https://github.com/llvm/llvm-project/pull/182884.diff 3 Files Affected: - (modified) clang/include/clang/AST/ASTContext.h (+2-2) - (modified) clang/lib/AST/ASTContext.cpp (+2-2) - (modified) clang/lib/AST/ExprConstant.cpp (+1-1) ``````````diff diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h index 8f9ea2622005d..05302c30d18d1 100644 --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -787,7 +787,7 @@ class ASTContext : public RefCountedBase<ASTContext> { const TargetInfo *Target = nullptr; const TargetInfo *AuxTarget = nullptr; clang::PrintingPolicy PrintingPolicy; - std::unique_ptr<interp::Context> InterpContext; + mutable std::unique_ptr<interp::Context> InterpContext; std::unique_ptr<ParentMapContext> ParentMapCtx; /// Keeps track of the deallocated DeclListNodes for future reuse. @@ -803,7 +803,7 @@ class ASTContext : public RefCountedBase<ASTContext> { ASTMutationListener *Listener = nullptr; /// Returns the clang bytecode interpreter context. - interp::Context &getInterpContext(); + interp::Context &getInterpContext() const; struct CUDAConstantEvalContext { /// Do not allow wrong-sided variables in constant expressions. diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index d97a97091e4eb..b74766dab38f8 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -851,9 +851,9 @@ CXXABI *ASTContext::createCXXABI(const TargetInfo &T) { llvm_unreachable("Invalid CXXABI type!"); } -interp::Context &ASTContext::getInterpContext() { +interp::Context &ASTContext::getInterpContext() const { if (!InterpContext) { - InterpContext.reset(new interp::Context(*this)); + InterpContext.reset(new interp::Context(const_cast<ASTContext &>(*this))); } return *InterpContext; } diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index b06233423db4d..5b3be963d9d74 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -20804,7 +20804,7 @@ bool Expr::EvaluateAsInitializer(APValue &Value, const ASTContext &Ctx, QualType DeclTy = VD->getType(); if (Info.EnableNewConstInterp) { - auto &InterpCtx = const_cast<ASTContext &>(Ctx).getInterpContext(); + auto &InterpCtx = Ctx.getInterpContext(); if (!InterpCtx.evaluateAsInitializer(Info, VD, this, Value)) return false; `````````` </details> https://github.com/llvm/llvm-project/pull/182884 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
