Commit 1994e117 authored by Nathan Ridge's avatar Nathan Ridge
Browse files

[clangd] Avoid null result in FindRecordTypeAt()

parent cccf4d6e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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;
      }

+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));
  }