aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQizhi Hu <836744285@qq.com>2023-10-05 13:49:21 +0800
committerGitHub <noreply@github.com>2023-10-05 13:49:21 +0800
commiteef35c287ee093b3521c6c2b682d8da538ad28be (patch)
tree772a6fdfc98cf8c4b98b307d4f7af5417186ed4d
parenta4765c6a028ae01fd67b15ac123d07a629997ffa (diff)
downloadllvm-eef35c287ee093b3521c6c2b682d8da538ad28be.zip
llvm-eef35c287ee093b3521c6c2b682d8da538ad28be.tar.gz
llvm-eef35c287ee093b3521c6c2b682d8da538ad28be.tar.bz2
[clang-tidy]: Add TagDecl into LastTagDeclRanges in UseUsingCheck only when it is a definition (#67639)
Fix issue 67529, [clang-tidy: modernize-use-using fails when type is implicitly forward declared](https://github.com/llvm/llvm-project/issues/67529) The problem is that using `Lexer` to get record declaration will lose the type information when its original type is pointer or reference. This patch fix this problem by skip adding the tag declaration when it's only a 'declaration' and not a 'definition'. Co-authored-by: huqizhi <836744285@qq.com>
-rw-r--r--clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp3
-rw-r--r--clang-tools-extra/docs/ReleaseNotes.rst4
-rw-r--r--clang-tools-extra/test/clang-tidy/checkers/modernize/use-using.cpp4
3 files changed, 8 insertions, 3 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp
index 22dc9e2..e6293ed 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp
@@ -61,7 +61,8 @@ void UseUsingCheck::check(const MatchFinder::MatchResult &Result) {
// before the typedef will be the nested one (PR#50990). Therefore, we also
// keep track of the parent declaration, so that we can look up the last
// TagDecl that is a sibling of the typedef in the AST.
- LastTagDeclRanges[ParentDecl] = MatchedTagDecl->getSourceRange();
+ if (MatchedTagDecl->isThisDeclarationADefinition())
+ LastTagDeclRanges[ParentDecl] = MatchedTagDecl->getSourceRange();
return;
}
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 8fc28c0..f921d40 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -279,8 +279,8 @@ Changes in existing checks
fixes for reordering arguments.
- Improved :doc:`modernize-use-using
- <clang-tidy/checks/modernize/use-using>` check to fix function pointer
- ``typedef`` correctly.
+ <clang-tidy/checks/modernize/use-using>` check to fix function pointer and
+ forward declared ``typedef`` correctly.
- Improved :doc:`performance-faster-string-find
<clang-tidy/checks/performance/faster-string-find>` check to properly escape
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 f7db0af..422abee 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
@@ -321,3 +321,7 @@ typedef bool (*ISSUE_65055_2)(int);
// CHECK-MESSAGES: :[[@LINE-2]]:1: warning: use 'using' instead of 'typedef'
// CHECK-FIXES: {{^}}using ISSUE_65055_1 = void (*)(int);{{$}}
// CHECK-FIXES: {{^}}using ISSUE_65055_2 = bool (*)(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 *;