Skip to content

Commit

Permalink
[AST] Remove DeclCXX.h dep on ASTContext.h
Browse files Browse the repository at this point in the history
Saves only 36 includes of ASTContext.h and related headers.

There are two deps on ASTContext.h:
- C++ method overrides iterator types (TinyPtrVector)
- getting LangOptions

For #1, duplicate the iterator type, which is
TinyPtrVector<>::const_iterator.

For rust-lang#2, add an out-of-line accessor to get the language options. Getting
the ASTContext from a Decl is already an out of line method that loops
over the parent DeclContexts, so if it is ever performance critical, the
proper fix is to pass the context (or LangOpts) into the predicate in
question.

Other changes are just header fixups.
  • Loading branch information
rnk committed Apr 6, 2020
1 parent 2c31aa2 commit b36c19b
Show file tree
Hide file tree
Showing 11 changed files with 31 additions and 14 deletions.
4 changes: 4 additions & 0 deletions clang/include/clang/AST/DeclBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,10 @@ class alignas(8) Decl {

ASTContext &getASTContext() const LLVM_READONLY;

/// Helper to get the language options from the ASTContext.
/// Defined out of line to avoid depending on ASTContext.h.
const LangOptions &getLangOpts() const LLVM_READONLY;

void setAccess(AccessSpecifier AS) {
Access = AS;
assert(AccessDeclContextSanity());
Expand Down
16 changes: 9 additions & 7 deletions clang/include/clang/AST/DeclCXX.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#ifndef LLVM_CLANG_AST_DECLCXX_H
#define LLVM_CLANG_AST_DECLCXX_H

#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTUnresolvedSet.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
Expand All @@ -40,6 +39,7 @@
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/PointerUnion.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/TinyPtrVector.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
Expand All @@ -53,6 +53,7 @@

namespace clang {

class ASTContext;
class ClassTemplateDecl;
class ConstructorUsingShadowDecl;
class CXXBasePath;
Expand Down Expand Up @@ -1166,7 +1167,7 @@ class CXXRecordDecl : public RecordDecl {
bool defaultedDefaultConstructorIsConstexpr() const {
return data().DefaultedDefaultConstructorIsConstexpr &&
(!isUnion() || hasInClassInitializer() || !hasVariantMembers() ||
getASTContext().getLangOpts().CPlusPlus2a);
getLangOpts().CPlusPlus2a);
}

/// Determine whether this class has a constexpr default constructor.
Expand Down Expand Up @@ -1258,7 +1259,7 @@ class CXXRecordDecl : public RecordDecl {
/// would be constexpr.
bool defaultedDestructorIsConstexpr() const {
return data().DefaultedDestructorIsConstexpr &&
getASTContext().getLangOpts().CPlusPlus2a;
getLangOpts().CPlusPlus2a;
}

/// Determine whether this class has a constexpr destructor.
Expand Down Expand Up @@ -1355,10 +1356,10 @@ class CXXRecordDecl : public RecordDecl {
///
/// Only in C++17 and beyond, are lambdas literal types.
bool isLiteral() const {
ASTContext &Ctx = getASTContext();
return (Ctx.getLangOpts().CPlusPlus2a ? hasConstexprDestructor()
const LangOptions &LangOpts = getLangOpts();
return (LangOpts.CPlusPlus2a ? hasConstexprDestructor()
: hasTrivialDestructor()) &&
(!isLambda() || Ctx.getLangOpts().CPlusPlus17) &&
(!isLambda() || LangOpts.CPlusPlus17) &&
!hasNonLiteralTypeFieldsOrBases() &&
(isAggregate() || isLambda() ||
hasConstexprNonCopyMoveConstructor() ||
Expand Down Expand Up @@ -2035,7 +2036,8 @@ class CXXMethodDecl : public FunctionDecl {
method_iterator end_overridden_methods() const;
unsigned size_overridden_methods() const;

using overridden_method_range= ASTContext::overridden_method_range;
using overridden_method_range = llvm::iterator_range<
llvm::TinyPtrVector<const CXXMethodDecl *>::const_iterator>;

overridden_method_range overridden_methods() const;

Expand Down
5 changes: 2 additions & 3 deletions clang/include/clang/AST/GlobalDecl.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,8 @@ class GlobalDecl {
}

static KernelReferenceKind getDefaultKernelReference(const FunctionDecl *D) {
return D->getASTContext().getLangOpts().CUDAIsDevice
? KernelReferenceKind::Kernel
: KernelReferenceKind::Stub;
return D->getLangOpts().CUDAIsDevice ? KernelReferenceKind::Kernel
: KernelReferenceKind::Stub;
}

GlobalDecl getWithDecl(const Decl *D) {
Expand Down
1 change: 1 addition & 0 deletions clang/include/clang/Serialization/ASTRecordReader.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#ifndef LLVM_CLANG_SERIALIZATION_ASTRECORDREADER_H
#define LLVM_CLANG_SERIALIZATION_ASTRECORDREADER_H

#include "clang/AST/ASTContext.h"
#include "clang/AST/AbstractBasicReader.h"
#include "clang/Lex/Token.h"
#include "clang/Serialization/ASTReader.h"
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/AST/CommentSema.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -691,7 +691,7 @@ void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {
FD->doesThisDeclarationHaveABody())
return;

const LangOptions &LO = FD->getASTContext().getLangOpts();
const LangOptions &LO = FD->getLangOpts();
const bool DoubleSquareBracket = LO.CPlusPlus14 || LO.C2x;
StringRef AttributeSpelling =
DoubleSquareBracket ? "[[deprecated]]" : "__attribute__((deprecated))";
Expand Down
1 change: 1 addition & 0 deletions clang/lib/AST/ComparisonCategories.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//

#include "clang/AST/ComparisonCategories.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/Type.h"
Expand Down
6 changes: 6 additions & 0 deletions clang/lib/AST/DeclBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,12 @@ ASTContext &Decl::getASTContext() const {
return getTranslationUnitDecl()->getASTContext();
}

/// Helper to get the language options from the ASTContext.
/// Defined out of line to avoid depending on ASTContext.h.
const LangOptions &Decl::getLangOpts() const {
return getASTContext().getLangOpts();
}

ASTMutationListener *Decl::getASTMutationListener() const {
return getASTContext().getASTMutationListener();
}
Expand Down
7 changes: 4 additions & 3 deletions clang/lib/Analysis/PathDiagnostic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "clang/AST/ExprCXX.h"
#include "clang/AST/OperationKinds.h"
#include "clang/AST/ParentMap.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/Type.h"
#include "clang/Analysis/AnalysisDeclContext.h"
Expand Down Expand Up @@ -909,7 +910,7 @@ static void describeClass(raw_ostream &Out, const CXXRecordDecl *D,
Out << Prefix << '\'' << *D;
if (const auto T = dyn_cast<ClassTemplateSpecializationDecl>(D))
describeTemplateParameters(Out, T->getTemplateArgs().asArray(),
D->getASTContext().getLangOpts(), "<", ">");
D->getLangOpts(), "<", ">");

Out << '\'';
}
Expand Down Expand Up @@ -975,8 +976,8 @@ static bool describeCodeDecl(raw_ostream &Out, const Decl *D,
if (const auto FD = dyn_cast<FunctionDecl>(D))
if (const TemplateArgumentList *TAList =
FD->getTemplateSpecializationArgs())
describeTemplateParameters(Out, TAList->asArray(),
FD->getASTContext().getLangOpts(), "<", ">");
describeTemplateParameters(Out, TAList->asArray(), FD->getLangOpts(), "<",
">");

Out << '\'';
return true;
Expand Down
1 change: 1 addition & 0 deletions clang/lib/Analysis/ProgramPoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//

#include "clang/Analysis/ProgramPoint.h"
#include "clang/AST/ASTContext.h"
#include "clang/Basic/JsonSupport.h"

using namespace clang;
Expand Down
1 change: 1 addition & 0 deletions clang/lib/CodeGen/CGDebugInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "clang/AST/DeclCXX.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExternalASTSource.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/Type.h"
#include "clang/AST/TypeOrdering.h"
#include "clang/Basic/CodeGenOptions.h"
Expand Down
1 change: 1 addition & 0 deletions clang/lib/Tooling/Core/Lookup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
//===----------------------------------------------------------------------===//

#include "clang/Tooling/Core/Lookup.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclarationName.h"
Expand Down

0 comments on commit b36c19b

Please sign in to comment.