State = State->BindExpr(CNE, LCtx, symVal);
}
- Bldr.generateNode(CNE, Pred, State);
+ ExplodedNode *NewN = Bldr.generateNode(CNE, Pred, State);
+ if (!NewN)
+ return;
// If the type is not a record, we won't have a CXXConstructExpr as an
// initializer. Copy the value over.
if (const Expr *Init = CNE->getInitializer()) {
if (!isa<CXXConstructExpr>(Init)) {
assert(Bldr.getResults().size() == 1);
- ExplodedNode *TmpN = *Bldr.getResults().begin();
- Bldr.takeNodes(TmpN);
+ Bldr.takeNodes(NewN);
assert(!CNE->getType()->getPointeeCXXRecordDecl());
new (p) (int *)(static_cast<int *>(malloc(4))); // no-warning
}
+void testCacheOut(PtrWrapper w) {
+ extern bool coin();
+ if (coin())
+ w.x = 0;
+ new (&w.x) (int*)(0); // we cache out here; don't crash
+}
+
+
//--------------------------------------------------------------------
// Check for intersection with other checkers from MallocChecker.cpp
// bounded with unix.Malloc