Author: malaperle Date: Fri Nov 16 16:41:14 2018 New Revision: 347119 URL: http://llvm.org/viewvc/llvm-project?rev=347119&view=rev Log: [clangd] Fix crash hovering on non-decltype trailing return
Summary: More specifically, hovering on "auto" in auto main() -> int { return 0; } Signed-off-by: Marc-Andre Laperle <malape...@gmail.com> Reviewers: ilya-biryukov Reviewed By: ilya-biryukov Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits Differential Revision: https://reviews.llvm.org/D54553 Modified: clang-tools-extra/trunk/clangd/XRefs.cpp clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp Modified: clang-tools-extra/trunk/clangd/XRefs.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/XRefs.cpp?rev=347119&r1=347118&r2=347119&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/XRefs.cpp (original) +++ clang-tools-extra/trunk/clangd/XRefs.cpp Fri Nov 16 16:41:14 2018 @@ -605,6 +605,7 @@ public: // Handle auto return types: //- auto foo() {} //- auto& foo() {} + //- auto foo() -> int {} //- auto foo() -> decltype(1+1) {} //- operator auto() const { return 10; } bool VisitFunctionDecl(FunctionDecl *D) { @@ -624,12 +625,13 @@ public: const AutoType *AT = D->getReturnType()->getContainedAutoType(); if (AT && !AT->getDeducedType().isNull()) { DeducedType = AT->getDeducedType(); - } else { + } else if (auto DT = dyn_cast<DecltypeType>(D->getReturnType())) { // auto in a trailing return type just points to a DecltypeType and // getContainedAutoType does not unwrap it. - const DecltypeType *DT = dyn_cast<DecltypeType>(D->getReturnType()); if (!DT->getUnderlyingType().isNull()) DeducedType = DT->getUnderlyingType(); + } else if (!D->getReturnType().isNull()) { + DeducedType = D->getReturnType(); } return true; } Modified: clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp?rev=347119&r1=347118&r2=347119&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp (original) +++ clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp Fri Nov 16 16:41:14 2018 @@ -836,6 +836,14 @@ TEST(Hover, All) { "", }, { + R"cpp(// simple trailing return type + ^auto main() -> int { + return 0; + } + )cpp", + "int", + }, + { R"cpp(// auto function return with trailing type struct Bar {}; ^auto test() -> decltype(Bar()) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits