diff options
author | Richard Smith <richard@metafoo.co.uk> | 2019-12-04 15:25:27 -0800 |
---|---|---|
committer | Richard Smith <richard@metafoo.co.uk> | 2019-12-08 23:21:52 -0800 |
commit | cafc7416baf7eecef8ecaf05802f2f7c0da725c0 (patch) | |
tree | 3ba432597b80af750b0263767ed58d5df9f46865 /clang/lib/Sema/SemaExpr.cpp | |
parent | 27f5d35137cb45e60d9988a9b55875883c55023c (diff) | |
download | bcm5719-llvm-cafc7416baf7eecef8ecaf05802f2f7c0da725c0.tar.gz bcm5719-llvm-cafc7416baf7eecef8ecaf05802f2f7c0da725c0.zip |
[c++20] Synthesis of defaulted comparison functions.
Array members are not yet handled. In addition, defaulted comparisons
can't yet find comparison operators by unqualified lookup (only by
member lookup and ADL). These issues will be fixed in follow-on changes.
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 5eeeba3c2d1..b97352e27e1 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -15416,9 +15416,8 @@ static OdrUseContext isOdrUseContext(Sema &SemaRef) { } static bool isImplicitlyDefinableConstexprFunction(FunctionDecl *Func) { - CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Func); return Func->isConstexpr() && - (Func->isImplicitlyInstantiable() || (MD && !MD->isUserProvided())); + (Func->isImplicitlyInstantiable() || !Func->isUserProvided()); } /// Mark a function referenced, and check whether it is odr-used @@ -15566,6 +15565,12 @@ void Sema::MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func, MarkVTableUsed(Loc, MethodDecl->getParent()); } + if (Func->isDefaulted() && !Func->isDeleted()) { + DefaultedComparisonKind DCK = getDefaultedComparisonKind(Func); + if (DCK != DefaultedComparisonKind::None) + DefineDefaultedComparison(Loc, Func, DCK); + } + // Implicit instantiation of function templates and member functions of // class templates. if (Func->isImplicitlyInstantiable()) { |