Author: smanna12 Date: 2024-11-21T19:18:49-06:00 New Revision: 2369a582c260aafd46ce09e75e884fb654fd330d
URL: https://github.com/llvm/llvm-project/commit/2369a582c260aafd46ce09e75e884fb654fd330d DIFF: https://github.com/llvm/llvm-project/commit/2369a582c260aafd46ce09e75e884fb654fd330d.diff LOG: [Clang] Fix handling of non-member functions in isNormalAssignmentOperator() (#115880) This patch correctes the handling of non-member functions in the `isNormalAssignmentOperator` function within `CheckExprLifetime.cpp`. The previous implementation incorrectly assumed that `FunctionDecl` is always a `CXXMethodDecl`, leading to potential null pointer dereferencing. Change: - Correctly handle the case where `FD` is not a `CXXMethodDecl` by using `FD->getParamDecl(0)->getType()`. This fix ensures that the function correctly handles non-member assignment operators, such as: `struct S {}; void operator|=(S, S) {}` This change improves the robustness of the `isNormalAssignmentOperator` function by correctly identifying and handling different types of function declarations. Added: Modified: clang/lib/Sema/CheckExprLifetime.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/CheckExprLifetime.cpp b/clang/lib/Sema/CheckExprLifetime.cpp index 182ac806d3c13e..6cdd4dc629e50a 100644 --- a/clang/lib/Sema/CheckExprLifetime.cpp +++ b/clang/lib/Sema/CheckExprLifetime.cpp @@ -490,7 +490,7 @@ static bool isNormalAssignmentOperator(const FunctionDecl *FD) { if (MD && MD->isCXXInstanceMember()) LHST = Ctx.getLValueReferenceType(MD->getFunctionObjectParameterType()); else - LHST = MD->getParamDecl(0)->getType(); + LHST = FD->getParamDecl(0)->getType(); if (Ctx.hasSameType(RetT, LHST)) return true; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits