diff options
Diffstat (limited to 'clang/lib/Sema/Sema.cpp')
| -rw-r--r-- | clang/lib/Sema/Sema.cpp | 34 | 
1 files changed, 29 insertions, 5 deletions
| diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 2cd158a8b43c1..9cfce5a63b1df 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -52,6 +52,21 @@ SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) {  ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); } +IdentifierInfo * +Sema::InventAbbreviatedTemplateParameterTypeName(IdentifierInfo *ParamName, +                                                 unsigned int Index) { +  std::string InventedName; +  llvm::raw_string_ostream OS(InventedName); + +  if (!ParamName) +    OS << "auto:" << Index + 1; +  else +    OS << ParamName->getName() << ":auto"; + +  OS.flush(); +  return &Context.Idents.get(OS.str()); +} +  PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context,                                         const Preprocessor &PP) {    PrintingPolicy Policy = Context.getPrintingPolicy(); @@ -153,10 +168,10 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,        TUKind(TUKind), NumSFINAEErrors(0),        FullyCheckedComparisonCategories(            static_cast<unsigned>(ComparisonCategoryType::Last) + 1), -      AccessCheckingSFINAE(false), InNonInstantiationSFINAEContext(false), -      NonInstantiationEntries(0), ArgumentPackSubstitutionIndex(-1), -      CurrentInstantiationScope(nullptr), DisableTypoCorrection(false), -      TyposCorrected(0), AnalysisWarnings(*this), +      SatisfactionCache(Context), AccessCheckingSFINAE(false), +      InNonInstantiationSFINAEContext(false), NonInstantiationEntries(0), +      ArgumentPackSubstitutionIndex(-1), CurrentInstantiationScope(nullptr), +      DisableTypoCorrection(false), TyposCorrected(0), AnalysisWarnings(*this),        ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr),        CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) {    TUScope = nullptr; @@ -379,6 +394,14 @@ Sema::~Sema() {    if (isMultiplexExternalSource)      delete ExternalSource; +  // Delete cached satisfactions. +  std::vector<ConstraintSatisfaction *> Satisfactions; +  Satisfactions.reserve(Satisfactions.size()); +  for (auto &Node : SatisfactionCache) +    Satisfactions.push_back(&Node); +  for (auto *Node : Satisfactions) +    delete Node; +    threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache);    // Destroys data sharing attributes stack for OpenMP @@ -1261,7 +1284,8 @@ DeclContext *Sema::getFunctionLevelDeclContext() {    DeclContext *DC = CurContext;    while (true) { -    if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) { +    if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC) || +        isa<RequiresExprBodyDecl>(DC)) {        DC = DC->getParent();      } else if (isa<CXXMethodDecl>(DC) &&                 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call && | 
