Author: Nathan Ridge Date: 2023-08-25T11:50:19-04:00 New Revision: 1994e1173b64b61c07f8acf107f29c2c015575b4
URL: https://github.com/llvm/llvm-project/commit/1994e1173b64b61c07f8acf107f29c2c015575b4 DIFF: https://github.com/llvm/llvm-project/commit/1994e1173b64b61c07f8acf107f29c2c015575b4.diff LOG: [clangd] Avoid null result in FindRecordTypeAt() Fixes https://github.com/clangd/clangd/issues/1743 Differential Revision: https://reviews.llvm.org/D158851 Added: Modified: clang-tools-extra/clangd/XRefs.cpp clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp index 9beb3f1417b9aa..f55d2a56239563 100644 --- a/clang-tools-extra/clangd/XRefs.cpp +++ b/clang-tools-extra/clangd/XRefs.cpp @@ -1851,7 +1851,8 @@ std::vector<const CXXRecordDecl *> findRecordTypeAt(ParsedAST &AST, if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { // If this is a variable, use the type of the variable. - Records.push_back(VD->getType().getTypePtr()->getAsCXXRecordDecl()); + if (const auto *RD = VD->getType().getTypePtr()->getAsCXXRecordDecl()) + Records.push_back(RD); continue; } diff --git a/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp b/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp index a73ae78766c381..2f82ec7444d7a9 100644 --- a/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp +++ b/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp @@ -78,6 +78,19 @@ int main() { } } +TEST(FindRecordTypeAt, Nonexistent) { + Annotations Source(R"cpp( + int *wa^ldo; + )cpp"); + TestTU TU = TestTU::withCode(Source.code()); + auto AST = TU.build(); + + for (Position Pt : Source.points()) { + auto Records = findRecordTypeAt(AST, Pt); + ASSERT_THAT(Records, SizeIs(0)); + } +} + TEST(FindRecordTypeAt, Method) { Annotations Source(R"cpp( struct Child2 { @@ -119,7 +132,7 @@ int main() { for (Position Pt : Source.points()) { // A field does not unambiguously specify a record type - // (possible associated reocrd types could be the field's type, + // (possible associated record types could be the field's type, // or the type of the record that the field is a member of). EXPECT_THAT(findRecordTypeAt(AST, Pt), SizeIs(0)); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits