[clang] [clang][ThreadSafety] Fix a crash on a capability expression calling a pointer to member (PR #231995)
Marco Elver via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 15 06:46:23 PDT 2026
================
@@ -570,9 +573,10 @@ til::SExpr *SExprBuilder::translateCallExpr(const CallExpr *CE,
til::SExpr *SExprBuilder::translateCXXMemberCallExpr(
const CXXMemberCallExpr *ME, CallingContext *Ctx) {
if (CapabilityExprMode) {
- // Ignore calls to get() on smart pointers.
- if (ME->getMethodDecl()->getNameAsString() == "get" &&
- ME->getNumArgs() == 0) {
+ // Ignore calls to get() on smart pointers. A call through a pointer to
+ // member function has no method declaration.
+ const CXXMethodDecl *MD = ME->getMethodDecl();
+ if (MD && MD->getNameAsString() == "get" && ME->getNumArgs() == 0) {
----------------
melver wrote:
Nit: while touching this condition, checking `ME->getNumArgs() == 0` first and using `MD->getIdentifier() && MD->getIdentifier()->isStr("get")` (matching `VarMapBuilder::VisitCallExpr` in `ThreadSafety.cpp`) avoids heap-allocating a `std::string` via `getNameAsString()` on every member call.
https://github.com/llvm/llvm-project/pull/231995
More information about the cfe-commits
mailing list