Author: cor3ntin Date: 2023-12-20T07:41:24+01:00 New Revision: c8536760612785e8ee97a5261c20d22c6712b4b2
URL: https://github.com/llvm/llvm-project/commit/c8536760612785e8ee97a5261c20d22c6712b4b2 DIFF: https://github.com/llvm/llvm-project/commit/c8536760612785e8ee97a5261c20d22c6712b4b2.diff LOG: [Clang] Fix a crash when incorrectly calling an explicit object member function template (#75913) Fixes #75732 Added: Modified: clang/lib/Sema/SemaExprMember.cpp clang/test/SemaCXX/cxx2b-deducing-this.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaExprMember.cpp b/clang/lib/Sema/SemaExprMember.cpp index 473eea55bb6b19..2abec3d86a27d9 100644 --- a/clang/lib/Sema/SemaExprMember.cpp +++ b/clang/lib/Sema/SemaExprMember.cpp @@ -253,7 +253,9 @@ static void diagnoseInstanceReference(Sema &SemaRef, SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range << /*static*/ 0; else { - const auto *Callee = dyn_cast<CXXMethodDecl>(Rep); + if (const auto *Tpl = dyn_cast<FunctionTemplateDecl>(Rep)) + Rep = Tpl->getTemplatedDecl(); + const auto *Callee = cast<CXXMethodDecl>(Rep); auto Diag = SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range << Callee->isExplicitObjectMemberFunction(); if (!Replacement.empty()) diff --git a/clang/test/SemaCXX/cxx2b-deducing-this.cpp b/clang/test/SemaCXX/cxx2b-deducing-this.cpp index 0033541fa322dc..aab35828096a8e 100644 --- a/clang/test/SemaCXX/cxx2b-deducing-this.cpp +++ b/clang/test/SemaCXX/cxx2b-deducing-this.cpp @@ -626,3 +626,13 @@ void test() { } } + + +namespace GH75732 { +auto serialize(auto&& archive, auto&& c){ } +struct D { + auto serialize(this auto&& self, auto&& archive) { + serialize(archive, self); // expected-error {{call to explicit member function without an object argument}} + } +}; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits