r337857 - Don't lifetime-extend or track lifetime problems through the LHS of '->*'.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 24 14:18:30 PDT 2018


Author: rsmith
Date: Tue Jul 24 14:18:30 2018
New Revision: 337857

URL: http://llvm.org/viewvc/llvm-project?rev=337857&view=rev
Log:
Don't lifetime-extend or track lifetime problems through the LHS of '->*'.

Fixes a false-positive warning found by selfhost.

Modified:
    cfe/trunk/lib/AST/Expr.cpp
    cfe/trunk/test/SemaCXX/return-stack-addr.cpp

Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=337857&r1=337856&r2=337857&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Tue Jul 24 14:18:30 2018
@@ -108,7 +108,7 @@ const Expr *Expr::skipRValueSubobjectAdj
         }
       }
     } else if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
-      if (BO->isPtrMemOp()) {
+      if (BO->getOpcode() == BO_PtrMemD) {
         assert(BO->getRHS()->isRValue());
         E = BO->getLHS();
         const MemberPointerType *MPT =

Modified: cfe/trunk/test/SemaCXX/return-stack-addr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/return-stack-addr.cpp?rev=337857&r1=337856&r2=337857&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/return-stack-addr.cpp (original)
+++ cfe/trunk/test/SemaCXX/return-stack-addr.cpp Tue Jul 24 14:18:30 2018
@@ -157,3 +157,9 @@ void ret_from_lambda() {
   (void) [&]() -> int& { int &a = b; return a; };
   (void) [=]() mutable -> int& { int &a = b; return a; };
 }
+
+namespace mem_ptr {
+  struct X {};
+  int X::*f();
+  int &r(X *p) { return p->*f(); }
+}




More information about the cfe-commits mailing list