diff options
author | Richard Trieu <rtrieu@google.com> | 2014-08-27 22:15:10 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2014-08-27 22:15:10 +0000 |
commit | abf6ec45cd6454c1c3c9e29aa3367c219ddc3b7d (patch) | |
tree | 7a0fa6e4cc158db19cc2991415c3c3bc4fd6454f /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | dc498e516fb2a32df1c3b7a1dc1c8f773d73f52d (diff) | |
download | bcm5719-llvm-abf6ec45cd6454c1c3c9e29aa3367c219ddc3b7d.tar.gz bcm5719-llvm-abf6ec45cd6454c1c3c9e29aa3367c219ddc3b7d.zip |
More -Wuninitialized updates
Fix r216438 to catch more complicated self-initialized in std::move. For
instance, "Foo f = std::move(cond ? OtherFoo : (UNUSED_VALUE, f));"
Make sure that BinaryConditionalOperator, ConditionalOperator, BinaryOperator
with comma operator, and OpaqueValueExpr perform the correct usage forwarding
across the three uninitialized value checkers.
llvm-svn: 216627
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 1332eac840b..081d91e0506 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2279,11 +2279,15 @@ namespace { if (BinaryConditionalOperator *BCO = dyn_cast<BinaryConditionalOperator>(E)) { - HandleValue(BCO->getCommon()); HandleValue(BCO->getFalseExpr()); return; } + if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) { + HandleValue(OVE->getSourceExpr()); + return; + } + if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { switch (BO->getOpcode()) { default: @@ -2342,9 +2346,7 @@ namespace { if (E->getNumArgs() == 1) { if (FunctionDecl *FD = E->getDirectCallee()) { if (FD->getIdentifier() && FD->getIdentifier()->isStr("move")) { - if (MemberExpr *ME = dyn_cast<MemberExpr>(E->getArg(0))) { - HandleMemberExpr(ME, false /*CheckReferenceOnly*/); - } + HandleValue(E->getArg(0)); } } } |