kadircet updated this revision to Diff 274000.
kadircet marked 2 inline comments as done.
kadircet added a comment.
address comments
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82701/new/
https://reviews.llvm.org/D82701
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
@@ -708,6 +708,17 @@
HI.Definition = "X x";
HI.Type = "struct X";
}},
+ {// Don't crash on null types.
+ R"cpp(auto [^[[x]]] = 1; /*error-ok*/)cpp",
+ [](HoverInfo &HI) {
+ HI.Name = "x";
+ HI.Kind = index::SymbolKind::Variable;
+ HI.NamespaceScope = "";
+ HI.Definition = "";
+ HI.Type = "NULL TYPE";
+ // Bindings are in theory public members of an anonymous struct.
+ 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
@@ -124,8 +124,8 @@
// TypePrinter doesn't resolve decltypes, so resolve them here.
// FIXME: This doesn't handle composite types that contain a decltype in
them.
// We should rather have a printing policy for that.
- while (const auto *DT = QT->getAs<DecltypeType>())
- QT = DT->getUnderlyingType();
+ while (!QT.isNull() && QT->isDecltypeType())
+ QT = QT->getAs<DecltypeType>()->getUnderlyingType();
return QT.getAsString(Policy);
}
@@ -297,15 +297,7 @@
for (const ParmVarDecl *PVD : FD->parameters()) {
HI.Parameters->emplace_back();
auto &P = HI.Parameters->back();
- if (!PVD->getType().isNull()) {
- P.Type = printType(PVD->getType(), Policy);
- } else {
- std::string Param;
- llvm::raw_string_ostream OS(Param);
- PVD->dump(OS);
- OS.flush();
- elog("Got param with null type: {0}", Param);
- }
+ P.Type = printType(PVD->getType(), Policy);
if (!PVD->getName().empty())
P.Name = PVD->getNameAsString();
if (const Expr *DefArg = getDefaultArg(PVD)) {
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -708,6 +708,17 @@
HI.Definition = "X x";
HI.Type = "struct X";
}},
+ {// Don't crash on null types.
+ R"cpp(auto [^[[x]]] = 1; /*error-ok*/)cpp",
+ [](HoverInfo &HI) {
+ HI.Name = "x";
+ HI.Kind = index::SymbolKind::Variable;
+ HI.NamespaceScope = "";
+ HI.Definition = "";
+ HI.Type = "NULL TYPE";
+ // Bindings are in theory public members of an anonymous struct.
+ 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
@@ -124,8 +124,8 @@
// TypePrinter doesn't resolve decltypes, so resolve them here.
// FIXME: This doesn't handle composite types that contain a decltype in them.
// We should rather have a printing policy for that.
- while (const auto *DT = QT->getAs<DecltypeType>())
- QT = DT->getUnderlyingType();
+ while (!QT.isNull() && QT->isDecltypeType())
+ QT = QT->getAs<DecltypeType>()->getUnderlyingType();
return QT.getAsString(Policy);
}
@@ -297,15 +297,7 @@
for (const ParmVarDecl *PVD : FD->parameters()) {
HI.Parameters->emplace_back();
auto &P = HI.Parameters->back();
- if (!PVD->getType().isNull()) {
- P.Type = printType(PVD->getType(), Policy);
- } else {
- std::string Param;
- llvm::raw_string_ostream OS(Param);
- PVD->dump(OS);
- OS.flush();
- elog("Got param with null type: {0}", Param);
- }
+ P.Type = printType(PVD->getType(), Policy);
if (!PVD->getName().empty())
P.Name = PVD->getNameAsString();
if (const Expr *DefArg = getDefaultArg(PVD)) {
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits