shuaiwang added inline comments.
================ Comment at: unittests/clang-tidy/ExprMutationAnalyzerTest.cpp:309 +TEST(ExprMutationAnalyzerTest, CallUnresolved) { + auto AST = ---------------- JonasToth wrote: > I think we are missing tests for non-type template paramters (`template > <size_t N>`). They should behave the same. But the following case would not > be a mutation: > > ``` > void non_mutating(const char* Array, int size) { /* Foo */ } > template <int N> > struct ArrayLike { > char* data[N]; // Initialized to something > void SomeFunction() { > non_mutating(data, N); > } > }; > ``` > > The difference between the 'normal' and non-type templates would be, that `N` > is not mutatable at all and the semantics is clear (builtin integer-like > type). > > If the current implementation would not figure that out, you can just add a > test for it and assume a mutation. Handling non-type templates later is > absolutly ok. We have to assume `data` is mutated here as well. I'll add a test case for this. ``` void g(const char*, int); // <-- doesn't mutate void g(char(&)[8], int); // <-- do mutate template <int N> void f() { char data[N]; g(data, N); // <-- we don't know which `g` will be called yet } void h() { f<8>(); // <-- f calls g(char(&)[8], int) internally f<9>(); // <-- f calls g(const char*, int) internally } ``` Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D50619 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits