steakhal added a comment.

Some checker should have caught the uninitialized value earlier than the 
`defaultEvalCall()`.
I guess, the `MallocCkecher` could have checked for it in `PreStmt<CXXNewExpr>`.
Or alternatively, the `CallAndMessageChecker::preCall()` already does something 
like this in the `PreVisitProcessArg()`. I know that `CXXNewExpr` is not a 
//call//, but you get the idea.
WDYT, worth catching it?

Other than that, I think it's a good practice to not rely on some checkers to 
catch things to prevent crashes; so this 'fix' seems reasonable to me.



================
Comment at: clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp:768
+      if (Size.isUndef())
+        Size = UnknownVal();
+
----------------
I'm not a fan of mutating values like this.
Alternatively we could have used something like this at the point of use:
`Size.getAs<DefinedOrUnknownSVal>().getValueOr(UnknownVal{})`
I'm not sure if it's more readable :D


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130974/new/

https://reviews.llvm.org/D130974

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to