llvm-project/clang-tools-extra/test
Matthias Gehre eaa5559094 [clang-tidy] misc-unused-parameters: Don't remove parameter from lambda
Summary:
Previously, the check would fix
```
using fn = void(int);
void f(fn *);
void test() {
  // CHECK-MESSAGES: :[[@LINE+2]]:12: warning: parameter 'I' is unused
  // CHECK-FIXES: {{^}}  f([](int  /*I*/) {
  f([](int I) { return; });
}
```
into
`f([]() { return; });` which breaks compilation. Now the check is disabled from Lambdas.

The AST is not so easy to use. For
```
    auto l = [](int) {  return;  };
    f(l);
```
one gets
```
 `-CallExpr <line:7:5, col:8> 'void'
      |-ImplicitCastExpr <col:5> 'void (*)(fn *)' <FunctionToPointerDecay>
      | `-DeclRefExpr <col:5> 'void (fn *)' lvalue Function 0x55a91a545e28 'f' 'void (fn *)'
      `-ImplicitCastExpr <col:7> 'void (*)(int)' <UserDefinedConversion>
        `-CXXMemberCallExpr <col:7> 'void (*)(int)'
          `-MemberExpr <col:7> '<bound member function type>' .operator void (*)(int) 0x55a91a546850
            `-ImplicitCastExpr <col:7> 'const (lambda at line:6:14)' lvalue <NoOp>
              `-DeclRefExpr <col:7> '(lambda at line:6:14)':'(lambda at line:6:14)' lvalue Var 0x55a91a5461c0 'l' '(lambda at line:6:14)':'(lambda at line:6:14)'
```
There is no direct use of the `operator()(int I)` of the lambda, so the `!Indexer->getOtherRefs(Function).empty()`
does not fire. In the future, we might be able to use the conversion operator `operator void (*)(int)` to mark
the call operator as having an "other ref".

Reviewers: aaron.ballman, alexfh, hokein, njames93

Subscribers: xazax.hun, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D77680
2020-04-09 19:26:41 +02:00
..
Unit Add .py extension to clang-tools-extra lit cfg files 2019-03-29 02:46:31 +00:00
clang-apply-replacements [clang-apply-replacements] No longer deduplucates replacements from the same TU 2020-03-25 09:36:36 +00:00
clang-change-namespace [clang-change-namespace] Change file pattern to be an anchored regex 2019-12-04 15:48:44 +01:00
clang-doc [clang-doc] Improving Markdown Output 2020-03-06 17:37:08 -08:00
clang-include-fixer [lit] Fix another test case that r374652 missed 2019-10-16 23:58:58 +00:00
clang-move [clang-tools-extra] NFC: Fix trivial typo in documents and comments 2020-04-05 15:28:40 +09:00
clang-query
clang-reorder-fields [clang-reorder-fields] Emit warning when reordering breaks member init list dependencies 2017-07-30 06:43:03 +00:00
clang-tidy [clang-tidy] misc-unused-parameters: Don't remove parameter from lambda 2020-04-09 19:26:41 +02:00
modularize Revert r351208 (which was a revert of r350892). 2019-01-17 20:21:44 +00:00
pp-trace [pp-trace] Modernize the code 2019-03-24 06:55:08 +00:00
.clang-format
CMakeLists.txt [clangd] Move clangd tests to clangd directory. check-clangd is no longer part of check-clang-tools. 2019-04-29 08:44:01 +00:00
lit.cfg.py Quote path to Python executable in case it has spaces 2019-06-21 18:17:04 +00:00
lit.site.cfg.py.in [clangd] Delete config.clangd_xpc_support from test/ to unbreak check-llvm-tools 2019-04-29 09:36:54 +00:00