Commit a71237b9 authored by Nathan Ridge's avatar Nathan Ridge Committed by Tobias Hieta
Browse files

[clangd] Avoid null result in FindRecordTypeAt()

Fixes https://github.com/clangd/clangd/issues/1743

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

(cherry picked from commit 1994e117)
parent 308c816d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1857,7 +1857,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;
      }

+14 −1
Original line number Diff line number Diff line
@@ -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));
  }