https://github.com/Da-Viper updated https://github.com/llvm/llvm-project/pull/69102
>From 21156656433fb8d2dc5a805d97cbd20fa916fff9 Mon Sep 17 00:00:00 2001 From: Ezike Ebuka <yerimy...@gmail.com> Date: Sun, 15 Oct 2023 11:39:42 +0100 Subject: [PATCH 1/6] Fix #35272: Don't replace typedefs in extern c scope --- .../clang-tidy/modernize/UseUsingCheck.cpp | 16 ++++++++++++---- .../clang-tidy/checkers/modernize/use-using.cpp | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp index e6293ed48bfddbb..841ffb4c9bfe66e 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp @@ -11,6 +11,12 @@ #include "clang/Lex/Lexer.h" using namespace clang::ast_matchers; +namespace { + +AST_MATCHER(clang::LinkageSpecDecl, isExternCLinkage) { + return Node.getLanguage() == clang::LinkageSpecDecl::lang_c; +} +} // namespace namespace clang::tidy::modernize { @@ -27,10 +33,12 @@ void UseUsingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { } void UseUsingCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(typedefDecl(unless(isInstantiated()), - hasParent(decl().bind(ParentDeclName))) - .bind(TypedefName), - this); + Finder->addMatcher( + typedefDecl(unless(anyOf(isInstantiated(), hasAncestor(linkageSpecDecl( + isExternCLinkage())))), + hasParent(decl().bind(ParentDeclName))) + .bind(TypedefName), + this); // This matcher is used to find tag declarations in source code within // typedefs. They appear in the AST just *prior* to the typedefs. diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-using.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-using.cpp index 422abee11a71962..0f8f14502d5ca3c 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-using.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-using.cpp @@ -325,3 +325,17 @@ typedef bool (*ISSUE_65055_2)(int); typedef class ISSUE_67529_1 *ISSUE_67529; // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: use 'using' instead of 'typedef' // CHECK-FIXES: using ISSUE_67529 = class ISSUE_67529_1 *; + +// Some Header +extern "C" { + +typedef int InExternC; +} + +extern "C++" { + +typedef int InExternCPP; +// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: use 'using' instead of 'typedef' [modernize-use-using] +// CHECK-FIXES: using InExternCPP = int; + +} >From 521dec9325285d1e1819a8bee1bd20eadb7c4158 Mon Sep 17 00:00:00 2001 From: Ezike Ebuka <yerimy...@gmail.com> Date: Mon, 16 Oct 2023 23:26:25 +0100 Subject: [PATCH 2/6] Add: Update docs with the new changes. Update ReleaseNotes.rst with the changes made --- clang-tools-extra/docs/ReleaseNotes.rst | 5 +++++ .../docs/clang-tidy/checks/modernize/use-using.rst | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index c1b926b296b055a..af6b20369c9dcff 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -285,6 +285,10 @@ Changes in existing checks <clang-tidy/checks/modernize/use-using>` check to fix function pointer and forward declared ``typedef`` correctly. +- Improved :doc:`modernize-use-using + <clang-tidy/checks/modernize/use-using>` by ignoring ``typedef`` declaration in + ``extern "C"`` scope. + - Improved :doc:`performance-faster-string-find <clang-tidy/checks/performance/faster-string-find>` check to properly escape single quotes. @@ -325,6 +329,7 @@ Changes in existing checks identify calls to static member functions with out-of-class inline definitions. + Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst index eeddaf8d8d65abe..048fc26617b7b73 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst @@ -28,6 +28,15 @@ After: using R_t = struct { int a; }; using R_p = R_t*; +The checker ignores `typedef` within `extern "C" { ... }` blocks. + +.. code-block:: c++ + + extern "C" { + + typedef int InExternC; // Left intact. + } + This check requires using C++11 or higher to run. Options >From 3426e0a36606a7e3eeb38c0f436c25aa2fde2b36 Mon Sep 17 00:00:00 2001 From: Ezike Ebuka <yerimy...@gmail.com> Date: Sun, 22 Oct 2023 20:02:20 +0100 Subject: [PATCH 3/6] Update: commit with review requested changes --- clang-tools-extra/docs/ReleaseNotes.rst | 6 +----- .../docs/clang-tidy/checks/modernize/use-using.rst | 2 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index af6b20369c9dcff..e3bc99ce1621354 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -283,10 +283,7 @@ Changes in existing checks - Improved :doc:`modernize-use-using <clang-tidy/checks/modernize/use-using>` check to fix function pointer and - forward declared ``typedef`` correctly. - -- Improved :doc:`modernize-use-using - <clang-tidy/checks/modernize/use-using>` by ignoring ``typedef`` declaration in + forward declared ``typedef`` correctly. Ignore ``typedef`` declaration in ``extern "C"`` scope. - Improved :doc:`performance-faster-string-find @@ -329,7 +326,6 @@ Changes in existing checks identify calls to static member functions with out-of-class inline definitions. - Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst index 048fc26617b7b73..a056eaf826fda38 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst @@ -31,9 +31,7 @@ After: The checker ignores `typedef` within `extern "C" { ... }` blocks. .. code-block:: c++ - extern "C" { - typedef int InExternC; // Left intact. } >From c1d36bcc7b2afa874ddeaab15b51ce128d88bf4d Mon Sep 17 00:00:00 2001 From: Ezike Ebuka <yerimy...@gmail.com> Date: Sun, 29 Oct 2023 11:56:16 +0000 Subject: [PATCH 4/6] Add: Update ReleaseNotes.rst with the changes made --- clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst index a056eaf826fda38..c47a022f2c98683 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst @@ -31,6 +31,7 @@ After: The checker ignores `typedef` within `extern "C" { ... }` blocks. .. code-block:: c++ + extern "C" { typedef int InExternC; // Left intact. } >From 3770a1c974813be894af629efb1f6d433bfe2ea9 Mon Sep 17 00:00:00 2001 From: Ezike Ebuka <yerimy...@gmail.com> Date: Sun, 29 Oct 2023 12:02:15 +0000 Subject: [PATCH 5/6] Revert "Add: Update ReleaseNotes.rst with the changes made" This reverts commit cf8aae9305dd689ae042199c8ab8e5adc3b69489. --- clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst index c47a022f2c98683..a056eaf826fda38 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst @@ -31,7 +31,6 @@ After: The checker ignores `typedef` within `extern "C" { ... }` blocks. .. code-block:: c++ - extern "C" { typedef int InExternC; // Left intact. } >From fccb26b75fa0ab194a0af2d4971a418fdb19e1e7 Mon Sep 17 00:00:00 2001 From: Ezike Ebuka <yerimy...@gmail.com> Date: Sun, 29 Oct 2023 12:04:38 +0000 Subject: [PATCH 6/6] Add: Update ReleaseNotes.rst with the changes made --- clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst index a056eaf826fda38..99410821c0f05b8 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-using.rst @@ -32,6 +32,7 @@ The checker ignores `typedef` within `extern "C" { ... }` blocks. .. code-block:: c++ extern "C" { + typedef int InExternC; // Left intact. } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits