llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Sameer Sahasrabuddhe (ssahasra)

<details>
<summary>Changes</summary>

Update Create() static factory methods, CreateDeserialized() methods, and 
constructors in Decl.h to accept const ASTContext&amp; instead of 
ASTContext&amp;. This change makes ASTContext parameters const-correct for 
declaration creation and deserialization, affecting all Decl subclasses 
declared in Decl.h.

Exceptions kept as non-const (only 3 methods):
- TranslationUnitDecl::Create() and constructor: stores non-const 
ASTContext&amp; member that is returned by getASTContext()
- DefaultedOrDeletedFunctionInfo::Create(): calls Context.Allocate() which 
requires non-const access

Assisted-By: Claude Sonnect 4.5

---

Patch is 49.07 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/185401.diff


3 Files Affected:

- (modified) clang/include/clang/AST/Decl.h (+92-80) 
- (modified) clang/lib/AST/Decl.cpp (+82-71) 
- (modified) clang/lib/AST/DeclCXX.cpp (+3-3) 


``````````diff
diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h
index c3cd74a5b34db..a5b83aa55c1b0 100644
--- a/clang/include/clang/AST/Decl.h
+++ b/clang/include/clang/AST/Decl.h
@@ -182,8 +182,8 @@ class PragmaCommentDecl final
                                    SourceLocation CommentLoc,
                                    PragmaMSCommentKind CommentKind,
                                    StringRef Arg);
-  static PragmaCommentDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID,
-                                               unsigned ArgSize);
+  static PragmaCommentDecl *
+  CreateDeserialized(const ASTContext &C, GlobalDeclID ID, unsigned ArgSize);
 
   PragmaMSCommentKind getCommentKind() const { return CommentKind; }
 
@@ -216,8 +216,9 @@ class PragmaDetectMismatchDecl final
                                           TranslationUnitDecl *DC,
                                           SourceLocation Loc, StringRef Name,
                                           StringRef Value);
-  static PragmaDetectMismatchDecl *
-  CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NameValueSize);
+  static PragmaDetectMismatchDecl *CreateDeserialized(const ASTContext &C,
+                                                      GlobalDeclID ID,
+                                                      unsigned NameValueSize);
 
   StringRef getName() const { return getTrailingObjects(); }
   StringRef getValue() const { return getTrailingObjects() + ValueStart; }
