LukasHanel added a comment.

Hi, thanks for discussing my proposal!
Although I think it can stand as is, I was looking for feedback:

- Is the name good?
- Is the `readability` group  good? Or better in `misc`?
- too slow, too fast?
- More precision required?
- Usefulness of the fix-it's
- Should I add options?

Anyhow, last year I was refactoring our companies code base and often manually 
searched for functions that would be identified by such checker. And as you 
say, I did not implement the corner cases yet.
Clang-tidy is a really easy environment to write such checkers, Kudos to all 
the contributors and maintainers.

On your comments:

In D96082#2544836 <https://reviews.llvm.org/D96082#2544836>, @njames93 wrote:

> This check, more specifically the fixes, seem quite dangerous. Changing 
> function signatures is highly likely to cause compilation issues.

This seems to be a general issue with clang-tidy's fixes.
It seems some fixes are more of a gimmick and shouldn't be used without 
supervision.
I did not find any other checker that changed the function signature, is there 
any guidance against this?

> For a starters this check doesn't appear to examine call sites of the 
> function to ensure they don't use the return value.

I have considered this, but it would double the complexity of the checker, so 
did not work on it yet.
Yes, it is a good safety net.
However, it could also hide two issues:

1. Inconsistent use (or not use) of the return value - it is actually a sign of 
the return value being useless (Note: this is a common checker for commercial 
static analyzers).
2. Propagation of the useless return value, let's say `b` checks useless return 
value of `a`, and returns it, but `c` does not check return value of `b`.

  int a() { return 0; } // "useless"
  int b() { return a(); } // "checked"
  int c() {
      b();                      // not checked
     // or even
     int ret = b();        // "checked"
     if (ret) {
         printf("something went wrong"); // or maybe the return value was 
useless in the first place
     }
     //...
  }

Regarding the propagation, anyhow, such refactoring needs to be done in steps: 
you fix one function, then the linter will highlight the next function.

> There's also the case where the function is used as a callback, this can't 
> change the signature as the callback type would then mismatch.

Yes, we had this case as well.
I wonder how I could detect this.
I guess I need the call sites.

1. List Item
2. Or a configuration for this checker of functions to ignore.
3. Or somehow annotate functions to ignore this checker.

> From these 2 issues, this shouldn't trigger on functions with external 
> linkage.

From my experience, this is actually more a problem for external functions.
Static functions tend to less have such issues because the deveoloper can more 
easily verify the callers.

> There's the case where the return value is based on some preprocessor 
> constant. You are showing how it handles NULL and EXIT_SUCCESS, however what 
> if the macro is called BUILT_WITH_FEATURE_X, that's likely a build setting 
> and shouldn't be triggered upon. Obviously there's no hard and fast way to 
> determine what's a dependent macro and what isn't, so either never trigger on 
> returns where the value is a macro, or have a list of allowed macros, 
> defaulted to containing the likes of NULL.

Curious case of the command-line defined return-value macro. :)
When playing with this part, I found that clang-tidy sees the code after 
preprocessing.
So I never saw that I was handling NULL or EXIT_SUCCESS, I only saw `0`.
Clang-tidy must know about build-time macros from the compile_commands.json 
data base, otherwise it would scream.
Hmm, I start to see what you mean.

> With all being said, I feel that while the diagnosing of these functions can 
> have some value, an automated fix probably isn't a good idea.

Thanks.

Will the CI run my checker on the llvm code base?
I found several issues locally, I will figure out how to best share those 
findings.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D96082

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

Reply via email to