https://github.com/HighCommander4 updated https://github.com/llvm/llvm-project/pull/135757
>From a1569727c432ba67a96de07c899b562fcf349d1e Mon Sep 17 00:00:00 2001 From: Nathan Ridge <zeratul...@hotmail.com> Date: Tue, 15 Apr 2025 03:40:37 -0400 Subject: [PATCH] [clang][AST] Handle implicit first argument in CallExpr::getBeginLoc() --- clang/docs/ReleaseNotes.rst | 2 ++ clang/lib/AST/Expr.cpp | 7 +++++-- clang/test/SemaCXX/cxx2b-deducing-this.cpp | 7 +++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 97de736c4bad3..060a99cfdcc7c 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -398,6 +398,8 @@ Bug Fixes in This Version #if 1 ? 1 : 999999999999999999999 #endif +- Fixed a clang 20 regression where diagnostics attached to some calls to member functions + using C++23 "deducing this" did not have a diagnostic location (#GH135522) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 5fab2c73f214b..59c0e47c7c195 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1652,8 +1652,11 @@ SourceLocation CallExpr::getBeginLoc() const { if (!isTypeDependent()) { if (const auto *Method = dyn_cast_if_present<const CXXMethodDecl>(getCalleeDecl()); - Method && Method->isExplicitObjectMemberFunction()) - return getArg(0)->getBeginLoc(); + Method && Method->isExplicitObjectMemberFunction()) { + if (auto FirstArgLoc = getArg(0)->getBeginLoc(); FirstArgLoc.isValid()) { + return FirstArgLoc; + } + } } SourceLocation begin = getCallee()->getBeginLoc(); diff --git a/clang/test/SemaCXX/cxx2b-deducing-this.cpp b/clang/test/SemaCXX/cxx2b-deducing-this.cpp index 6f17ce7275456..7e392213710a4 100644 --- a/clang/test/SemaCXX/cxx2b-deducing-this.cpp +++ b/clang/test/SemaCXX/cxx2b-deducing-this.cpp @@ -1134,3 +1134,10 @@ struct S { static_assert((S{} << 11) == a); // expected-error@-1 {{use of undeclared identifier 'a'}} } + +namespace GH135522 { +struct S { + auto f(this auto) -> S; + bool g() { return f(); } // expected-error {{no viable conversion from returned value of type 'S' to function return type 'bool'}} +}; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits