steakhal created this revision. steakhal added reviewers: ffrankies, aaron.ballman, alexfh, njames93. Herald added subscribers: carlosgalvezp, martong, xazax.hun. steakhal requested review of this revision. Herald added a project: clang-tools-extra. Herald added a subscriber: cfe-commits.
https://reviews.llvm.org/D114256 Files: clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp Index: clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp @@ -0,0 +1,8 @@ +// RUN: %check_clang_tidy -expect-clang-tidy-error %s altera-struct-pack-align %t -- -header-filter=.* + +// This should not crash. + +struct Foo { + member; +}; +// CHECK-MESSAGES: :[[@LINE-2]]:3: error: C++ requires a type specifier for all declarations [clang-diagnostic-error] Index: clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp +++ clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp @@ -51,6 +51,10 @@ if (Struct->isTemplated()) return; + // Ignore invalid decls to prevent crashing on calling `getASTRecordLayout`. + if (Struct->isInvalidDecl()) + return; + // Get sizing info for the struct. llvm::SmallVector<std::pair<unsigned int, unsigned int>, 10> FieldSizes; unsigned int TotalBitSize = 0;
Index: clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/altera-struct-pack-align-invalid-decl-no-crash.cpp @@ -0,0 +1,8 @@ +// RUN: %check_clang_tidy -expect-clang-tidy-error %s altera-struct-pack-align %t -- -header-filter=.* + +// This should not crash. + +struct Foo { + member; +}; +// CHECK-MESSAGES: :[[@LINE-2]]:3: error: C++ requires a type specifier for all declarations [clang-diagnostic-error] Index: clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp +++ clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp @@ -51,6 +51,10 @@ if (Struct->isTemplated()) return; + // Ignore invalid decls to prevent crashing on calling `getASTRecordLayout`. + if (Struct->isInvalidDecl()) + return; + // Get sizing info for the struct. llvm::SmallVector<std::pair<unsigned int, unsigned int>, 10> FieldSizes; unsigned int TotalBitSize = 0;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits