[clang] [NFC] Parameterize Initialization of `clang::CodeGenerator` on a `TargetInfo` instance which may differ from the one in the `ASTContext` (PR #88977)

via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 16 13:03:06 PDT 2024


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff 281d71604f418eb952e967d9dc4b26241b7f96aa c86ee8d6fc2b0d3995f0dee4e7bc206ef6e05c8b -- clang/include/clang/AST/ASTConsumer.h clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/CodeGenModule.h clang/lib/CodeGen/ModuleBuilder.cpp clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/include/clang/AST/ASTConsumer.h b/clang/include/clang/AST/ASTConsumer.h
index 774d19565e..eeac3ea001 100644
--- a/clang/include/clang/AST/ASTConsumer.h
+++ b/clang/include/clang/AST/ASTConsumer.h
@@ -28,126 +28,130 @@ namespace clang {
   class ImportDecl;
   class TargetInfo;
 
-/// ASTConsumer - This is an abstract interface that should be implemented by
-/// clients that read ASTs.  This abstraction layer allows the client to be
-/// independent of the AST producer (e.g. parser vs AST dump file reader, etc).
-class ASTConsumer {
-  /// Whether this AST consumer also requires information about
-  /// semantic analysis.
-  bool SemaConsumer = false;
-
-  friend class SemaConsumer;
-
-public:
-  ASTConsumer() = default;
-
-  virtual ~ASTConsumer() {}
-
-  /// Initialize - This is called to initialize the consumer, providing the
-  /// ASTContext.
-  virtual void Initialize(ASTContext &Context) {}
-
-  /// Initialize - This is called to initialize the consumer, providing the
-  /// ASTContext.
-  virtual void Initialize(ASTContext &Context, const TargetInfo &CodeGenTargetInfo) {}
-
-  /// HandleTopLevelDecl - Handle the specified top-level declaration.  This is
-  /// called by the parser to process every top-level Decl*.
-  ///
-  /// \returns true to continue parsing, or false to abort parsing.
-  virtual bool HandleTopLevelDecl(DeclGroupRef D);
-
-  /// This callback is invoked each time an inline (method or friend)
-  /// function definition in a class is completed.
-  virtual void HandleInlineFunctionDefinition(FunctionDecl *D) {}
-
-  /// HandleInterestingDecl - Handle the specified interesting declaration. This
-  /// is called by the AST reader when deserializing things that might interest
-  /// the consumer. The default implementation forwards to HandleTopLevelDecl.
-  virtual void HandleInterestingDecl(DeclGroupRef D);
-
-  /// HandleTranslationUnit - This method is called when the ASTs for entire
-  /// translation unit have been parsed.
-  virtual void HandleTranslationUnit(ASTContext &Ctx) {}
-
-  /// HandleTagDeclDefinition - This callback is invoked each time a TagDecl
-  /// (e.g. struct, union, enum, class) is completed.  This allows the client to
-  /// hack on the type, which can occur at any point in the file (because these
-  /// can be defined in declspecs).
-  virtual void HandleTagDeclDefinition(TagDecl *D) {}
-
-  /// This callback is invoked the first time each TagDecl is required to
-  /// be complete.
-  virtual void HandleTagDeclRequiredDefinition(const TagDecl *D) {}
-
-  /// Invoked when a function is implicitly instantiated.
-  /// Note that at this point it does not have a body, its body is
-  /// instantiated at the end of the translation unit and passed to
-  /// HandleTopLevelDecl.
-  virtual void HandleCXXImplicitFunctionInstantiation(FunctionDecl *D) {}
-
-  /// Handle the specified top-level declaration that occurred inside
-  /// and ObjC container.
-  /// The default implementation ignored them.
-  virtual void HandleTopLevelDeclInObjCContainer(DeclGroupRef D);
-
-  /// Handle an ImportDecl that was implicitly created due to an
-  /// inclusion directive.
-  /// The default implementation passes it to HandleTopLevelDecl.
-  virtual void HandleImplicitImportDecl(ImportDecl *D);
-
-  /// CompleteTentativeDefinition - Callback invoked at the end of a translation
-  /// unit to notify the consumer that the given tentative definition should be
-  /// completed.
-  ///
-  /// The variable declaration itself will be a tentative
-  /// definition. If it had an incomplete array type, its type will
-  /// have already been changed to an array of size 1. However, the
-  /// declaration remains a tentative definition and has not been
-  /// modified by the introduction of an implicit zero initializer.
-  virtual void CompleteTentativeDefinition(VarDecl *D) {}
-
-  /// CompleteExternalDeclaration - Callback invoked at the end of a translation
-  /// unit to notify the consumer that the given external declaration should be
-  /// completed.
-  virtual void CompleteExternalDeclaration(VarDecl *D) {}
-
-  /// Callback invoked when an MSInheritanceAttr has been attached to a
-  /// CXXRecordDecl.
-  virtual void AssignInheritanceModel(CXXRecordDecl *RD) {}
-
-  /// HandleCXXStaticMemberVarInstantiation - Tell the consumer that this
-  // variable has been instantiated.
-  virtual void HandleCXXStaticMemberVarInstantiation(VarDecl *D) {}
-
-  /// Callback involved at the end of a translation unit to
-  /// notify the consumer that a vtable for the given C++ class is
-  /// required.
-  ///
-  /// \param RD The class whose vtable was used.
-  virtual void HandleVTable(CXXRecordDecl *RD) {}
-
-  /// If the consumer is interested in entities getting modified after
-  /// their initial creation, it should return a pointer to
-  /// an ASTMutationListener here.
-  virtual ASTMutationListener *GetASTMutationListener() { return nullptr; }
-
-  /// If the consumer is interested in entities being deserialized from
-  /// AST files, it should return a pointer to a ASTDeserializationListener here
-  virtual ASTDeserializationListener *GetASTDeserializationListener() {
-    return nullptr;
-  }
-
-  /// PrintStats - If desired, print any statistics.
-  virtual void PrintStats() {}
-
-  /// This callback is called for each function if the Parser was
-  /// initialized with \c SkipFunctionBodies set to \c true.
-  ///
-  /// \return \c true if the function's body should be skipped. The function
-  /// body may be parsed anyway if it is needed (for instance, if it contains
-  /// the code completion point or is constexpr).
-  virtual bool shouldSkipFunctionBody(Decl *D) { return true; }
+  /// ASTConsumer - This is an abstract interface that should be implemented by
+  /// clients that read ASTs.  This abstraction layer allows the client to be
+  /// independent of the AST producer (e.g. parser vs AST dump file reader,
+  /// etc).
+  class ASTConsumer {
+    /// Whether this AST consumer also requires information about
+    /// semantic analysis.
+    bool SemaConsumer = false;
+
+    friend class SemaConsumer;
+
+  public:
+    ASTConsumer() = default;
+
+    virtual ~ASTConsumer() {}
+
+    /// Initialize - This is called to initialize the consumer, providing the
+    /// ASTContext.
+    virtual void Initialize(ASTContext &Context) {}
+
+    /// Initialize - This is called to initialize the consumer, providing the
+    /// ASTContext.
+    virtual void Initialize(ASTContext &Context,
+                            const TargetInfo &CodeGenTargetInfo) {}
+
+    /// HandleTopLevelDecl - Handle the specified top-level declaration.  This
+    /// is called by the parser to process every top-level Decl*.
+    ///
+    /// \returns true to continue parsing, or false to abort parsing.
+    virtual bool HandleTopLevelDecl(DeclGroupRef D);
+
+    /// This callback is invoked each time an inline (method or friend)
+    /// function definition in a class is completed.
+    virtual void HandleInlineFunctionDefinition(FunctionDecl *D) {}
+
+    /// HandleInterestingDecl - Handle the specified interesting declaration.
+    /// This is called by the AST reader when deserializing things that might
+    /// interest the consumer. The default implementation forwards to
+    /// HandleTopLevelDecl.
+    virtual void HandleInterestingDecl(DeclGroupRef D);
+
+    /// HandleTranslationUnit - This method is called when the ASTs for entire
+    /// translation unit have been parsed.
+    virtual void HandleTranslationUnit(ASTContext &Ctx) {}
+
+    /// HandleTagDeclDefinition - This callback is invoked each time a TagDecl
+    /// (e.g. struct, union, enum, class) is completed.  This allows the client
+    /// to hack on the type, which can occur at any point in the file (because
+    /// these can be defined in declspecs).
+    virtual void HandleTagDeclDefinition(TagDecl *D) {}
+
+    /// This callback is invoked the first time each TagDecl is required to
+    /// be complete.
+    virtual void HandleTagDeclRequiredDefinition(const TagDecl *D) {}
+
+    /// Invoked when a function is implicitly instantiated.
+    /// Note that at this point it does not have a body, its body is
+    /// instantiated at the end of the translation unit and passed to
+    /// HandleTopLevelDecl.
+    virtual void HandleCXXImplicitFunctionInstantiation(FunctionDecl *D) {}
+
+    /// Handle the specified top-level declaration that occurred inside
+    /// and ObjC container.
+    /// The default implementation ignored them.
+    virtual void HandleTopLevelDeclInObjCContainer(DeclGroupRef D);
+
+    /// Handle an ImportDecl that was implicitly created due to an
+    /// inclusion directive.
+    /// The default implementation passes it to HandleTopLevelDecl.
+    virtual void HandleImplicitImportDecl(ImportDecl *D);
+
+    /// CompleteTentativeDefinition - Callback invoked at the end of a
+    /// translation unit to notify the consumer that the given tentative
+    /// definition should be completed.
+    ///
+    /// The variable declaration itself will be a tentative
+    /// definition. If it had an incomplete array type, its type will
+    /// have already been changed to an array of size 1. However, the
+    /// declaration remains a tentative definition and has not been
+    /// modified by the introduction of an implicit zero initializer.
+    virtual void CompleteTentativeDefinition(VarDecl *D) {}
+
+    /// CompleteExternalDeclaration - Callback invoked at the end of a
+    /// translation unit to notify the consumer that the given external
+    /// declaration should be completed.
+    virtual void CompleteExternalDeclaration(VarDecl *D) {}
+
+    /// Callback invoked when an MSInheritanceAttr has been attached to a
+    /// CXXRecordDecl.
+    virtual void AssignInheritanceModel(CXXRecordDecl *RD) {}
+
+    /// HandleCXXStaticMemberVarInstantiation - Tell the consumer that this
+    // variable has been instantiated.
+    virtual void HandleCXXStaticMemberVarInstantiation(VarDecl *D) {}
+
+    /// Callback involved at the end of a translation unit to
+    /// notify the consumer that a vtable for the given C++ class is
+    /// required.
+    ///
+    /// \param RD The class whose vtable was used.
+    virtual void HandleVTable(CXXRecordDecl *RD) {}
+
+    /// If the consumer is interested in entities getting modified after
+    /// their initial creation, it should return a pointer to
+    /// an ASTMutationListener here.
+    virtual ASTMutationListener *GetASTMutationListener() { return nullptr; }
+
+    /// If the consumer is interested in entities being deserialized from
+    /// AST files, it should return a pointer to a ASTDeserializationListener
+    /// here
+    virtual ASTDeserializationListener *GetASTDeserializationListener() {
+      return nullptr;
+    }
+
+    /// PrintStats - If desired, print any statistics.
+    virtual void PrintStats() {}
+
+    /// This callback is called for each function if the Parser was
+    /// initialized with \c SkipFunctionBodies set to \c true.
+    ///
+    /// \return \c true if the function's body should be skipped. The function
+    /// body may be parsed anyway if it is needed (for instance, if it contains
+    /// the code completion point or is constexpr).
+    virtual bool shouldSkipFunctionBody(Decl *D) { return true; }
 };
 
 } // end namespace clang.
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 52ff65c098..8380b71aba 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -333,16 +333,13 @@ CodeGenModule::CodeGenModule(ASTContext &C,
                              IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS,
                              const HeaderSearchOptions &HSO,
                              const PreprocessorOptions &PPO,
-                             const CodeGenOptions &CGO,
-                             const TargetInfo &CGTI,
-                             llvm::Module &M,
-                             DiagnosticsEngine &diags,
+                             const CodeGenOptions &CGO, const TargetInfo &CGTI,
+                             llvm::Module &M, DiagnosticsEngine &diags,
                              CoverageSourceInfo *CoverageInfo)
     : Context(C), LangOpts(C.getLangOpts()), FS(FS), HeaderSearchOpts(HSO),
       PreprocessorOpts(PPO), CodeGenOpts(CGO), TheModule(M), Diags(diags),
-      Target(CGTI), ABI(createCXXABI(*this)),
-      VMContext(M.getContext()), Types(*this), VTables(*this),
-      SanitizerMD(new SanitizerMetadata(*this)) {
+      Target(CGTI), ABI(createCXXABI(*this)), VMContext(M.getContext()),
+      Types(*this), VTables(*this), SanitizerMD(new SanitizerMetadata(*this)) {
 
   // Initialize the type cache.
   llvm::LLVMContext &LLVMContext = M.getContext();
@@ -360,14 +357,11 @@ CodeGenModule::CodeGenModule(ASTContext &C,
       C.toCharUnitsFromBits(Target.getPointerAlign(LangAS::Default))
           .getQuantity();
   SizeSizeInBytes =
-    C.toCharUnitsFromBits(Target.getMaxPointerWidth()).getQuantity();
-  IntAlignInBytes =
-    C.toCharUnitsFromBits(Target.getIntAlign()).getQuantity();
-  CharTy =
-    llvm::IntegerType::get(LLVMContext, Target.getCharWidth());
+      C.toCharUnitsFromBits(Target.getMaxPointerWidth()).getQuantity();
+  IntAlignInBytes = C.toCharUnitsFromBits(Target.getIntAlign()).getQuantity();
+  CharTy = llvm::IntegerType::get(LLVMContext, Target.getCharWidth());
   IntTy = llvm::IntegerType::get(LLVMContext, Target.getIntWidth());
-  IntPtrTy = llvm::IntegerType::get(LLVMContext,
-    Target.getMaxPointerWidth());
+  IntPtrTy = llvm::IntegerType::get(LLVMContext, Target.getMaxPointerWidth());
   Int8PtrTy = Int8Ty->getPointerTo(0);
   Int8PtrPtrTy = Int8PtrTy->getPointerTo(0);
   const llvm::DataLayout &DL = M.getDataLayout();
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h
index 7721941ce3..796efca160 100644
--- a/clang/lib/CodeGen/CodeGenModule.h
+++ b/clang/lib/CodeGen/CodeGenModule.h
@@ -614,8 +614,7 @@ public:
                 const HeaderSearchOptions &headersearchopts,
                 const PreprocessorOptions &ppopts,
                 const CodeGenOptions &CodeGenOpts,
-                const TargetInfo &CodeGenTargetInfo,
-                llvm::Module &M,
+                const TargetInfo &CodeGenTargetInfo, llvm::Module &M,
                 DiagnosticsEngine &Diags,
                 CoverageSourceInfo *CoverageInfo = nullptr);
 
diff --git a/clang/lib/CodeGen/ModuleBuilder.cpp b/clang/lib/CodeGen/ModuleBuilder.cpp
index adcbe4c088..e66482e925 100644
--- a/clang/lib/CodeGen/ModuleBuilder.cpp
+++ b/clang/lib/CodeGen/ModuleBuilder.cpp
@@ -152,7 +152,8 @@ namespace {
       Initialize(Context, Context.getTargetInfo());
     }
 
-    void Initialize(ASTContext &Context, const TargetInfo &CodeGenTargetInfo) override {
+    void Initialize(ASTContext &Context,
+                    const TargetInfo &CodeGenTargetInfo) override {
       Ctx = &Context;
 
       M->setTargetTriple(CodeGenTargetInfo.getTriple().getTriple());
@@ -163,12 +164,11 @@ namespace {
       if (const auto *TVT = CodeGenTargetInfo.getDarwinTargetVariantTriple())
         M->setDarwinTargetVariantTriple(TVT->getTriple());
       if (auto TVSDKVersion =
-          CodeGenTargetInfo.getDarwinTargetVariantSDKVersion())
+              CodeGenTargetInfo.getDarwinTargetVariantSDKVersion())
         M->setDarwinTargetVariantSDKVersion(*TVSDKVersion);
-      Builder.reset(new CodeGen::CodeGenModule(Context, FS, HeaderSearchOpts,
-                                               PreprocessorOpts, CodeGenOpts,
-                                               CodeGenTargetInfo, *M,
-                                               Diags, CoverageInfo));
+      Builder.reset(new CodeGen::CodeGenModule(
+          Context, FS, HeaderSearchOpts, PreprocessorOpts, CodeGenOpts,
+          CodeGenTargetInfo, *M, Diags, CoverageInfo));
 
       for (auto &&Lib : CodeGenOpts.DependentLibraries)
         Builder->AddDependentLib(Lib);
diff --git a/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp b/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
index 3487d77884..752c5d0495 100644
--- a/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
+++ b/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
@@ -177,9 +177,9 @@ public:
     VMContext.reset(new llvm::LLVMContext());
     M.reset(new llvm::Module(MainFileName, *VMContext));
     M->setDataLayout(Ctx->getTargetInfo().getDataLayoutString());
-    Builder.reset(new CodeGen::CodeGenModule(
-        *Ctx, FS, HeaderSearchOpts, PreprocessorOpts, CodeGenOpts, Ctx->getTargetInfo(),
-        *M, Diags));
+    Builder.reset(new CodeGen::CodeGenModule(*Ctx, FS, HeaderSearchOpts,
+                                             PreprocessorOpts, CodeGenOpts,
+                                             Ctx->getTargetInfo(), *M, Diags));
 
     // Prepare CGDebugInfo to emit debug info for a clang module.
     auto *DI = Builder->getModuleDebugInfo();

``````````

</details>


https://github.com/llvm/llvm-project/pull/88977


More information about the cfe-commits mailing list