https://github.com/katzdm updated https://github.com/llvm/llvm-project/pull/98671
>From 47db72077258ebe086059f116bbf7fb32c184c8d Mon Sep 17 00:00:00 2001 From: Dan Katz <kat...@gmail.com> Date: Fri, 12 Jul 2024 13:57:33 -0400 Subject: [PATCH] Fix assertion failure during operator overload resolution. --- clang/lib/Sema/SemaConcept.cpp | 3 ++- clang/test/SemaCXX/PR98671.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 clang/test/SemaCXX/PR98671.cpp diff --git a/clang/lib/Sema/SemaConcept.cpp b/clang/lib/Sema/SemaConcept.cpp index 202dd86c67f62..f94fb8be20e07 100644 --- a/clang/lib/Sema/SemaConcept.cpp +++ b/clang/lib/Sema/SemaConcept.cpp @@ -1519,7 +1519,8 @@ bool Sema::IsAtLeastAsConstrained(NamedDecl *D1, auto IsExpectedEntity = [](const FunctionDecl *FD) { FunctionDecl::TemplatedKind Kind = FD->getTemplatedKind(); return Kind == FunctionDecl::TK_NonTemplate || - Kind == FunctionDecl::TK_FunctionTemplate; + Kind == FunctionDecl::TK_FunctionTemplate || + Kind == FunctionDecl::TK_FunctionTemplateSpecialization; }; const auto *FD2 = dyn_cast<FunctionDecl>(D2); (void)IsExpectedEntity; diff --git a/clang/test/SemaCXX/PR98671.cpp b/clang/test/SemaCXX/PR98671.cpp new file mode 100644 index 0000000000000..696b750759854 --- /dev/null +++ b/clang/test/SemaCXX/PR98671.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -std=c++20 -fsyntax-only %s -verify + +struct S { + operator int(); + + template <typename T> + operator T(); +}; + + +// Ensure that no assertion is raised when overload resolution fails while +// choosing between an operator function template and an operator function. +constexpr auto r = &S::operator int; +// expected-error@-1 {{initializer of type '<overloaded function type>'}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits