clang 22.0.0git
SemaConcept.cpp File Reference
#include "clang/Sema/SemaConcept.h"
#include "TreeTransform.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/ExprConcepts.h"
#include "clang/Basic/OperatorPrecedence.h"
#include "clang/Sema/EnterExpressionEvaluationContext.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Overload.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/Sema.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/Template.h"
#include "clang/Sema/TemplateDeduction.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/PointerUnion.h"
#include "llvm/ADT/StringExtras.h"
#include <optional>

Go to the source code of this file.

Classes

struct  llvm::DenseMapInfo< llvm::FoldingSetNodeID >

Functions

static bool DiagRecursiveConstraintEval (Sema &S, llvm::FoldingSetNodeID &ID, const NamedDecl *Templ, const Expr *E, const MultiLevelTemplateArgumentList &MLTAL)
static ExprResult EvaluateAtomicConstraint (Sema &S, const Expr *AtomicExpr, const NamedDecl *Template, SourceLocation TemplateNameLoc, const MultiLevelTemplateArgumentList &MLTAL, ConstraintSatisfaction &Satisfaction)
static UnsignedOrNone EvaluateFoldExpandedConstraintSize (Sema &S, const CXXFoldExpr *FE, const NamedDecl *Template, SourceLocation TemplateNameLoc, const MultiLevelTemplateArgumentList &MLTAL, ConstraintSatisfaction &Satisfaction)
static ExprResult calculateConstraintSatisfaction (Sema &S, const Expr *ConstraintExpr, const NamedDecl *Template, SourceLocation TemplateNameLoc, const MultiLevelTemplateArgumentList &MLTAL, ConstraintSatisfaction &Satisfaction)
static ExprResult calculateConstraintSatisfaction (Sema &S, const Expr *LHS, OverloadedOperatorKind Op, const Expr *RHS, const NamedDecl *Template, SourceLocation TemplateNameLoc, const MultiLevelTemplateArgumentList &MLTAL, ConstraintSatisfaction &Satisfaction)
static ExprResult calculateConstraintSatisfaction (Sema &S, const CXXFoldExpr *FE, const NamedDecl *Template, SourceLocation TemplateNameLoc, const MultiLevelTemplateArgumentList &MLTAL, ConstraintSatisfaction &Satisfaction)
static ExprResult calculateConstraintSatisfaction (Sema &S, const NamedDecl *Template, SourceLocation TemplateNameLoc, const MultiLevelTemplateArgumentList &MLTAL, const Expr *ConstraintExpr, ConstraintSatisfaction &Satisfaction)
static bool CheckConstraintSatisfaction (Sema &S, const NamedDecl *Template, ArrayRef< AssociatedConstraint > AssociatedConstraints, llvm::SmallVectorImpl< Expr * > &Converted, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction)
static unsigned CalculateTemplateDepthForConstraints (Sema &S, const NamedDecl *ND, bool SkipForSpecialization=false)
static const ExprSubstituteConstraintExpressionWithoutSatisfaction (Sema &S, const Sema::TemplateCompareNewDeclInfo &DeclInfo, const Expr *ConstrExpr)
static bool CheckFunctionConstraintsWithoutInstantiation (Sema &SemaRef, SourceLocation PointOfInstantiation, FunctionTemplateDecl *Template, ArrayRef< TemplateArgument > TemplateArgs, ConstraintSatisfaction &Satisfaction)
static void diagnoseUnsatisfiedRequirement (Sema &S, concepts::ExprRequirement *Req, bool First)
static void diagnoseUnsatisfiedRequirement (Sema &S, concepts::TypeRequirement *Req, bool First)
static void diagnoseWellFormedUnsatisfiedConstraintExpr (Sema &S, Expr *SubstExpr, bool First=true)
static void diagnoseUnsatisfiedRequirement (Sema &S, concepts::NestedRequirement *Req, bool First)
template<typename SubstitutionDiagnostic>
static void diagnoseUnsatisfiedConstraintExpr (Sema &S, const llvm::PointerUnion< Expr *, SubstitutionDiagnostic * > &Record, bool First=true)
static bool substituteParameterMappings (Sema &S, NormalizedConstraint &N, ConceptDecl *Concept, const MultiLevelTemplateArgumentList &MLTAL, const ASTTemplateArgumentListInfo *ArgsAsWritten)
static bool substituteParameterMappings (Sema &S, NormalizedConstraint &N, const ConceptSpecializationExpr *CSE)

Function Documentation

◆ calculateConstraintSatisfaction() [1/4]

◆ calculateConstraintSatisfaction() [2/4]

◆ calculateConstraintSatisfaction() [3/4]

◆ calculateConstraintSatisfaction() [4/4]

ExprResult calculateConstraintSatisfaction ( Sema & S,
const NamedDecl * Template,
SourceLocation TemplateNameLoc,
const MultiLevelTemplateArgumentList & MLTAL,
const Expr * ConstraintExpr,
ConstraintSatisfaction & Satisfaction )
static

Definition at line 555 of file SemaConcept.cpp.

References calculateConstraintSatisfaction(), and clang::Template.

◆ CalculateTemplateDepthForConstraints()

◆ CheckConstraintSatisfaction()

◆ CheckFunctionConstraintsWithoutInstantiation()

bool CheckFunctionConstraintsWithoutInstantiation ( Sema & SemaRef,
SourceLocation PointOfInstantiation,
FunctionTemplateDecl * Template,
ArrayRef< TemplateArgument > TemplateArgs,
ConstraintSatisfaction & Satisfaction )
static

◆ diagnoseUnsatisfiedConstraintExpr()

template<typename SubstitutionDiagnostic>
void diagnoseUnsatisfiedConstraintExpr ( Sema & S,
const llvm::PointerUnion< Expr *, SubstitutionDiagnostic * > & Record,
bool First = true )
static

◆ diagnoseUnsatisfiedRequirement() [1/3]

void diagnoseUnsatisfiedRequirement ( Sema & S,
concepts::ExprRequirement * Req,
bool First )
static

◆ diagnoseUnsatisfiedRequirement() [2/3]

◆ diagnoseUnsatisfiedRequirement() [3/3]

◆ diagnoseWellFormedUnsatisfiedConstraintExpr()

◆ DiagRecursiveConstraintEval()

bool DiagRecursiveConstraintEval ( Sema & S,
llvm::FoldingSetNodeID & ID,
const NamedDecl * Templ,
const Expr * E,
const MultiLevelTemplateArgumentList & MLTAL )
static

◆ EvaluateAtomicConstraint()

◆ EvaluateFoldExpandedConstraintSize()

◆ SubstituteConstraintExpressionWithoutSatisfaction()

◆ substituteParameterMappings() [1/2]

◆ substituteParameterMappings() [2/2]