From 38839d08b8e165dfaab0fa6acc77e620d6df294c Mon Sep 17 00:00:00 2001 From: Vlad Tsyrklevich Date: Mon, 28 Oct 2019 14:36:31 -0700 Subject: Revert "[Concepts] Constraint Enforcement & Diagnostics" This reverts commit ffa214ef22892d75340dc6720271863901dc2c90, it was causing ASAN test failures on sanitizer-x86_64-linux-bootstrap. --- clang/lib/Sema/SemaTemplate.cpp | 60 +++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 36 deletions(-) (limited to 'clang/lib/Sema/SemaTemplate.cpp') diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 3003a9a889d..3f2d38630c3 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -3210,7 +3210,8 @@ QualType Sema::CheckTemplateIdType(TemplateName Name, TemplateDecl *Template = Name.getAsTemplateDecl(); if (!Template || isa(Template) || - isa(Template) || isa(Template)) { + isa(Template) || + isa(Template)) { // We might have a substituted template template parameter pack. If so, // build a template specialization type for it. if (Name.getAsSubstTemplateTemplateParmPack()) @@ -3226,8 +3227,7 @@ QualType Sema::CheckTemplateIdType(TemplateName Name, // template. SmallVector Converted; if (CheckTemplateArgumentList(Template, TemplateLoc, TemplateArgs, - false, Converted, - /*UpdateArgsWithConversion=*/true)) + false, Converted)) return QualType(); QualType CanonType; @@ -3235,7 +3235,6 @@ QualType Sema::CheckTemplateIdType(TemplateName Name, bool InstantiationDependent = false; if (TypeAliasTemplateDecl *AliasTemplate = dyn_cast(Template)) { - // Find the canonical type for this type alias template specialization. TypeAliasDecl *Pattern = AliasTemplate->getTemplatedDecl(); if (Pattern->isInvalidDecl()) @@ -3873,8 +3872,7 @@ DeclResult Sema::ActOnVarTemplateSpecialization( // template. SmallVector Converted; if (CheckTemplateArgumentList(VarTemplate, TemplateNameLoc, TemplateArgs, - false, Converted, - /*UpdateArgsWithConversion=*/true)) + false, Converted)) return true; // Find the variable template (partial) specialization declaration that @@ -4045,7 +4043,7 @@ Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, if (CheckTemplateArgumentList( Template, TemplateNameLoc, const_cast(TemplateArgs), false, - Converted, /*UpdateArgsWithConversion=*/true)) + Converted)) return true; // Find the variable template specialization declaration that @@ -4236,7 +4234,7 @@ Sema::CheckConceptTemplateId(const CXXScopeSpec &SS, /*UpdateArgsWithConversion=*/false)) return ExprError(); - ConstraintSatisfaction Satisfaction; + Optional IsSatisfied; bool AreArgsDependent = false; for (TemplateArgument &Arg : Converted) { if (Arg.isDependent()) { @@ -4244,21 +4242,25 @@ Sema::CheckConceptTemplateId(const CXXScopeSpec &SS, break; } } - if (!AreArgsDependent && - CheckConstraintSatisfaction(NamedConcept, - {NamedConcept->getConstraintExpr()}, - Converted, - SourceRange(SS.isSet() ? SS.getBeginLoc() : - ConceptNameLoc, - TemplateArgs->getRAngleLoc()), - Satisfaction)) + if (!AreArgsDependent) { + InstantiatingTemplate Inst(*this, ConceptNameLoc, + InstantiatingTemplate::ConstraintsCheck{}, NamedConcept, Converted, + SourceRange(SS.isSet() ? SS.getBeginLoc() : ConceptNameLoc, + TemplateArgs->getRAngleLoc())); + MultiLevelTemplateArgumentList MLTAL; + MLTAL.addOuterTemplateArguments(Converted); + bool Satisfied; + if (CalculateConstraintSatisfaction(NamedConcept, MLTAL, + NamedConcept->getConstraintExpr(), + Satisfied)) return ExprError(); - + IsSatisfied = Satisfied; + } return ConceptSpecializationExpr::Create(Context, SS.isSet() ? SS.getWithLocInContext(Context) : NestedNameSpecifierLoc{}, TemplateKWLoc, ConceptNameLoc, FoundDecl, NamedConcept, ASTTemplateArgumentListInfo::Create(Context, *TemplateArgs), Converted, - AreArgsDependent ? nullptr : &Satisfaction); + IsSatisfied); } ExprResult Sema::BuildTemplateIdExpr(const CXXScopeSpec &SS, @@ -5204,11 +5206,7 @@ bool Sema::CheckTemplateArgumentList( TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl &Converted, - bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) { - - if (ConstraintsNotSatisfied) - *ConstraintsNotSatisfied = false; - + bool UpdateArgsWithConversions) { // Make a copy of the template arguments for processing. Only make the // changes at the end when successful in matching the arguments to the // template. @@ -5323,6 +5321,7 @@ bool Sema::CheckTemplateArgumentList( if ((*Param)->isTemplateParameterPack() && !ArgumentPack.empty()) Converted.push_back( TemplateArgument::CreatePackCopy(Context, ArgumentPack)); + return false; } @@ -5461,15 +5460,6 @@ bool Sema::CheckTemplateArgumentList( if (UpdateArgsWithConversions) TemplateArgs = std::move(NewArgs); - if (!PartialTemplateArgs && - EnsureTemplateArgumentListConstraints( - Template, Converted, SourceRange(TemplateLoc, - TemplateArgs.getRAngleLoc()))) { - if (ConstraintsNotSatisfied) - *ConstraintsNotSatisfied = true; - return true; - } - return false; } @@ -7804,8 +7794,7 @@ DeclResult Sema::ActOnClassTemplateSpecialization( // template. SmallVector Converted; if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, - TemplateArgs, false, Converted, - /*UpdateArgsWithConversion=*/true)) + TemplateArgs, false, Converted)) return true; // Find the class template (partial) specialization declaration that @@ -9051,8 +9040,7 @@ DeclResult Sema::ActOnExplicitInstantiation( // template. SmallVector Converted; if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, - TemplateArgs, false, Converted, - /*UpdateArgsWithConversion=*/true)) + TemplateArgs, false, Converted)) return true; // Find the class template specialization declaration that -- cgit v1.2.3