MitalAshok wrote: You should add a test for mutually recursive functions. I suspect something like this doesn't work:
```c++ int non_trivial(); int f(bool b) { return g(!b) + non_trivial(); } int g(bool b) { return b ? f(b) : 1; } getFieldTrivial().f(true); // expected-warning {{...}} getFieldTrivial().g(true); // expected-warning {{...}} ``` Since when analyzing `f`, `f` enters the cache as trivial, `g` is analyzed and sees `f` in the cache as trivial, so `g` is marked trivial, but then `f` is marked as non-trivial (so `g` should have been marked as non-trivial, but is marked trivial). If that is an issue, one way to do this "properly" would be to create a graph, and a function is non-trivial if it has a path to a non-trivial function (this might be too expensive to implement directly). Or we could special case simple recursion only, by changing `TrivialFunctionAnalysisVisitor` to not call `isTrivialImpl` for the current function only. https://github.com/llvm/llvm-project/pull/91876 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits