kadircet updated this revision to Diff 275448. kadircet added a comment. Inline OffsetBits
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D83143/new/ https://reviews.llvm.org/D83143 Files: clang-tools-extra/clangd/Hover.cpp clang-tools-extra/clangd/unittests/HoverTests.cpp Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -772,6 +772,22 @@ HI.CallPassType->PassBy = PassMode::Value; HI.CallPassType->Converted = false; }}, + {// Dont crash on invalid decl + R"cpp( + // error-ok + struct Foo { + Bar [[x^x]]; + };)cpp", + [](HoverInfo &HI) { + HI.Name = "xx"; + HI.Kind = index::SymbolKind::Field; + HI.NamespaceScope = ""; + HI.Definition = "int xx"; + HI.LocalScope = "Foo::"; + HI.Size = 4; + HI.Type = "int"; + HI.AccessSpecifier = "public"; + }}, }; for (const auto &Case : Cases) { SCOPED_TRACE(Case.Code); Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -672,11 +672,10 @@ if (Record) Record = Record->getDefinition(); if (Record && !Record->isDependentType()) { - uint64_t OffsetBits = Ctx.getFieldOffset(FD); - if (auto Size = Ctx.getTypeSizeInCharsIfKnown(FD->getType())) { + if (auto Size = Ctx.getTypeSizeInCharsIfKnown(FD->getType())) HI.Size = Size->getQuantity(); - HI.Offset = OffsetBits / 8; - } + if (!FD->isInvalidDecl()) + HI.Offset = Ctx.getFieldOffset(FD) / 8; } return; }
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -772,6 +772,22 @@ HI.CallPassType->PassBy = PassMode::Value; HI.CallPassType->Converted = false; }}, + {// Dont crash on invalid decl + R"cpp( + // error-ok + struct Foo { + Bar [[x^x]]; + };)cpp", + [](HoverInfo &HI) { + HI.Name = "xx"; + HI.Kind = index::SymbolKind::Field; + HI.NamespaceScope = ""; + HI.Definition = "int xx"; + HI.LocalScope = "Foo::"; + HI.Size = 4; + HI.Type = "int"; + HI.AccessSpecifier = "public"; + }}, }; for (const auto &Case : Cases) { SCOPED_TRACE(Case.Code); Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -672,11 +672,10 @@ if (Record) Record = Record->getDefinition(); if (Record && !Record->isDependentType()) { - uint64_t OffsetBits = Ctx.getFieldOffset(FD); - if (auto Size = Ctx.getTypeSizeInCharsIfKnown(FD->getType())) { + if (auto Size = Ctx.getTypeSizeInCharsIfKnown(FD->getType())) HI.Size = Size->getQuantity(); - HI.Offset = OffsetBits / 8; - } + if (!FD->isInvalidDecl()) + HI.Offset = Ctx.getFieldOffset(FD) / 8; } return; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits