malaperle created this revision. Herald added subscribers: cfe-commits, kadircet, arphaman, jkorous, MaskRay, ioeric, ilya-biryukov.
More specifically, hovering on "auto" in auto main() -> int { return 0; } Signed-off-by: Marc-Andre Laperle <malape...@gmail.com> Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D54553 Files: clangd/XRefs.cpp unittests/clangd/XRefsTests.cpp Index: unittests/clangd/XRefsTests.cpp =================================================================== --- unittests/clangd/XRefsTests.cpp +++ unittests/clangd/XRefsTests.cpp @@ -1006,6 +1006,14 @@ )cpp", "int", }, + { + R"cpp(// More compilcated structured types. + ^auto main() -> int { + return 0; + } + )cpp", + "int", + }, }; for (const OneTest &Test : Tests) { Index: clangd/XRefs.cpp =================================================================== --- clangd/XRefs.cpp +++ clangd/XRefs.cpp @@ -605,6 +605,7 @@ // 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 @@ const AutoType *AT = D->getReturnType()->getContainedAutoType(); if (AT && !AT->getDeducedType().isNull()) { DeducedType = AT->getDeducedType(); - } else { + } else if (const DecltypeType *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; }
Index: unittests/clangd/XRefsTests.cpp =================================================================== --- unittests/clangd/XRefsTests.cpp +++ unittests/clangd/XRefsTests.cpp @@ -1006,6 +1006,14 @@ )cpp", "int", }, + { + R"cpp(// More compilcated structured types. + ^auto main() -> int { + return 0; + } + )cpp", + "int", + }, }; for (const OneTest &Test : Tests) { Index: clangd/XRefs.cpp =================================================================== --- clangd/XRefs.cpp +++ clangd/XRefs.cpp @@ -605,6 +605,7 @@ // 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 @@ const AutoType *AT = D->getReturnType()->getContainedAutoType(); if (AT && !AT->getDeducedType().isNull()) { DeducedType = AT->getDeducedType(); - } else { + } else if (const DecltypeType *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; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits