[clang] [clang][AST] Handle implicit first argument in CallExpr::getBeginLoc() (PR #135757)
Nathan Ridge via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 15 00:58:50 PDT 2025
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 <zeratul976 at 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 at -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'}}
+};
+}
More information about the cfe-commits
mailing list