sgatev added inline comments.

================
Comment at: 
clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:119
+  auto NonEmptyStringOptional = unaryOperator(
+      hasOperatorName("!"),
+      hasUnaryOperand(cxxMemberCallExpr(
----------------
Why handle negation here? Would it work for `if (opt.value_or("").empty()) { 
... } else { opt.value(); }`?


================
Comment at: 
clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:148
+                            anyOf(ComparesToSame(cxxNullPtrLiteralExpr()),
+                                  
ComparesToSame(integerLiteral(equals(0)))))));
+}
----------------
Why `0`? How about `opt_p->value_or(21) != 21`?


================
Comment at: 
clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:480
 
+      // opt.value_or(X) != X, !opt.value_or("").empty():
+      .CaseOf<Expr>(
----------------
Extreme nit for consistency with all comments above.


================
Comment at: 
clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:482
+      .CaseOf<Expr>(
+          isValueOrCondition("ValueOrCall"),
+          [](const clang::Expr *E, const MatchFinder::MatchResult &Result,
----------------
Why not hard-code this in the `isValueOrCondition` matcher?


================
Comment at: 
clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:483
+          isValueOrCondition("ValueOrCall"),
+          [](const clang::Expr *E, const MatchFinder::MatchResult &Result,
+             LatticeTransferState &State) {
----------------
The `clang` namespace can be removed. Same comment for other instances in the 
patch.


================
Comment at: 
clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp:485
+             LatticeTransferState &State) {
+            transferOptionalValueOrCall(
+                E,
----------------
Why not pass `transferOptionalValueOrCall` as argument instead of wrapping it 
in a lambda? The function can take the "ValueOrCall" node from the 
`MatchResult`.


================
Comment at: 
clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp:1722
+      if (opt.value_or(nullptr) != nullptr) {
+        return *opt;
+        /*[[check-ptrs-1]]*/
----------------
Is the `return` important? I think having `void` return type would be simpler. 
Same comment for the cases below.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D122231

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

Reply via email to