[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