@@ -538,12 +539,12 @@ class LabelDecl : public NamedDecl {
   void anchor() override;
 
 public:
-  static LabelDecl *Create(ASTContext &C, DeclContext *DC,
+  static LabelDecl *Create(const ASTContext &C, DeclContext *DC,
                            SourceLocation IdentL, IdentifierInfo *II);
-  static LabelDecl *Create(ASTContext &C, DeclContext *DC,
+  static LabelDecl *Create(const ASTContext &C, DeclContext *DC,
                            SourceLocation IdentL, IdentifierInfo *II,
                            SourceLocation GnuLabelL);
-  static LabelDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static LabelDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID);
 
   LabelStmt *getStmt() const { return TheStmt; }
   void setStmt(LabelStmt *T) { TheStmt = T; }
@@ -600,7 +601,7 @@ class NamespaceDecl : public NamespaceBaseDecl,
   /// The unnamed namespace that inhabits this namespace, if any.
   NamespaceDecl *AnonymousNamespace = nullptr;
 
-  NamespaceDecl(ASTContext &C, DeclContext *DC, bool Inline,
+  NamespaceDecl(const ASTContext &C, DeclContext *DC, bool Inline,
                 SourceLocation StartLoc, SourceLocation IdLoc,
                 IdentifierInfo *Id, NamespaceDecl *PrevDecl, bool Nested);
 
@@ -614,12 +615,13 @@ class NamespaceDecl : public NamespaceBaseDecl,
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  static NamespaceDecl *Create(ASTContext &C, DeclContext *DC, bool Inline,
-                               SourceLocation StartLoc, SourceLocation IdLoc,
-                               IdentifierInfo *Id, NamespaceDecl *PrevDecl,
-                               bool Nested);
+  static NamespaceDecl *Create(const ASTContext &C, DeclContext *DC,
+                               bool Inline, SourceLocation StartLoc,
+                               SourceLocation IdLoc, IdentifierInfo *Id,
+                               NamespaceDecl *PrevDecl, bool Nested);
 
-  static NamespaceDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static NamespaceDecl *CreateDeserialized(const ASTContext &C,
+                                           GlobalDeclID ID);
 
   using redecl_range = redeclarable_base::redecl_range;
   using redecl_iterator = redeclarable_base::redecl_iterator;
@@ -1125,9 +1127,10 @@ class VarDecl : public DeclaratorDecl, public 
Redeclarable<VarDecl> {
     NonParmVarDeclBitfields NonParmVarDeclBits;
   };
 
-  VarDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
-          SourceLocation IdLoc, const IdentifierInfo *Id, QualType T,
-          TypeSourceInfo *TInfo, StorageClass SC);
+  VarDecl(Kind DK, const ASTContext &C, DeclContext *DC,
+          SourceLocation StartLoc, SourceLocation IdLoc,
+          const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo,
+          StorageClass SC);
 
   using redeclarable_base = Redeclarable<VarDecl>;
 
@@ -1154,12 +1157,12 @@ class VarDecl : public DeclaratorDecl, public 
Redeclarable<VarDecl> {
   using redeclarable_base::getMostRecentDecl;
   using redeclarable_base::isFirstDecl;
 
-  static VarDecl *Create(ASTContext &C, DeclContext *DC,
+  static VarDecl *Create(const ASTContext &C, DeclContext *DC,
                          SourceLocation StartLoc, SourceLocation IdLoc,
                          const IdentifierInfo *Id, QualType T,
                          TypeSourceInfo *TInfo, StorageClass S);
 
-  static VarDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static VarDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID);
 
   SourceRange getSourceRange() const override LLVM_READONLY;
 
@@ -1751,15 +1754,16 @@ class ImplicitParamDecl : public VarDecl {
 
 public:
   /// Create implicit parameter.
-  static ImplicitParamDecl *Create(ASTContext &C, DeclContext *DC,
+  static ImplicitParamDecl *Create(const ASTContext &C, DeclContext *DC,
                                    SourceLocation IdLoc, IdentifierInfo *Id,
                                    QualType T, ImplicitParamKind ParamKind);
-  static ImplicitParamDecl *Create(ASTContext &C, QualType T,
+  static ImplicitParamDecl *Create(const ASTContext &C, QualType T,
                                    ImplicitParamKind ParamKind);
 
-  static ImplicitParamDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static ImplicitParamDecl *CreateDeserialized(const ASTContext &C,
+                                               GlobalDeclID ID);
 
-  ImplicitParamDecl(ASTContext &C, DeclContext *DC, SourceLocation IdLoc,
+  ImplicitParamDecl(const ASTContext &C, DeclContext *DC, SourceLocation IdLoc,
                     const IdentifierInfo *Id, QualType Type,
                     ImplicitParamKind ParamKind)
       : VarDecl(ImplicitParam, C, DC, IdLoc, IdLoc, Id, Type,
@@ -1768,7 +1772,8 @@ class ImplicitParamDecl : public VarDecl {
     setImplicit();
   }
 
-  ImplicitParamDecl(ASTContext &C, QualType Type, ImplicitParamKind ParamKind)
+  ImplicitParamDecl(const ASTContext &C, QualType Type,
+                    ImplicitParamKind ParamKind)
       : VarDecl(ImplicitParam, C, /*DC=*/nullptr, SourceLocation(),
                 SourceLocation(), /*Id=*/nullptr, Type,
                 /*TInfo=*/nullptr, SC_None) {
@@ -1793,9 +1798,10 @@ class ParmVarDecl : public VarDecl {
   enum { MaxFunctionScopeIndex = 255 };
 
 protected:
-  ParmVarDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
-              SourceLocation IdLoc, const IdentifierInfo *Id, QualType T,
-              TypeSourceInfo *TInfo, StorageClass S, Expr *DefArg)
+  ParmVarDecl(Kind DK, const ASTContext &C, DeclContext *DC,
+              SourceLocation StartLoc, SourceLocation IdLoc,
+              const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo,
+              StorageClass S, Expr *DefArg)
       : VarDecl(DK, C, DC, StartLoc, IdLoc, Id, T, TInfo, S) {
     assert(ParmVarDeclBits.HasInheritedDefaultArg == false);
     assert(ParmVarDeclBits.DefaultArgKind == DAK_None);
@@ -1805,13 +1811,13 @@ class ParmVarDecl : public VarDecl {
   }
 
 public:
-  static ParmVarDecl *Create(ASTContext &C, DeclContext *DC,
+  static ParmVarDecl *Create(const ASTContext &C, DeclContext *DC,
                              SourceLocation StartLoc, SourceLocation IdLoc,
                              const IdentifierInfo *Id, QualType T,
                              TypeSourceInfo *TInfo, StorageClass S,
                              Expr *DefArg);
 
-  static ParmVarDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static ParmVarDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID);
 
   SourceRange getSourceRange() const override LLVM_READONLY;
 
@@ -2151,10 +2157,11 @@ class FunctionDecl : public DeclaratorDecl,
   void setHasODRHash(bool B = true) { FunctionDeclBits.HasODRHash = B; }
 
 protected:
-  FunctionDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation 
StartLoc,
-               const DeclarationNameInfo &NameInfo, QualType T,
-               TypeSourceInfo *TInfo, StorageClass S, bool UsesFPIntrin,
-               bool isInlineSpecified, ConstexprSpecKind ConstexprKind,
+  FunctionDecl(Kind DK, const ASTContext &C, DeclContext *DC,
+               SourceLocation StartLoc, const DeclarationNameInfo &NameInfo,
+               QualType T, TypeSourceInfo *TInfo, StorageClass S,
+               bool UsesFPIntrin, bool isInlineSpecified,
+               ConstexprSpecKind ConstexprKind,
                const AssociatedConstraint &TrailingRequiresClause);
 
   using redeclarable_base = Redeclarable<FunctionDecl>;
@@ -2186,7 +2193,7 @@ class FunctionDecl : public DeclaratorDecl,
   using redeclarable_base::isFirstDecl;
 
   static FunctionDecl *
-  Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
+  Create(const ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
          SourceLocation NLoc, DeclarationName N, QualType T,
          TypeSourceInfo *TInfo, StorageClass SC, bool UsesFPIntrin = false,
          bool isInlineSpecified = false, bool hasWrittenPrototype = true,
@@ -2200,13 +2207,13 @@ class FunctionDecl : public DeclaratorDecl,
   }
 
   static FunctionDecl *
-  Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
+  Create(const ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
          const DeclarationNameInfo &NameInfo, QualType T, TypeSourceInfo 
*TInfo,
          StorageClass SC, bool UsesFPIntrin, bool isInlineSpecified,
          bool hasWrittenPrototype, ConstexprSpecKind ConstexprKind,
          const AssociatedConstraint &TrailingRequiresClause);
 
-  static FunctionDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static FunctionDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID 
ID);
 
   DeclarationNameInfo getNameInfo() const {
     return DeclarationNameInfo(getDeclName(), getLocation(), DNLoc);
@@ -3238,7 +3245,7 @@ class FieldDecl : public DeclaratorDecl, public 
Mergeable<FieldDecl> {
                            TypeSourceInfo *TInfo, Expr *BW, bool Mutable,
                            InClassInitStyle InitStyle);
 
-  static FieldDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static FieldDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID);
 
   /// Returns the index of this field within its record,
   /// as appropriate for passing to ASTRecordLayout::getFieldOffset.
@@ -3432,11 +3439,11 @@ class EnumConstantDecl : public ValueDecl,
 public:
   friend class StmtIteratorBase;
 
-  static EnumConstantDecl *Create(ASTContext &C, EnumDecl *DC,
+  static EnumConstantDecl *Create(const ASTContext &C, EnumDecl *DC,
                                   SourceLocation L, IdentifierInfo *Id,
-                                  QualType T, Expr *E,
-                                  const llvm::APSInt &V);
-  static EnumConstantDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+                                  QualType T, Expr *E, const llvm::APSInt &V);
+  static EnumConstantDecl *CreateDeserialized(const ASTContext &C,
+                                              GlobalDeclID ID);
 
   const Expr *getInitExpr() const { return (const Expr*) Init; }
   Expr *getInitExpr() { return (Expr*) Init; }
@@ -3468,7 +3475,7 @@ class IndirectFieldDecl : public ValueDecl,
   NamedDecl **Chaining;
   unsigned ChainingSize;
 
-  IndirectFieldDecl(ASTContext &C, DeclContext *DC, SourceLocation L,
+  IndirectFieldDecl(const ASTContext &C, DeclContext *DC, SourceLocation L,
                     DeclarationName N, QualType T,
                     MutableArrayRef<NamedDecl *> CH);
 
@@ -3477,11 +3484,12 @@ class IndirectFieldDecl : public ValueDecl,
 public:
   friend class ASTDeclReader;
 
-  static IndirectFieldDecl *Create(ASTContext &C, DeclContext *DC,
+  static IndirectFieldDecl *Create(const ASTContext &C, DeclContext *DC,
                                    SourceLocation L, const IdentifierInfo *Id,
                                    QualType T, MutableArrayRef<NamedDecl *> 
CH);
 
-  static IndirectFieldDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static IndirectFieldDecl *CreateDeserialized(const ASTContext &C,
+                                               GlobalDeclID ID);
 
   using chain_iterator = ArrayRef<NamedDecl *>::const_iterator;
 
@@ -3574,7 +3582,7 @@ class TypedefNameDecl : public TypeDecl, public 
Redeclarable<TypedefNameDecl> {
   void anchor() override;
 
 protected:
-  TypedefNameDecl(Kind DK, ASTContext &C, DeclContext *DC,
+  TypedefNameDecl(Kind DK, const ASTContext &C, DeclContext *DC,
                   SourceLocation StartLoc, SourceLocation IdLoc,
                   const IdentifierInfo *Id, TypeSourceInfo *TInfo)
       : TypeDecl(DK, DC, IdLoc, Id, StartLoc), redeclarable_base(C),
@@ -3665,16 +3673,16 @@ class TypedefNameDecl : public TypeDecl, public 
Redeclarable<TypedefNameDecl> {
 /// Represents the declaration of a typedef-name via the 'typedef'
 /// type specifier.
 class TypedefDecl : public TypedefNameDecl {
-  TypedefDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
+  TypedefDecl(const ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
               SourceLocation IdLoc, const IdentifierInfo *Id,
               TypeSourceInfo *TInfo)
       : TypedefNameDecl(Typedef, C, DC, StartLoc, IdLoc, Id, TInfo) {}
 
 public:
-  static TypedefDecl *Create(ASTContext &C, DeclContext *DC,
+  static TypedefDecl *Create(const ASTContext &C, DeclContext *DC,
                              SourceLocation StartLoc, SourceLocation IdLoc,
                              const IdentifierInfo *Id, TypeSourceInfo *TInfo);
-  static TypedefDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static TypedefDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID);
 
   SourceRange getSourceRange() const override LLVM_READONLY;
 
@@ -3689,17 +3697,18 @@ class TypeAliasDecl : public TypedefNameDecl {
   /// The template for which this is the pattern, if any.
   TypeAliasTemplateDecl *Template;
 
-  TypeAliasDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
+  TypeAliasDecl(const ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
                 SourceLocation IdLoc, const IdentifierInfo *Id,
                 TypeSourceInfo *TInfo)
       : TypedefNameDecl(TypeAlias, C, DC, StartLoc, IdLoc, Id, TInfo),
         Template(nullptr) {}
 
 public:
-  static TypeAliasDecl *Create(ASTContext &C, DeclContext *DC,
+  static TypeAliasDecl *Create(const ASTContext &C, DeclContext *DC,
                                SourceLocation StartLoc, SourceLocation IdLoc,
                                const IdentifierInfo *Id, TypeSourceInfo 
*TInfo);
-  static TypeAliasDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static TypeAliasDecl *CreateDeserialized(const ASTContext &C,
+                                           GlobalDeclID ID);
 
   SourceRange getSourceRange() const override LLVM_READONLY;
 
@@ -4051,7 +4060,7 @@ class EnumDecl : public TagDecl {
   ///  - 'enum class|struct' (scoped)
   SourceRange EnumKeyRange;
 
-  EnumDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
+  EnumDecl(const ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
            SourceLocation IdLoc, IdentifierInfo *Id, EnumDecl *PrevDecl,
            bool Scoped, bool ScopedUsingClassTag, bool Fixed);
 
@@ -4130,12 +4139,11 @@ class EnumDecl : public TagDecl {
     return cast_or_null<EnumDecl>(TagDecl::getDefinitionOrSelf());
   }
 
-  static EnumDecl *Create(ASTContext &C, DeclContext *DC,
+  static EnumDecl *Create(const ASTContext &C, DeclContext *DC,
                           SourceLocation StartLoc, SourceLocation IdLoc,
-                          IdentifierInfo *Id, EnumDecl *PrevDecl,
-                          bool IsScoped, bool IsScopedUsingClassTag,
-                          bool IsFixed);
-  static EnumDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+                          IdentifierInfo *Id, EnumDecl *PrevDecl, bool 
IsScoped,
+                          bool IsScopedUsingClassTag, bool IsFixed);
+  static EnumDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID);
 
   /// Overrides to provide correct range when there's an enum-base specifier
   /// with forward declarations.
@@ -4606,11 +4614,12 @@ class FileScopeAsmDecl : public Decl {
   virtual void anchor();
 
 public:
-  static FileScopeAsmDecl *Create(ASTContext &C, DeclContext *DC, Expr *Str,
-                                  SourceLocation AsmLoc,
+  static FileScopeAsmDecl *Create(const ASTContext &C, DeclContext *DC,
+                                  Expr *Str, SourceLocation AsmLoc,
                                   SourceLocation RParenLoc);
 
-  static FileScopeAsmDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static FileScopeAsmDecl *CreateDeserialized(const ASTContext &C,
+                                              GlobalDeclID ID);
 
   SourceLocation getAsmLoc() const { return getLocation(); }
   SourceLocation getRParenLoc() const { return RParenLoc; }
@@ -4647,8 +4656,9 @@ class TopLevelStmtDecl : public Decl, public DeclContext {
   virtual void anchor();
 
 public:
-  static TopLevelStmtDecl *Create(ASTContext &C, Stmt *Statement);
-  static TopLevelStmtDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static TopLevelStmtDecl *Create(const ASTContext &C, Stmt *Statement);
+  static TopLevelStmtDecl *CreateDeserialized(const ASTContext &C,
+                                              GlobalDeclID ID);
 
   SourceRange getSourceRange() const override LLVM_READONLY;
   Stmt *getStmt() { return Statement; }
@@ -4741,8 +4751,9 @@ class BlockDecl : public Decl, public DeclContext {
   BlockDecl(DeclContext *DC, SourceLocation CaretLoc);
 
 public:
-  static BlockDecl *Create(ASTContext &C, DeclContext *DC, SourceLocation L);
-  static BlockDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID);
+  static BlockDecl *Create(const ASTContext &C, DeclContext *DC,
+                           SourceLocation L);
+  static BlockDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID);
 
   SourceLocation getCaretLocation() const { return getLocation(); }
 
@@ -4897,10 +4908,10 @@ class OutlinedFunctionDecl final
   friend class ASTDeclWriter;
   friend TrailingObjects;
 
-  static OutlinedFunctionDecl *Create(ASTContext &C, DeclContext *DC,
+  static OutlinedFunctionDecl *Create(const ASTContext &C, DeclContext *DC,
                                       unsigned NumParams);
   static OutlinedFunctionDecl *
-  CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NumParams);
+  CreateDeserialized(const ASTContext &C, GlobalDeclID ID, unsigned NumParams);
 
   Stmt *getBody() const override;
   void setBody(Stmt *B);
@@ -4970,9 +4981,9 @@ class CapturedDecl final
   friend class ASTDeclWriter;
   friend TrailingObjects;
 
-  static CapturedDecl *Create(ASTContext &C, DeclContext *DC,
+  static CapturedDecl *Create(const ASTContext &C, DeclContext *DC,
                               unsigned NumParams);
-  static CapturedDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID,
+  static CapturedDecl *CreateDeserialized(const ASTContext &C, GlobalDeclID ID,
                                           unsigned NumParams);
 
   Stmt *getBody() const override;
@@ -5095,18 +5106,18 @@ class ImportDecl final : public Decl,
 
 public:
   /// Create a new module import declaration.
-  static ImportDecl *Create(ASTContext &C, DeclContext *DC,
+  static ImportDecl *Create(const ASTContext &C, DeclContext *DC,
                             SourceLocation StartLoc, Module *Imported,
                             ArrayRef<SourceLocation> IdentifierLocs);
 
   /// Create a new module import declaration for an implicitly-generated
   /// import.
-  static ImportDecl *CreateImplicit(ASTContext &C, DeclContext *DC,
+  static ImportDecl *CreateImplicit(const ASTContext &C, DeclContext *DC,
  ...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/185401
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to