[PATCH] D138655: [clang-tidy] Fix `cppcoreguidelines-init-variables` for invalid vardecl
gehry via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 22 01:50:55 PST 2022
Sockke updated this revision to Diff 484765.
Sockke added a comment.
Improved the test file.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D138655/new/
https://reviews.llvm.org/D138655
Files:
clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp
@@ -1,4 +1,4 @@
-// RUN: %check_clang_tidy %s cppcoreguidelines-init-variables %t -- -- -fno-delayed-template-parsing -fexceptions
+// RUN: %check_clang_tidy %s cppcoreguidelines-init-variables -fix-errors %t -- -- -fno-delayed-template-parsing -fexceptions
// CHECK-FIXES: {{^}}#include <math.h>
// Ensure that function declarations are not changed.
@@ -124,3 +124,13 @@
Fruit fruit;
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: variable 'fruit' is not initialized [cppcoreguidelines-init-variables]
}
+
+void test_clang_diagnostic_error() {
+ int a;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: variable 'a' is not initialized [cppcoreguidelines-init-variables]
+ // CHECK-FIXES: {{^}} int a = 0;{{$}}
+
+ UnknownType b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: error: unknown type name 'UnknownType' [clang-diagnostic-error]
+ // CHECK-FIXES-NOT: {{^}} UnknownType b = 0;{{$}}
+}
Index: clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
+++ clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
@@ -60,6 +60,10 @@
const ASTContext &Context = *Result.Context;
const SourceManager &Source = Context.getSourceManager();
+ // Clang diagnostic error may cause the variable to be an invalid int vardecl
+ if (MatchedDecl->isInvalidDecl())
+ return;
+
// We want to warn about cases where the type name
// comes from a macro like this:
//
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D138655.484765.patch
Type: text/x-patch
Size: 1873 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221222/f5089e07/attachment.bin>
More information about the cfe-commits
mailing list