Charusso marked 5 inline comments as done.
Charusso added inline comments.

================
Comment at: clang/include/clang/StaticAnalyzer/Checkers/Checkers.td:98-100
+// The APIModeling package is for checkers that model APIs. These checkers are
+// always turned on; this package is intended for API modeling that is not
+// controlled by the target triple.
----------------
NoQ wrote:
> Charusso wrote:
> > NoQ wrote:
> > > Szelethus wrote:
> > > > Charusso wrote:
> > > > > Szelethus wrote:
> > > > > > This isn't true: the user may decide to only enable 
> > > > > > non-pathsensitive checkers.
> > > > > > 
> > > > > > I think the comment should rather state that these whether these 
> > > > > > checkers are enabled shouldn't be explicitly specified, unless in 
> > > > > > **extreme** circumstances (causes a crash in a release build?).
> > > > > Well, I have removed it instead. Makes no sense, you are right.
> > > > I don't think it's a good idea -- we definitely should eventually be 
> > > > able to list packages with descriptions just like checkers (there 
> > > > actually is a FIXME in CheckerRegistry.cpp for that), but this is the 
> > > > next best thing that we have.
> > > > 
> > > > How about this:
> > > > ```
> > > > // The APIModeling package is for checkers that model APIs and don't 
> > > > perform
> > > > // any diagnostics. Checkers within this package are enabled by the 
> > > > core or
> > > > // through checker dependencies, so one shouldn't enable/disable them by
> > > > // hand (unless they cause a crash, but that will cause dependent 
> > > > checkers to be
> > > > // implicitly disabled).
> > > > ```
> > > I don't think any of these are dependencies. Most of the `apiModeling` 
> > > checkers are there to suppress infeasible paths (exactly like this one).
> > > 
> > > I think i'd prefer to leave the comment as-is. We can always update it 
> > > later.
> > Thanks! Copy-pasted, just that patch produce diagnostics as notes.
> Let's change to `don't emit any warnings` then.
I think an APIModeling could not be too much thing, most of the stuff around it 
is not commented out what they do. But as @Szelethus really wanted to inject 
that, I cannot say no to a copy-paste.


================
Comment at: 
clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h:1119
 
-  const T *lookup(const CallEvent &Call) const {
+  Optional<T> lookup(const CallEvent &Call) const {
     // Slow path: linear lookup.
----------------
NoQ wrote:
> Charusso wrote:
> > Szelethus wrote:
> > > Charusso wrote:
> > > > NoQ wrote:
> > > > > I hope `T` never gets too expensive to copy. The ideal return value 
> > > > > here is `Optional<const T &>` but i suspect that `llvm::Optional`s 
> > > > > don't support this (while C++17 `std::optional`s do). Could you 
> > > > > double-check my vague memories here?
> > > > Optional<const T *> is working and used widely, I like that.
> > > Why do we need the optional AND the pointer? How about we just return 
> > > with a nullptr if we fail to find the call?
> > `Optional<>` stands for optional values, that is why it is made. @NoQ tried 
> > to avoid it, but I believe if someone does not use it for an optional 
> > value, that break some kind of unspoken standard.
> Well, that'd be the original code.
> 
> > I do not like `Optional<const T *>` anymore.
> 
> @Charusso, do you still plan to undo this change?
Well, I am here at 2:1 against `Optional<>`, so I think it is your decision.


================
Comment at: clang/lib/StaticAnalyzer/Checkers/ReturnValueChecker.cpp:95-96
+  Optional<bool> IsInvariantBreak = isInvariantBreak(ExpectedValue, ReturnV, 
C);
+  if (!IsInvariantBreak)
+    return;
+
----------------
NoQ wrote:
> This looks flipped to me, should probably say `if (IsInvariantBreak) return;`.
It is the `Optional<>` checking, whether we could obtain the value. I really 
wanted to write `!hasValue()`, but no one use that, so it is some kind of 
unspoken standard to just `!` it.


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

https://reviews.llvm.org/D63915



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

Reply via email to