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 cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits