595 lines · cpp
1// RUN: %check_clang_tidy %s modernize-redundant-void-arg %t2 3#define NULL 04 5int foo();6 7void bar();8 9void bar2();10 11extern "C" void ecfoo(void);12 13extern "C" void ecfoo(void) {14}15 16extern int i;17 18int j = 1;19 20int foo(void) {21// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: redundant void argument list in function definition [modernize-redundant-void-arg]22// CHECK-FIXES: int foo() {23 return 0;24}25 26typedef unsigned int my_uint;27 28typedef void my_void;29 30// A function taking void and returning a pointer to function taking void31// and returning int.32int (*returns_fn_void_int(void))(void);33// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: {{.*}} in function declaration34// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: {{.*}} in function declaration35// CHECK-FIXES: int (*returns_fn_void_int())();36 37typedef int (*returns_fn_void_int_t(void))(void);38// CHECK-MESSAGES: :[[@LINE-1]]:37: warning: {{.*}} in typedef39// CHECK-MESSAGES: :[[@LINE-2]]:44: warning: {{.*}} in typedef40// CHECK-FIXES: typedef int (*returns_fn_void_int_t())();41 42// Should work for type aliases as well as typedef.43using returns_fn_void_int_t2 = int (*(void))(void);44// CHECK-MESSAGES: :[[@LINE-1]]:39: warning: {{.*}} in type alias45// CHECK-MESSAGES: :[[@LINE-2]]:46: warning: {{.*}} in type alias46// CHECK-FIXES: using returns_fn_void_int_t2 = int (*())();47 48int (*returns_fn_void_int(void))(void) {49// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: {{.*}} in function definition50// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: {{.*}} in function definition51// CHECK-FIXES: int (*returns_fn_void_int())() {52 return nullptr;53}54 55// A function taking void and returning a pointer to a function taking void56// and returning a pointer to a function taking void and returning void.57void (*(*returns_fn_returns_fn_void_void(void))(void))(void);58// CHECK-MESSAGES: :[[@LINE-1]]:42: warning: {{.*}} in function declaration59// CHECK-MESSAGES: :[[@LINE-2]]:49: warning: {{.*}} in function declaration60// CHECK-MESSAGES: :[[@LINE-3]]:56: warning: {{.*}} in function declaration61// CHECK-FIXES: void (*(*returns_fn_returns_fn_void_void())())();62 63typedef void (*(*returns_fn_returns_fn_void_void_t(void))(void))(void);64// CHECK-MESSAGES: :[[@LINE-1]]:52: warning: {{.*}} in typedef65// CHECK-MESSAGES: :[[@LINE-2]]:59: warning: {{.*}} in typedef66// CHECK-MESSAGES: :[[@LINE-3]]:66: warning: {{.*}} in typedef67// CHECK-FIXES: typedef void (*(*returns_fn_returns_fn_void_void_t())())();68 69void (*(*returns_fn_returns_fn_void_void(void))(void))(void) {70// CHECK-MESSAGES: :[[@LINE-1]]:42: warning: {{.*}} in function definition71// CHECK-MESSAGES: :[[@LINE-2]]:49: warning: {{.*}} in function definition72// CHECK-MESSAGES: :[[@LINE-3]]:56: warning: {{.*}} in function definition73// CHECK-FIXES: void (*(*returns_fn_returns_fn_void_void())())() {74 return nullptr;75}76 77void bar(void) {78// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: {{.*}} in function definition79// CHECK-FIXES: void bar() {80}81 82void op_fn(int i) {83}84 85class gronk {86public:87 gronk();88 ~gronk();89 90 void foo();91 void bar();92 void bar293 ();94 void operation(int i) { }95 96private:97 int m_i;98 int *m_pi;99 float m_f;100 float *m_pf;101 double m_d;102 double *m_pd;103 104 void (*f1)(void);105 // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: {{.*}} in field declaration106 // CHECK-FIXES: void (*f1)();107 108 void (*op)(int i);109 110 void (gronk::*p1)(void);111 // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: {{.*}} in field declaration112 // CHECK-FIXES: void (gronk::*p1)();113 114 int (gronk::*p_mi);115 116 void (gronk::*p2)(int);117 118 void (*(*returns_fn_returns_fn_void_void(void))(void))(void);119 // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: {{.*}} in function declaration120 // CHECK-MESSAGES: :[[@LINE-2]]:51: warning: {{.*}} in function declaration121 // CHECK-MESSAGES: :[[@LINE-3]]:58: warning: {{.*}} in function declaration122 // CHECK-FIXES: void (*(*returns_fn_returns_fn_void_void())())();123 124 void (*(*(gronk::*returns_fn_returns_fn_void_void_mem)(void))(void))(void);125 // CHECK-MESSAGES: :[[@LINE-1]]:58: warning: {{.*}} in field declaration126 // CHECK-MESSAGES: :[[@LINE-2]]:65: warning: {{.*}} in field declaration127 // CHECK-MESSAGES: :[[@LINE-3]]:72: warning: {{.*}} in field declaration128 // CHECK-FIXES: void (*(*(gronk::*returns_fn_returns_fn_void_void_mem)())())();129};130 131int i;132int *pi;133void *pv = (void *) pi;134float f;135float *fi;136double d;137double *pd;138 139void (*f1)(void);140// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: {{.*}} in variable declaration141// CHECK-FIXES: void (*f1)();142 143void (*f2)(void) = nullptr;144// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: {{.*}} in variable declaration with initializer145// CHECK-FIXES: void (*f2)() = nullptr;146 147void (*f2b)(void)(nullptr);148// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: {{.*}} in variable declaration with initializer149// CHECK-FIXES: void (*f2b)()(nullptr);150 151void (*f2c)(void){nullptr};152// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: {{.*}} in variable declaration with initializer153// CHECK-FIXES: void (*f2c)(){nullptr};154 155void (*f2d)(void) = NULL;156// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: {{.*}} in variable declaration with initializer157// CHECK-FIXES: void (*f2d)() = NULL;158 159void (*f2e)(void)(NULL);160// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: {{.*}} in variable declaration with initializer161// CHECK-FIXES: void (*f2e)()(NULL);162 163void (*f2f)(void){NULL};164// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: {{.*}} in variable declaration with initializer165// CHECK-FIXES: void (*f2f)(){NULL};166 167void (*f3)(void) = bar;168// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: {{.*}} in variable declaration with initializer169// CHECK-FIXES: void (*f3)() = bar;170 171void (*o1)(int i);172void (*o2)(int i) = nullptr;173void (*o3)(int i)(nullptr);174void (*o4)(int i){nullptr};175void (*o5)(int i) = NULL;176void (*o6)(int i)(NULL);177void (*o7)(int i){NULL};178void (*o8)(int i) = op_fn;179 180void (*fa)();181 182void (*fb)() = nullptr;183 184void (*fc)() = bar;185 186typedef void (function_ptr)(void);187// CHECK-MESSAGES: :[[@LINE-1]]:29: warning: {{.*}} in typedef188// CHECK-FIXES: typedef void (function_ptr)();189 190// intentionally not LLVM style to check preservation of whitespace191typedef void (function_ptr2)192 (193 void194 );195// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: {{.*}} in typedef196// CHECK-FIXES: {{^typedef void \(function_ptr2\)$}}197// CHECK-FIXES-NEXT: {{^ \($}}198// CHECK-FIXES-NEXT: {{^ $}}199// CHECK-FIXES-NEXT: {{^ \);$}}200 201// intentionally not LLVM style to check preservation of whitespace202// clang-format off203typedef204void205(206*207(208*209returns_fn_returns_fn_void_void_t2210(211void212)213)214(215void216)217)218(219void220)221;222// CHECK-MESSAGES: :[[@LINE-11]]:1: warning: {{.*}} in typedef223// CHECK-MESSAGES: :[[@LINE-8]]:1: warning: {{.*}} in typedef224// CHECK-MESSAGES: :[[@LINE-5]]:1: warning: {{.*}} in typedef225// CHECK-FIXES: {{^typedef$}}226// CHECK-FIXES-NEXT: {{^void$}}227// CHECK-FIXES-NEXT: {{^\($}}228// CHECK-FIXES-NEXT: {{^\*$}}229// CHECK-FIXES-NEXT: {{^\($}}230// CHECK-FIXES-NEXT: {{^\*$}}231// CHECK-FIXES-NEXT: {{^returns_fn_returns_fn_void_void_t2$}}232// CHECK-FIXES-NEXT: {{^\($}}233// CHECK-FIXES-NOT: {{[^ ]}}234// CHECK-FIXES: {{^\)$}}235// CHECK-FIXES-NEXT: {{^\)$}}236// CHECK-FIXES-NEXT: {{^\($}}237// CHECK-FIXES-NOT: {{[^ ]}}238// CHECK-FIXES: {{^\)$}}239// CHECK-FIXES-NEXT: {{^\)$}}240// CHECK-FIXES-NEXT: {{^\($}}241// CHECK-FIXES-NOT: {{[^ ]}}242// CHECK-FIXES: {{^\)$}}243// CHECK-FIXES-NEXT: {{^;$}}244// clang-format on245 246void (gronk::*p1)(void);247// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: {{.*}} in variable declaration248// CHECK-FIXES: void (gronk::*p1)();249 250void (gronk::*p2)(void) = &gronk::foo;251// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: {{.*}} in variable declaration with initializer252// CHECK-FIXES: void (gronk::*p2)() = &gronk::foo;253 254typedef void (gronk::*member_function_ptr)(void);255// CHECK-MESSAGES: :[[@LINE-1]]:44: warning: {{.*}} in typedef256// CHECK-FIXES: typedef void (gronk::*member_function_ptr)();257 258// intentionally not LLVM style to check preservation of whitespace259typedef void (gronk::*member_function_ptr2)260 (261 void262 );263// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: {{.*}} in typedef264// CHECK-FIXES: {{^typedef void \(gronk::\*member_function_ptr2\)$}}265// CHECK-FIXES-NEXT: {{^ \($}}266// CHECK-FIXES-NEXT: {{^ $}}267// CHECK-FIXES-NEXT: {{^ \);$}}268 269void gronk::foo() {270 void (*f1)(void) = &::bar;271 // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: {{.*}} in variable declaration with initializer272 // CHECK-FIXES: void (*f1)() = &::bar;273 274 void (*f2)(void);275 // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: {{.*}} in variable declaration276 // CHECK-FIXES: void (*f2)();277 278 // intentionally not LLVM style to check preservation of whitespace279 void (*f3)280 (281 void282 );283 // CHECK-MESSAGES: :[[@LINE-2]]:11: warning: {{.*}} in variable declaration284 // CHECK-FIXES: {{^ }}void (*f3){{$}}285 // CHECK-FIXES-NEXT: {{^ \($}}286 // CHECK-FIXES-NEXT: {{^ $}}287 // CHECK-FIXES-NEXT: {{^ \);$}}288}289 290void gronk::bar(void) {291// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: {{.*}} in function definition292// CHECK-FIXES: void gronk::bar() {293 void (gronk::*p3)(void) = &gronk::foo;294 // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: {{.*}} in variable declaration with initializer295 // CHECK-FIXES: void (gronk::*p3)() = &gronk::foo;296 297 void (gronk::*p4)(void);298 // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: {{.*}} in variable declaration299 // CHECK-FIXES: void (gronk::*p4)();300 301 // intentionally not LLVM style to check preservation of whitespace302 void (gronk::*p5)303 (304 void305 );306 // CHECK-MESSAGES: :[[@LINE-2]]:11: warning: {{.*}} in variable declaration307 // CHECK-FIXES: {{^ }}void (gronk::*p5){{$}}308 // CHECK-FIXES-NEXT: {{^ \($}}309 // CHECK-FIXES-NExT: {{^ $}}310 // CHECK-FIXES-NExT: {{^ \);$}}311}312 313// intentionally not LLVM style to check preservation of whitespace314void gronk::bar2315 (316 void317 )318// CHECK-MESSAGES: :[[@LINE-2]]:3: warning: {{.*}} in function definition319// CHECK-FIXES: {{^void gronk::bar2$}}320// CHECK-FIXES-NEXT: {{^ \($}}321// CHECK-FIXES-NEXT: {{^ $}}322// CHECK-FIXES-NEXT: {{^ \)$}}323{324}325 326gronk::gronk(void)327// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: {{.*}} in function definition328// CHECK-FIXES: gronk::gronk()329 : f1(nullptr),330 p1(nullptr) {331}332 333gronk::~gronk(void) {334// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: {{.*}} in function definition335// CHECK-FIXES: gronk::~gronk() {336}337 338class nutter {339public:340 nutter();341};342 343nutter::nutter(void) {344// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: {{.*}} in function definition345// CHECK-FIXES: nutter::nutter() {346 void (*f3)(void) = static_cast<void (*)(void)>(0);347 // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: {{.*}} in variable declaration with initializer348 // CHECK-MESSAGES: :[[@LINE-2]]:43: warning: {{.*}} in named cast349 // CHECK-FIXES: void (*f3)() = static_cast<void (*)()>(0);350 351 void (*f4)(void) = (void (*)(void)) 0;352 // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: {{.*}} in variable declaration with initializer353 // CHECK-MESSAGES: :[[@LINE-2]]:32: warning: {{.*}} in cast expression354 // CHECK-FIXES: void (*f4)() = (void (*)()) 0;355 356 void (*f5)(void) = reinterpret_cast<void (*)(void)>(0);357 // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: {{.*}} in variable declaration with initializer358 // CHECK-MESSAGES: :[[@LINE-2]]:48: warning: {{.*}} in named cast359 // CHECK-FIXES: void (*f5)() = reinterpret_cast<void (*)()>(0);360 361 // intentionally not LLVM style to check preservation of whitespace362 void (*f6)(void) = static_cast<void (*)363 (364 void365 )>(0);366 // CHECK-MESSAGES: :[[@LINE-4]]:14: warning: {{.*}} in variable declaration with initializer367 // CHECK-MESSAGES: :[[@LINE-3]]:11: warning: {{.*}} in named cast368 // CHECK-FIXES: {{^ }}void (*f6)() = static_cast<void (*){{$}}369 // CHECK-FIXES-NEXT: {{^ \($}}370 // CHECK-FIXES-NEXT: {{^ $}}371 // CHECK-FIXES-NEXT: {{^ }})>(0);{{$}}372 373 // intentionally not LLVM style to check preservation of whitespace374 void (*f7)(void) = (void (*)375 (376 void377 )) 0;378 // CHECK-MESSAGES: :[[@LINE-4]]:14: warning: {{.*}} in variable declaration with initializer379 // CHECK-MESSAGES: :[[@LINE-3]]:11: warning: {{.*}} in cast expression380 // CHECK-FIXES: {{^ }}void (*f7)() = (void (*){{$}}381 // CHECK-FIXES-NEXT: {{^ \($}}382 // CHECK-FIXES-NEXT: {{^ $}}383 // CHECK-FIXES-NEXT: {{^ \)\) 0;$}}384 385 // intentionally not LLVM style to check preservation of whitespace386 void (*f8)(void) = reinterpret_cast<void (*)387 (388 void389 )>(0);390 // CHECK-MESSAGES: :[[@LINE-4]]:14: warning: {{.*}} in variable declaration with initializer391 // CHECK-MESSAGES: :[[@LINE-3]]:11: warning: {{.*}} in named cast392 // CHECK-FIXES: {{^ }}void (*f8)() = reinterpret_cast<void (*){{$}}393 // CHECK-FIXES-NEXT: {{^ \($}}394 // CHECK-FIXES-NEXT: {{^ $}}395 // CHECK-FIXES-NEXT: {{^ \)>\(0\);$}}396 397 void (*o1)(int) = static_cast<void (*)(int)>(0);398 void (*o2)(int) = (void (*)(int)) 0;399 void (*o3)(int) = reinterpret_cast<void (*)(int)>(0);400}401 402class generator {403public:404 int operator()(void) { return 1; }405 // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: {{.*}} in function definition406 // CHECK-FIXES: int operator()() { return 1; }407};408 409void test_lambda_functions() {410 auto lamb_duh = [](void (*fn)(void)) { (*fn)(); };411 // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: {{.*}} in variable declaration412 // CHECK-FIXES: auto lamb_duh = [](void (*fn)()) { (*fn)(); };413 414 auto lambda_generator = [](void) { return 1; };415 // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: {{.*}} in lambda expression416 // CHECK-FIXES: auto lambda_generator = []() { return 1; };417 418 auto gen2 = []() { return 1; };419 420 auto gen3 = []{ return 1; };421 422 auto void_returner = [](void) -> void (*)(void) { return f1; };423 // CHECK-MESSAGES: [[@LINE-1]]:27: warning: {{.*}} in lambda expression424 // CHECK-MESSAGES: [[@LINE-2]]:45: warning: {{.*}} in lambda expression425 // CHECK-FIXES: auto void_returner = []() -> void (*)() { return f1; };426}427 428#define M(x) x429 430M(void inmacro(void) {})431// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: {{.*}} in function definition432// CHECK-FIXES: M(void inmacro() {})433 434#define F(A, B) \435 struct F_##A##_##B { \436 F_##A##_##B(void); \437 }; \438 F_##A##_##B::F_##A##_##B(void)439 440F(Foo, Bar) {441 442}443 444struct DefinitionWithNoBody {445 DefinitionWithNoBody(void) = delete;446 // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: {{.*}} in function definition447 // CHECK-FIXES: DefinitionWithNoBody() = delete;448};449 450 451 452#define BODY {}453#define LAMBDA1 [](void){}454// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]455// CHECK-FIXES: #define LAMBDA1 [](){}456 457#define LAMBDA2 [](void)BODY458// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]459// CHECK-FIXES: #define LAMBDA2 []()BODY460 461#define LAMBDA3(captures, args, body) captures args body462#define WRAP(...) __VA_ARGS__463 464#define LAMBDA4 (void)LAMBDA3([],(void),BODY)465// CHECK-MESSAGES: :[[@LINE-1]]:35: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]466// CHECK-FIXES: #define LAMBDA4 (void)LAMBDA3([],(),BODY)467 468#define LAMBDA5 []() -> void (*)(void) {return BODY;}469// CHECK-MESSAGES: :[[@LINE-1]]:34: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]470// CHECK-FIXES: #define LAMBDA5 []() -> void (*)() {return BODY;}471void lambda_expression_with_macro_test(){472 (void)LAMBDA1;473 (void)LAMBDA2;474 (void)LAMBDA3([], (void), BODY);475 // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]476 // CHECK-FIXES: (void)LAMBDA3([], (), BODY);477 478 LAMBDA4;479 LAMBDA5;480 WRAP((void)WRAP(WRAP(LAMBDA3(WRAP([]), WRAP((void)), WRAP(BODY)))));481 // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]482 // CHECK-FIXES: WRAP((void)WRAP(WRAP(LAMBDA3(WRAP([]), WRAP(()), WRAP(BODY)))));483 484 (void)WRAP([](void) {});485 // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]486 // CHECK-FIXES: (void)WRAP([]() {});487 488 [](void) BODY;489 // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]490 // CHECK-FIXES: []() BODY;491}492 493namespace qqq {494void foo() BODY495void bar(void) BODY;496// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: redundant void argument list in function definition497// CHECK-FIXES: void bar() BODY;498}499 500struct S_1 {501 void g_1(void) const {502 // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant void argument list in function definition [modernize-redundant-void-arg]503 // CHECK-FIXES: void g_1() const {504 int a;505 (void)a;506 }507 508 void g_2() const {509 int a;510 (void)a;511 }512};513 514template <typename T0>515struct S_2 {516 void g_1(void) const {517 // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant void argument list in function definition [modernize-redundant-void-arg]518 // CHECK-FIXES: void g_1() const {519 int a;520 (void)a;521 }522 523 void g_2() const {524 int a;525 (void)a;526 }527};528 529template <typename T0>530struct S_3 {531 template <typename T1>532 void g_1(void) const {533 // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant void argument list in function definition [modernize-redundant-void-arg]534 // CHECK-FIXES: void g_1() const {535 int a;536 (void)a;537 }538 template <typename T2>539 void g_2() const {540 int a;541 (void)a;542 }543};544 545template <typename T1>546void g_3(void) {547 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: redundant void argument list in function definition [modernize-redundant-void-arg]548 // CHECK-FIXES: void g_3() {549 int a;550 (void)a;551}552 553//Template instantiation554void f_testTemplate() {555 S_1();556 S_2<int>();557 S_3<int>();558 g_3<int>();559}560 561#define return_t(T) T562extern return_t(void) func(void);563// CHECK-MESSAGES: :[[@LINE-1]]:28: warning: redundant void argument list in function declaration564// CHECK-FIXES: extern return_t(void) func();565 566return_t(void) func(void) {567 // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: redundant void argument list in function definition568 // CHECK-FIXES: return_t(void) func() {569 int a;570 (void)a;571}572 573extern return_t(void) func(return_t(void) (*fp)(void));574// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: redundant void argument list in variable declaration575// CHECK-FIXES: extern return_t(void) func(return_t(void) (*fp)());576 577return_t(void) func(return_t(void) (*fp)(void)) {578 // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: redundant void argument list in variable declaration579 // CHECK-FIXES: return_t(void) func(return_t(void) (*fp)()) {580 int a;581 (void)a;582}583 584extern return_t(return_t(void)) func2(return_t(return_t(void)) (*fp)(void));585// CHECK-MESSAGES: :[[@LINE-1]]:70: warning: redundant void argument list in variable declaration586// CHECK-FIXES: extern return_t(return_t(void)) func2(return_t(return_t(void)) (*fp)());587 588return_t(return_t(void)) func2(return_t(return_t(void)) (*fp)(void)) {589 // CHECK-MESSAGES: :[[@LINE-1]]:63: warning: redundant void argument list in variable declaration590 // CHECK-FIXES: return_t(return_t(void)) func2(return_t(return_t(void)) (*fp)()) {591 int a;592 (void)a;593}594#undef return_t595