Index: lib/Analysis/Consumed.cpp =================================================================== --- lib/Analysis/Consumed.cpp +++ lib/Analysis/Consumed.cpp @@ -328,7 +328,7 @@ } bool TestedVarsVisitor::VisitUnaryOperator(UnaryOperator *UnaryOp) { - if (UnaryOp->getOpcode() == UO_Not) { + if (UnaryOp->getOpcode() == UO_LNot) { Invert = true; TraverseStmt(UnaryOp->getSubExpr()); @@ -417,8 +417,6 @@ Map.insert(PairType(OtherPair.first, Unknown)); } } - - llvm::errs() << "\n"; } void ConsumedStateMap::setState(const VarDecl *Var, ConsumedState State) { Index: test/SemaCXX/warn-consumed-analysis.cpp =================================================================== --- test/SemaCXX/warn-consumed-analysis.cpp +++ test/SemaCXX/warn-consumed-analysis.cpp @@ -20,7 +20,7 @@ bool isValid(void) TESTS_UNCONSUMED; }; -void testInitializationAndIfStmt(void) { +void testInitialization(void) { Bar var0; Bar var1 = Bar(); @@ -39,6 +39,25 @@ } } +void testIfStmt(void) { + Bar var; + + if (var.isValid()) { // \ + \\ expected-warning {{Unnecessary test. Variable 'var' is known to be in the 'consumed' state}} + *var; + + } else { + *var; // expected-warning {{Invocation of method 'operator*' on object 'var' while it is in the 'consumed' state}} + } + + if (!var.isValid()) { + *var; // expected-warning {{Invocation of method 'operator*' on object 'var' while it is in the 'consumed' state}} + + } else { + *var; + } +} + void testSimpleRValueRefs(void) { Bar var0; Bar var1 = Bar(42);