================ @@ -0,0 +1,93 @@ +// RUN: %check_clang_tidy -std=c++14-or-later %s performance-unnecessary-value-param %t + +struct ExpensiveToCopyType { + virtual ~ExpensiveToCopyType(); +}; + +template <typename T> void templateWithNonTemplatizedParameter(const ExpensiveToCopyType S, T V) { + // CHECK-MESSAGES: [[@LINE-1]]:90: warning: the const qualified parameter 'S' + // CHECK-MESSAGES: [[@LINE-2]]:95: warning: the parameter 'V' + // CHECK-FIXES: template <typename T> void templateWithNonTemplatizedParameter(const ExpensiveToCopyType& S, const T& V) { +} + +void instantiatedWithExpensiveValue() { + templateWithNonTemplatizedParameter( + ExpensiveToCopyType(), ExpensiveToCopyType()); + templateWithNonTemplatizedParameter(ExpensiveToCopyType(), 5); +} + +template <typename T> void templateWithNonTemplatizedParameterCheapTemplate(const ExpensiveToCopyType S, T V) { + // CHECK-MESSAGES: [[@LINE-1]]:103: warning: the const qualified parameter 'S' + // CHECK-FIXES: template <typename T> void templateWithNonTemplatizedParameterCheapTemplate(const ExpensiveToCopyType& S, T V) { +} + +void instantiatedWithCheapValue() { + templateWithNonTemplatizedParameterCheapTemplate(ExpensiveToCopyType(), 5); +} + +template <typename T> void nonInstantiatedTemplateWithConstValue(const T S) {} +template <typename T> void nonInstantiatedTemplateWithNonConstValue(T S) {} + +template <typename T> void instantiatedTemplateSpecialization(T NoSpecS) {} +template <> +void instantiatedTemplateSpecialization<ExpensiveToCopyType>( + ExpensiveToCopyType SpecS) { + // CHECK-MESSAGES: [[@LINE-1]]:25: warning: the parameter 'SpecS' + // When updating a template specialization, we also update the main template. ---------------- goldvitaly wrote:
Note that it is template specialization and not an overload. Template specialization must have exactly the same signature. See an example https://gcc.godbolt.org/z/cqTzG5Wsn Note that nothing special is done to update both versions. When template specialization is updated, the main template and all other template specializations are updated automatically. I personally prefer to use overloads, but this test is necessary to be sure that we are not proposing non compiling changes. https://github.com/llvm/llvm-project/pull/97767 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits