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