forked from OSchip/llvm-project
[clangd] Fix an assertion in TypoCorrection.
Summary: https://github.com/clangd/clangd/issues/7 Reviewers: sammccall, hokein Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D57944 llvm-svn: 353514
This commit is contained in:
parent
7fe97f8c7c
commit
37b45dc22c
|
@ -192,12 +192,6 @@ public:
|
|||
if (!SemaPtr->SourceMgr.isWrittenInMainFile(Typo.getLoc()))
|
||||
return clang::TypoCorrection();
|
||||
|
||||
assert(S && "Enclosing scope must be set.");
|
||||
|
||||
UnresolvedName Unresolved;
|
||||
Unresolved.Name = Typo.getAsString();
|
||||
Unresolved.Loc = Typo.getBeginLoc();
|
||||
|
||||
// FIXME: support invalid scope before a type name. In the following
|
||||
// example, namespace "clang::tidy::" hasn't been declared/imported.
|
||||
// namespace clang {
|
||||
|
@ -228,6 +222,12 @@ public:
|
|||
return TypoCorrection();
|
||||
}
|
||||
}
|
||||
if (!SpecifiedScope && !S) // Give up if no scope available.
|
||||
return TypoCorrection();
|
||||
|
||||
UnresolvedName Unresolved;
|
||||
Unresolved.Name = Typo.getAsString();
|
||||
Unresolved.Loc = Typo.getBeginLoc();
|
||||
|
||||
auto *Sem = SemaPtr; // Avoid capturing `this`.
|
||||
Unresolved.GetScopes = [Sem, SpecifiedScope, S, LookupKind]() {
|
||||
|
@ -235,6 +235,7 @@ public:
|
|||
if (SpecifiedScope) {
|
||||
Scopes.push_back(*SpecifiedScope);
|
||||
} else {
|
||||
assert(S);
|
||||
// No scope qualifier is specified. Collect all accessible scopes in the
|
||||
// context.
|
||||
VisitedContextCollector Collector;
|
||||
|
|
|
@ -423,6 +423,21 @@ void foo() {
|
|||
"Add include \"b.h\" for symbol na::nb::X")))));
|
||||
}
|
||||
|
||||
TEST(IncludeFixerTest, NoCrashMemebrAccess) {
|
||||
Annotations Test(R"cpp(
|
||||
struct X { int xyz; };
|
||||
void g() { X x; x.$[[xy]] }
|
||||
)cpp");
|
||||
auto TU = TestTU::withCode(Test.code());
|
||||
auto Index = buildIndexWithSymbol(
|
||||
SymbolWithHeader{"na::X", "unittest:///a.h", "\"a.h\""});
|
||||
TU.ExternalIndex = Index.get();
|
||||
|
||||
EXPECT_THAT(
|
||||
TU.build().getDiagnostics(),
|
||||
UnorderedElementsAre(Diag(Test.range(), "no member named 'xy' in 'X'")));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace clangd
|
||||
} // namespace clang
|
||||
|
|
Loading…
Reference in New Issue