mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-27 11:55:49 +00:00
[clangd] More complete fix for hover crashes on invalid record.
We should not call getFieldOffset on invalid record decls. Differential Revision: https://reviews.llvm.org/D83189
This commit is contained in:
parent
a2619a60e4
commit
254b016c65
@ -659,8 +659,10 @@ bool isHardLineBreakAfter(llvm::StringRef Line, llvm::StringRef Rest) {
|
||||
}
|
||||
|
||||
void addLayoutInfo(const NamedDecl &ND, HoverInfo &HI) {
|
||||
const auto &Ctx = ND.getASTContext();
|
||||
if (ND.isInvalidDecl())
|
||||
return;
|
||||
|
||||
const auto &Ctx = ND.getASTContext();
|
||||
if (auto *RD = llvm::dyn_cast<RecordDecl>(&ND)) {
|
||||
if (auto Size = Ctx.getTypeSizeInCharsIfKnown(RD->getTypeForDecl()))
|
||||
HI.Size = Size->getQuantity();
|
||||
@ -671,11 +673,10 @@ void addLayoutInfo(const NamedDecl &ND, HoverInfo &HI) {
|
||||
const auto *Record = FD->getParent();
|
||||
if (Record)
|
||||
Record = Record->getDefinition();
|
||||
if (Record && !Record->isDependentType()) {
|
||||
if (Record && !Record->isInvalidDecl() && !Record->isDependentType()) {
|
||||
HI.Offset = Ctx.getFieldOffset(FD) / 8;
|
||||
if (auto Size = Ctx.getTypeSizeInCharsIfKnown(FD->getType()))
|
||||
HI.Size = Size->getQuantity();
|
||||
if (!FD->isInvalidDecl())
|
||||
HI.Offset = Ctx.getFieldOffset(FD) / 8;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -784,11 +784,24 @@ class Foo {})cpp";
|
||||
HI.NamespaceScope = "";
|
||||
HI.Definition = "int xx";
|
||||
HI.LocalScope = "Foo::";
|
||||
HI.Size = 4;
|
||||
HI.Type = "int";
|
||||
HI.AccessSpecifier = "public";
|
||||
}},
|
||||
};
|
||||
{R"cpp(
|
||||
// error-ok
|
||||
struct Foo {
|
||||
Bar xx;
|
||||
int [[y^y]];
|
||||
};)cpp",
|
||||
[](HoverInfo &HI) {
|
||||
HI.Name = "yy";
|
||||
HI.Kind = index::SymbolKind::Field;
|
||||
HI.NamespaceScope = "";
|
||||
HI.Definition = "int yy";
|
||||
HI.LocalScope = "Foo::";
|
||||
HI.Type = "int";
|
||||
HI.AccessSpecifier = "public";
|
||||
}}};
|
||||
for (const auto &Case : Cases) {
|
||||
SCOPED_TRACE(Case.Code);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user