[clang-tools-extra] e1d0673 - [clang-tidy] Fix crashing altera-struct-pack-align on invalid RecordDecls

Balazs Benics via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 29 00:57:16 PST 2021


Author: Balazs Benics
Date: 2021-11-29T09:56:43+01:00
New Revision: e1d0673aeeece138d4865385a24a86f6954dff72

URL: https://github.com/llvm/llvm-project/commit/e1d0673aeeece138d4865385a24a86f6954dff72
DIFF: https://github.com/llvm/llvm-project/commit/e1d0673aeeece138d4865385a24a86f6954dff72.diff

LOG: [clang-tidy] Fix crashing altera-struct-pack-align on invalid RecordDecls

Reviewed-By: martong

Differential Revision: https://reviews.llvm.org/D114256

Added: 
    clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp

Modified: 
    clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp b/clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp
index ef5fe41fd8c9c..6ae53512fca5e 100644
--- a/clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp
+++ b/clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp
@@ -51,6 +51,10 @@ void StructPackAlignCheck::check(const MatchFinder::MatchResult &Result) {
   if (Struct->isTemplated())
      return;
 
+  // Packing and alignment requirements for invalid decls are meaningless.
+  if (Struct->isInvalidDecl())
+    return;
+
   // Get sizing info for the struct.
   llvm::SmallVector<std::pair<unsigned int, unsigned int>, 10> FieldSizes;
   unsigned int TotalBitSize = 0;

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp b/clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp
new file mode 100644
index 0000000000000..d52ff94446213
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp
@@ -0,0 +1,6 @@
+// RUN: %check_clang_tidy -expect-clang-tidy-error %s altera-struct-pack-align %t -- -header-filter=.*
+
+struct Foo {
+  member; // no-crash
+};
+// CHECK-MESSAGES: :[[@LINE-2]]:3: error: C++ requires a type specifier for all declarations [clang-diagnostic-error]


        


More information about the cfe-commits mailing list