================
@@ -1224,16 +1224,33 @@ void ExprEngine::VisitLambdaExpr(const LambdaExpr *LE, 
ExplodedNode *Pred,
 
 void ExprEngine::VisitAttributedStmt(const AttributedStmt *A,
                                      ExplodedNode *Pred, ExplodedNodeSet &Dst) 
{
+  const LocationContext *LCtx = Pred->getLocationContext();
   ExplodedNodeSet CheckerPreStmt;
   getCheckerManager().runCheckersForPreStmt(CheckerPreStmt, Pred, A, *this);
 
   ExplodedNodeSet EvalSet;
-  NodeBuilder Bldr(CheckerPreStmt, EvalSet, *currBldrCtx);
 
-  for (const auto *Attr : getSpecificAttrs<CXXAssumeAttr>(A->getAttrs())) {
-    for (ExplodedNode *N : CheckerPreStmt) {
-      Visit(Attr->getAssumption()->IgnoreParens(), N, EvalSet);
+  for (ExplodedNode *N : CheckerPreStmt) {
+    ProgramStateRef State = N->getState();
+    for (const auto *Attr : getSpecificAttrs<CXXAssumeAttr>(A->getAttrs())) {
+      SVal AssumedVal = State->getSVal(Attr->getAssumption(), LCtx);
+      if (auto ValidAssumedVal = AssumedVal.getAs<DefinedOrUnknownSVal>()) {
+        State = State->assume(*ValidAssumedVal, true);
+      } else {
+        // The assumption expression has evaluated to UndefinedVal.
----------------
steakhal wrote:

If I understand this correctly, in the past if the assume-expr was Undef, we 
just continued.
(This is proven by the fact that we report 
[here](https://godbolt.org/z/WYrx5fd3r).)
After this patch, we would no longer get this actually TP report, right?

We could have 2 options here:
 - Have a checker that would report that the assume expr is Undef in a 
`runCheckersForPreStmt` handler, or
 - Skip adding the `assume true` constraint to the apparently `undef` assume 
expr.
 
The latter would make sure that it behaves as if we didn't take the assumption 
into account - as if it was completely ignored. Implementations are allowed to 
ignore them.

IMO approach (1) is better, and isn't that when iterating the `CheckerPreStmt` 
it would skip sink nodes? Thus would naturally imply that the assumption expr 
can't be Undef here? (assuming that the imaginary core checker reporting undef 
assumptions is enabled)?

https://github.com/llvm/llvm-project/pull/198618
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to