Skip to content

Commit db70369

Browse files
zyn0217tstellar
authored andcommitted
[Clang] Fix an error-recovery crash after d1a80de (llvm#159976)
d1a80de tried to ensure a TypeSourceInfo for a destructor name. However, we don't actually have one during error recovery, so we should bail in that case. No release note, since it's a regression and a backport could improve the stability of clangd. Fixes llvm#159630 (cherry picked from commit 90a6b00)
1 parent 9c8736f commit db70369

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

clang/lib/Sema/SemaExprCXX.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,8 @@ ParsedType Sema::getDestructorName(const IdentifierInfo &II,
347347
CheckTypenameType(ElaboratedTypeKeyword::None, SourceLocation(),
348348
SS.getWithLocInContext(Context), II, NameLoc, &TSI,
349349
/*DeducedTSTContext=*/true);
350+
if (T.isNull())
351+
return ParsedType();
350352
return CreateParsedType(T, TSI);
351353
}
352354

clang/test/SemaTemplate/destructor-template.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,18 @@ struct T : S {
104104
~T() = default;
105105
};
106106
} // namespace PR38671
107+
108+
namespace GH159630 {
109+
110+
struct X {
111+
template<typename T>
112+
struct typo { // expected-note {{'typo' declared here}}
113+
~typo();
114+
};
115+
};
116+
117+
template<typename T>
118+
X::typo<T>::typ0::~typ0() {} // expected-error {{no member named 'typ0'}} \
119+
// expected-error {{no type named 'typ0'}}
120+
121+
}

0 commit comments

Comments
 (0)