This revision was automatically updated to reflect the committed changes. mgehre marked 2 inline comments as done. Closed by commit rL360613: [clang-tidy] readability-redundant-declaration: fix false positive with C… (authored by mgehre, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits.
Changed prior to commit: https://reviews.llvm.org/D61700?vs=198724&id=199306#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61700/new/ https://reviews.llvm.org/D61700 Files: clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.c clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp Index: clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp @@ -17,6 +17,10 @@ namespace tidy { namespace readability { +AST_MATCHER(FunctionDecl, doesDeclarationForceExternallyVisibleDefinition) { + return Node.doesDeclarationForceExternallyVisibleDefinition(); +} + RedundantDeclarationCheck::RedundantDeclarationCheck(StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context), @@ -25,8 +29,10 @@ void RedundantDeclarationCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( namedDecl(anyOf(varDecl(unless(isDefinition())), - functionDecl(unless(anyOf(isDefinition(), isDefaulted(), - hasParent(friendDecl())))))) + functionDecl(unless(anyOf( + isDefinition(), isDefaulted(), + doesDeclarationForceExternallyVisibleDefinition(), + hasParent(friendDecl())))))) .bind("Decl"), this); } Index: clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.c =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.c +++ clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.c @@ -0,0 +1,31 @@ +// RUN: %check_clang_tidy %s readability-redundant-declaration %t + +extern int Xyz; +extern int Xyz; // Xyz +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'Xyz' declaration [readability-redundant-declaration] +// CHECK-FIXES: {{^}}// Xyz{{$}} +int Xyz = 123; + +extern int A; +extern int A, B; +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'A' declaration +// CHECK-FIXES: {{^}}extern int A, B;{{$}} + +extern int Buf[10]; +extern int Buf[10]; // Buf[10] +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'Buf' declaration +// CHECK-FIXES: {{^}}// Buf[10]{{$}} + +static int f(); +static int f(); // f +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'f' declaration +// CHECK-FIXES: {{^}}// f{{$}} +static int f() {} + +inline void g() {} + +inline void g(); +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: redundant 'g' declaration + +// OK: Needed to emit an external definition. +extern inline void g(); Index: clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp +++ clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp @@ -68,3 +68,13 @@ // CHECK-FIXES: {{^}}DEFINE(test);{{$}} } // namespace macros + +inline void g() {} + +inline void g(); // g +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: redundant 'g' declaration +// CHECK-FIXES: {{^}}// g{{$}} + +extern inline void g(); // extern g +// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: redundant 'g' declaration +// CHECK-FIXES: {{^}}// extern g{{$}}
Index: clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp @@ -17,6 +17,10 @@ namespace tidy { namespace readability { +AST_MATCHER(FunctionDecl, doesDeclarationForceExternallyVisibleDefinition) { + return Node.doesDeclarationForceExternallyVisibleDefinition(); +} + RedundantDeclarationCheck::RedundantDeclarationCheck(StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context), @@ -25,8 +29,10 @@ void RedundantDeclarationCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( namedDecl(anyOf(varDecl(unless(isDefinition())), - functionDecl(unless(anyOf(isDefinition(), isDefaulted(), - hasParent(friendDecl())))))) + functionDecl(unless(anyOf( + isDefinition(), isDefaulted(), + doesDeclarationForceExternallyVisibleDefinition(), + hasParent(friendDecl())))))) .bind("Decl"), this); } Index: clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.c =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.c +++ clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.c @@ -0,0 +1,31 @@ +// RUN: %check_clang_tidy %s readability-redundant-declaration %t + +extern int Xyz; +extern int Xyz; // Xyz +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'Xyz' declaration [readability-redundant-declaration] +// CHECK-FIXES: {{^}}// Xyz{{$}} +int Xyz = 123; + +extern int A; +extern int A, B; +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'A' declaration +// CHECK-FIXES: {{^}}extern int A, B;{{$}} + +extern int Buf[10]; +extern int Buf[10]; // Buf[10] +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'Buf' declaration +// CHECK-FIXES: {{^}}// Buf[10]{{$}} + +static int f(); +static int f(); // f +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'f' declaration +// CHECK-FIXES: {{^}}// f{{$}} +static int f() {} + +inline void g() {} + +inline void g(); +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: redundant 'g' declaration + +// OK: Needed to emit an external definition. +extern inline void g(); Index: clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp +++ clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp @@ -68,3 +68,13 @@ // CHECK-FIXES: {{^}}DEFINE(test);{{$}} } // namespace macros + +inline void g() {} + +inline void g(); // g +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: redundant 'g' declaration +// CHECK-FIXES: {{^}}// g{{$}} + +extern inline void g(); // extern g +// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: redundant 'g' declaration +// CHECK-FIXES: {{^}}// extern g{{$}}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits