[clang] [clang-tools-extra] [clang] NFC: Remove `OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr` (PR #74900)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 8 15:51:46 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Jan Svoboda (jansvoboda11)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/74900.diff
7 Files Affected:
- (modified) clang-tools-extra/clang-tidy/misc/IncludeCleanerCheck.cpp (+1-1)
- (modified) clang-tools-extra/clangd/IncludeCleaner.cpp (+4-4)
- (modified) clang-tools-extra/include-cleaner/lib/Analysis.cpp (+3-3)
- (modified) clang/include/clang/Basic/DirectoryEntry.h (-74)
- (modified) clang/include/clang/Basic/Module.h (+1-1)
- (modified) clang/include/clang/Lex/ModuleMap.h (+5-9)
- (modified) clang/lib/Serialization/ASTReader.cpp (+1-1)
``````````diff
diff --git a/clang-tools-extra/clang-tidy/misc/IncludeCleanerCheck.cpp b/clang-tools-extra/clang-tidy/misc/IncludeCleanerCheck.cpp
index e336ba1ee1fa72..5ae6caedb7f4c0 100644
--- a/clang-tools-extra/clang-tidy/misc/IncludeCleanerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/IncludeCleanerCheck.cpp
@@ -124,7 +124,7 @@ void IncludeCleanerCheck::check(const MatchFinder::MatchResult &Result) {
MainFileDecls.push_back(D);
}
llvm::DenseSet<include_cleaner::Symbol> SeenSymbols;
- const DirectoryEntry *ResourceDir =
+ OptionalDirectoryEntryRef ResourceDir =
PP->getHeaderSearchInfo().getModuleMap().getBuiltinDir();
// FIXME: Find a way to have less code duplication between include-cleaner
// analysis implementation and the below code.
diff --git a/clang-tools-extra/clangd/IncludeCleaner.cpp b/clang-tools-extra/clangd/IncludeCleaner.cpp
index b0a3c290bad660..dda7c9f581f69c 100644
--- a/clang-tools-extra/clangd/IncludeCleaner.cpp
+++ b/clang-tools-extra/clangd/IncludeCleaner.cpp
@@ -397,10 +397,10 @@ IncludeCleanerFindings computeIncludeCleanerFindings(ParsedAST &AST) {
std::vector<MissingIncludeDiagInfo> MissingIncludes;
llvm::DenseSet<IncludeStructure::HeaderID> Used;
trace::Span Tracer("include_cleaner::walkUsed");
- const DirectoryEntry *ResourceDir = AST.getPreprocessor()
- .getHeaderSearchInfo()
- .getModuleMap()
- .getBuiltinDir();
+ OptionalDirectoryEntryRef ResourceDir = AST.getPreprocessor()
+ .getHeaderSearchInfo()
+ .getModuleMap()
+ .getBuiltinDir();
include_cleaner::walkUsed(
AST.getLocalTopLevelDecls(), /*MacroRefs=*/Macros,
AST.getPragmaIncludes().get(), AST.getPreprocessor(),
diff --git a/clang-tools-extra/include-cleaner/lib/Analysis.cpp b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
index 09365c36f9f2c5..450c4c796c1415 100644
--- a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
+++ b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
@@ -87,7 +87,7 @@ analyze(llvm::ArrayRef<Decl *> ASTRoots,
llvm::StringSet<> Missing;
if (!HeaderFilter)
HeaderFilter = [](llvm::StringRef) { return false; };
- const DirectoryEntry *ResourceDir =
+ OptionalDirectoryEntryRef ResourceDir =
PP.getHeaderSearchInfo().getModuleMap().getBuiltinDir();
walkUsed(ASTRoots, MacroRefs, PI, PP,
[&](const SymbolReference &Ref, llvm::ArrayRef<Header> Providers) {
@@ -95,7 +95,7 @@ analyze(llvm::ArrayRef<Decl *> ASTRoots,
for (const Header &H : Providers) {
if (H.kind() == Header::Physical &&
(H.physical() == MainFile ||
- H.physical().getDir() == ResourceDir)) {
+ (ResourceDir && H.physical().getDir() == *ResourceDir))) {
Satisfied = true;
}
for (const Include *I : Inc.match(H)) {
@@ -114,7 +114,7 @@ analyze(llvm::ArrayRef<Decl *> ASTRoots,
for (const Include &I : Inc.all()) {
if (Used.contains(&I) || !I.Resolved ||
HeaderFilter(I.Resolved->getFileEntry().tryGetRealPathName()) ||
- I.Resolved->getFileEntry().getDir() == ResourceDir)
+ (ResourceDir && I.Resolved->getFileEntry().getDir() == *ResourceDir))
continue;
if (PI) {
if (PI->shouldKeep(*I.Resolved))
diff --git a/clang/include/clang/Basic/DirectoryEntry.h b/clang/include/clang/Basic/DirectoryEntry.h
index 5d083e68facd7a..906c2e9af23b31 100644
--- a/clang/include/clang/Basic/DirectoryEntry.h
+++ b/clang/include/clang/Basic/DirectoryEntry.h
@@ -245,78 +245,4 @@ template <> struct DenseMapInfo<clang::DirectoryEntryRef> {
} // end namespace llvm
-namespace clang {
-
-/// Wrapper around OptionalDirectoryEntryRef that degrades to 'const
-/// DirectoryEntry*', facilitating incremental patches to propagate
-/// DirectoryEntryRef.
-///
-/// This class can be used as return value or field where it's convenient for
-/// an OptionalDirectoryEntryRef to degrade to a 'const DirectoryEntry*'. The
-/// purpose is to avoid code churn due to dances like the following:
-/// \code
-/// // Old code.
-/// lvalue = rvalue;
-///
-/// // Temporary code from an incremental patch.
-/// OptionalDirectoryEntryRef MaybeF = rvalue;
-/// lvalue = MaybeF ? &MaybeF.getDirectoryEntry() : nullptr;
-///
-/// // Final code.
-/// lvalue = rvalue;
-/// \endcode
-///
-/// FIXME: Once DirectoryEntryRef is "everywhere" and DirectoryEntry::LastRef
-/// and DirectoryEntry::getName have been deleted, delete this class and
-/// replace instances with OptionalDirectoryEntryRef.
-class OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr
- : public OptionalDirectoryEntryRef {
-public:
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr() = default;
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr(
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &&) = default;
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr(
- const OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &) = default;
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &
- operator=(OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &&) = default;
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &
- operator=(const OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &) = default;
-
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr(std::nullopt_t) {}
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr(DirectoryEntryRef Ref)
- : OptionalDirectoryEntryRef(Ref) {}
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr(
- OptionalDirectoryEntryRef MaybeRef)
- : OptionalDirectoryEntryRef(MaybeRef) {}
-
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &
- operator=(std::nullopt_t) {
- OptionalDirectoryEntryRef::operator=(std::nullopt);
- return *this;
- }
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &operator=(DirectoryEntryRef Ref) {
- OptionalDirectoryEntryRef::operator=(Ref);
- return *this;
- }
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr &
- operator=(OptionalDirectoryEntryRef MaybeRef) {
- OptionalDirectoryEntryRef::operator=(MaybeRef);
- return *this;
- }
-
- /// Degrade to 'const DirectoryEntry *' to allow DirectoryEntry::LastRef and
- /// DirectoryEntry::getName have been deleted, delete this class and replace
- /// instances with OptionalDirectoryEntryRef
- operator const DirectoryEntry *() const {
- return has_value() ? &(*this)->getDirEntry() : nullptr;
- }
-};
-
-static_assert(std::is_trivially_copyable<
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr>::value,
- "OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr should be "
- "trivially copyable");
-
-} // end namespace clang
-
#endif // LLVM_CLANG_BASIC_DIRECTORYENTRY_H
diff --git a/clang/include/clang/Basic/Module.h b/clang/include/clang/Basic/Module.h
index d29cc0b45d583e..1b8f73b7f6d8a5 100644
--- a/clang/include/clang/Basic/Module.h
+++ b/clang/include/clang/Basic/Module.h
@@ -156,7 +156,7 @@ class alignas(8) Module {
/// The build directory of this module. This is the directory in
/// which the module is notionally built, and relative to which its headers
/// are found.
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr Directory;
+ OptionalDirectoryEntryRef Directory;
/// The presumed file name for the module map defining this module.
/// Only non-empty when building from preprocessed source.
diff --git a/clang/include/clang/Lex/ModuleMap.h b/clang/include/clang/Lex/ModuleMap.h
index 32e7e8f899e502..867cb6eab42f2d 100644
--- a/clang/include/clang/Lex/ModuleMap.h
+++ b/clang/include/clang/Lex/ModuleMap.h
@@ -82,7 +82,7 @@ class ModuleMap {
/// The directory used for Clang-supplied, builtin include headers,
/// such as "stdint.h".
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr BuiltinIncludeDir;
+ OptionalDirectoryEntryRef BuiltinIncludeDir;
/// Language options used to parse the module map itself.
///
@@ -408,16 +408,12 @@ class ModuleMap {
/// Set the target information.
void setTarget(const TargetInfo &Target);
- /// Set the directory that contains Clang-supplied include
- /// files, such as our stdarg.h or tgmath.h.
- void setBuiltinIncludeDir(DirectoryEntryRef Dir) {
- BuiltinIncludeDir = Dir;
- }
+ /// Set the directory that contains Clang-supplied include files, such as our
+ /// stdarg.h or tgmath.h.
+ void setBuiltinIncludeDir(DirectoryEntryRef Dir) { BuiltinIncludeDir = Dir; }
/// Get the directory that contains Clang-supplied include files.
- OptionalDirectoryEntryRefDegradesToDirectoryEntryPtr getBuiltinDir() const {
- return BuiltinIncludeDir;
- }
+ OptionalDirectoryEntryRef getBuiltinDir() const { return BuiltinIncludeDir; }
/// Is this a compiler builtin header?
bool isBuiltinHeader(FileEntryRef File);
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 49f25d6648c801..7a12c6b70e8dc5 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -3152,7 +3152,7 @@ ASTReader::ReadControlBlock(ModuleFile &F,
if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
DisableValidationForModuleKind::Module) &&
F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
- auto BuildDir = PP.getFileManager().getDirectory(Blob);
+ auto BuildDir = PP.getFileManager().getOptionalDirectoryRef(Blob);
if (!BuildDir || *BuildDir != M->Directory) {
if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
Diag(diag::err_imported_module_relocated)
``````````
</details>
https://github.com/llvm/llvm-project/pull/74900
More information about the cfe-commits
mailing list