Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clangd crashes due to toHalfOpenFileRange assertion #113

Closed
jvikstrom opened this issue Jul 31, 2019 · 1 comment
Closed

Clangd crashes due to toHalfOpenFileRange assertion #113

jvikstrom opened this issue Jul 31, 2019 · 1 comment
Assignees
Milestone

Comments

@jvikstrom
Copy link

@jvikstrom jvikstrom commented Jul 31, 2019

Reproduce (just trigger a code complete if it doesn't crash immediately):

#include "gmock/gmock.h"

void checkHighlightings(llvm::StringRef Code) {
  EXPECT_THAT(true, aaa)
   << "Inputs is:\n" << Code;
}

Stack trace

clangd: /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/SourceCode.cpp:315: clang::SourceRange clang::clangd::getTokenFileRange(clang::SourceLocation, const clang::SourceManager&, const clang::LangOptions&): Assertion `!FileRange.getEnd().isFileID() && "Both Begin and End should be MacroIDs."' failed.
I[16:21:50.189] --> reply:textDocument/signatureHelp(29) 238 ms
I[16:21:50.193] SigHelp: requested docs for 1 symbols from the index, got 0 symbols with non-empty docs in the response
I[16:21:50.194] --> reply:textDocument/signatureHelp(26) 737 ms
I[16:21:50.332] <-- textDocument/didChange
I[16:21:50.332] <-- $/cancelRequest
I[16:21:50.373] --> textDocument/publishDiagnostics
I[16:21:50.374] --> textDocument/clangd.fileStatus
 #0 0x00005584f8be615a llvm::sys::PrintStackTrace(llvm::raw_ostream&) /usr/local/google/home/jvikstrom/llvm-project/llvm/lib/Support/Unix/Signals.inc:537:0
 #1 0x00005584f8be40e4 llvm::sys::RunSignalHandlers() /usr/local/google/home/jvikstrom/llvm-project/llvm/lib/Support/Signals.cpp:68:0
 #2 0x00005584f8be4212 SignalHandler(int) /usr/local/google/home/jvikstrom/llvm-project/llvm/lib/Support/Unix/Signals.inc:385:0
 #3 0x00007f9de631b3a0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x123a0)
 #4 0x00007f9de55c7cfb raise (/lib/x86_64-linux-gnu/libc.so.6+0x36cfb)
 #5 0x00007f9de55b28ad abort (/lib/x86_64-linux-gnu/libc.so.6+0x218ad)
 #6 0x00007f9de55b277f (/lib/x86_64-linux-gnu/libc.so.6+0x2177f)
 #7 0x00007f9de55c0542 (/lib/x86_64-linux-gnu/libc.so.6+0x2f542)
 #8 0x00005584f8f8f2fc clang::SourceLocation::getLocWithOffset(int) const /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/Basic/SourceLocation.h:133:0
 #9 0x00005584f8f8f2fc getLocForTokenBegin /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/SourceCode.cpp:277:0
#10 0x00005584f8f8f2fc toTokenRange /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/SourceCode.cpp:284:0
#11 0x00005584f8f8f2fc clang::clangd::getTokenFileRange(clang::SourceLocation, clang::SourceManager const&, clang::LangOptions const&) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/SourceCode.cpp:321:0
#12 0x00005584f8f8fc70 clang::clangd::toHalfOpenFileRange(clang::SourceManager const&, clang::LangOptions const&, clang::SourceRange) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/SourceCode.cpp:339:0
#13 0x00005584f8f6d6d8 clang::clangd::(anonymous namespace)::SelectionVisitor::claimRange(clang::SourceRange) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:314:0
#14 0x00005584f8f6db48 clang::clangd::(anonymous namespace)::SelectionVisitor::pop() /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:273:0
#15 0x00005584f8f707f6 dataTraverseStmtPost /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:160:0
#16 0x00005584f8f707f6 clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseStmt(clang::Stmt*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*> > > >*) (.part.4076) /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:645:0
#17 0x00005584f8f7cbab TraverseStmt /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:628:0
#18 0x00005584f8f7cbab clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseFunctionHelper(clang::FunctionDecl*) /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:2031:0
#19 0x00005584f8f6e74d clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseDecl(clang::Decl*) (.part.4072) /usr/local/google/home/jvikstrom/llvm-project/build/tools/clang/include/clang/AST/DeclNodes.inc:395:0
#20 0x00005584f8f7027b TraverseDecl /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:207:0
#21 0x00005584f8f7027b operator() /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:136:0
#22 0x00005584f8f7027b traverseNode<clang::Decl, clang::clangd::(anonymous namespace)::SelectionVisitor::TraverseDecl(clang::Decl*)::<lambda()> > /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:206:0
#23 0x00005584f8f7027b clang::clangd::(anonymous namespace)::SelectionVisitor::TraverseDecl(clang::Decl*) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:136:0
#24 0x00005584f8f702e4 clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseDeclContextHelper(clang::DeclContext*) (.part.4073) /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:1393:0
#25 0x00005584f8f6e769 TraverseNamespaceDecl /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:1509:0
#26 0x00005584f8f6e769 clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseDecl(clang::Decl*) (.part.4072) /usr/local/google/home/jvikstrom/llvm-project/build/tools/clang/include/clang/AST/DeclNodes.inc:105:0
#27 0x00005584f8f7027b TraverseDecl /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:207:0
#28 0x00005584f8f7027b operator() /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:136:0
#29 0x00005584f8f7027b traverseNode<clang::Decl, clang::clangd::(anonymous namespace)::SelectionVisitor::TraverseDecl(clang::Decl*)::<lambda()> > /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:206:0
#30 0x00005584f8f7027b clang::clangd::(anonymous namespace)::SelectionVisitor::TraverseDecl(clang::Decl*) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:136:0
#31 0x00005584f8f702e4 clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseDeclContextHelper(clang::DeclContext*) (.part.4073) /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:1393:0
#32 0x00005584f8f6e769 TraverseNamespaceDecl /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:1509:0
#33 0x00005584f8f6e769 clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseDecl(clang::Decl*) (.part.4072) /usr/local/google/home/jvikstrom/llvm-project/build/tools/clang/include/clang/AST/DeclNodes.inc:105:0
#34 0x00005584f8f7027b TraverseDecl /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:207:0
#35 0x00005584f8f7027b operator() /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:136:0
#36 0x00005584f8f7027b traverseNode<clang::Decl, clang::clangd::(anonymous namespace)::SelectionVisitor::TraverseDecl(clang::Decl*)::<lambda()> > /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:206:0
#37 0x00005584f8f7027b clang::clangd::(anonymous namespace)::SelectionVisitor::TraverseDecl(clang::Decl*) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:136:0
#38 0x00005584f8f702e4 clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseDeclContextHelper(clang::DeclContext*) (.part.4073) /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:1393:0
#39 0x00005584f8f6e769 TraverseNamespaceDecl /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:1509:0
#40 0x00005584f8f6e769 clang::RecursiveASTVisitor<clang::clangd::(anonymous namespace)::SelectionVisitor>::TraverseDecl(clang::Decl*) (.part.4072) /usr/local/google/home/jvikstrom/llvm-project/build/tools/clang/include/clang/AST/DeclNodes.inc:105:0
#41 0x00005584f8f7aa4f traverseNode<clang::Decl, clang::clangd::(anonymous namespace)::SelectionVisitor::TraverseDecl(clang::Decl*)::<lambda()> > /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:207:0
#42 0x00005584f8f7aa4f TraverseDecl /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:136:0
#43 0x00005584f8f7aa4f TraverseAST /usr/local/google/home/jvikstrom/llvm-project/clang/include/clang/AST/RecursiveASTVisitor.h:183:0
#44 0x00005584f8f7aa4f collect /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:105:0
#45 0x00005584f8f7aa4f clang::clangd::SelectionTree::SelectionTree(clang::ASTContext&, unsigned int, unsigned int) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Selection.cpp:431:0
#46 0x00005584f9039940 clang::clangd::ParsedAST::getSourceManager() /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/ClangdUnit.h:100:0
#47 0x00005584f9039940 clang::clangd::Tweak::Selection::Selection(clang::clangd::ParsedAST&, unsigned int, unsigned int) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/refactor/Tweak.cpp:45:0
#48 0x00005584f8edce13 _ZN4llvm8ExpectedIN5clang6clangd5Tweak9SelectionEEC4IS4_EEOT_PNSt9enable_ifIXsrSt14is_convertibleIS7_S4_E5valueEvE4typeE /usr/local/google/home/jvikstrom/llvm-project/llvm/include/llvm/Support/Error.h:480:0
#49 0x00005584f8edce13 clang::clangd::tweakSelection(clang::clangd::Range const&, clang::clangd::InputsAndAST const&) /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/ClangdServer.cpp:363:0
#50 0x00005584f8ee6da4 llvm::Expected<clang::clangd::Tweak::Selection>::operator bool() /usr/local/google/home/jvikstrom/llvm-project/llvm/include/llvm/Support/Error.h:526:0
#51 0x00005584f8ee6da4 operator() /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/ClangdServer.cpp:373:0
#52 0x00005584f8ee6da4 CallImpl<0, 1, llvm::Expected<clang::clangd::InputsAndAST> > /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Function.h:54:0
#53 0x00005584f8ee6da4 operator()<llvm::Expected<clang::clangd::InputsAndAST> > /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Function.h:69:0
#54 0x00005584f8ee6da4 void llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>::CallImpl<clang::clangd::ForwardBinder<clang::clangd::ClangdServer::enumerateTweaks(llvm::StringRef, clang::clangd::Range, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::ClangdServer::TweakRef, std::allocator<clang::clangd::ClangdServer::TweakRef> > >)>)::'lambda'(llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::ClangdServer::TweakRef, std::allocator<clang::clangd::ClangdServer::TweakRef> > >)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, llvm::Expected<clang::clangd::InputsAndAST>), llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::ClangdServer::TweakRef, std::allocator<clang::clangd::ClangdServer::TweakRef> > >)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(void*, llvm::Expected<clang::clangd::InputsAndAST>&) /usr/local/google/home/jvikstrom/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:157:0
#55 0x00005584f8fabe1b clang::clangd::(anonymous namespace)::ASTWorker::runWithAST(llvm::StringRef, llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>)::'lambda'(llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>)::operator()(llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>) const /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/TUScheduler.cpp:533:0
#56 0x00005584f8fac16d CallImpl<0> /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Function.h:54:0
#57 0x00005584f8fac16d operator()<> /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/Function.h:69:0
#58 0x00005584f8fac16d void llvm::unique_function<void ()>::CallImpl<clang::clangd::ForwardBinder<clang::clangd::(anonymous namespace)::ASTWorker::runWithAST(llvm::StringRef, llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>)::'lambda'(llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>), llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)> > >(void*) /usr/local/google/home/jvikstrom/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:157:0
#59 0x00005584f8fa6376 clang::clangd::(anonymous namespace)::ASTWorker::run() /usr/local/google/home/jvikstrom/llvm-project/clang-tools-extra/clangd/TUScheduler.cpp:685:0
#60 0x00005584f8f9bd65 llvm::PointerIntPair<llvm::PointerUnion<llvm::unique_function<void ()>::TrivialCallback*, llvm::unique_function<void ()>::NonTrivialCallbacks*>, 1u, bool, llvm::PointerLikeTypeTraits<llvm::PointerUnion<llvm::unique_function<void ()>::TrivialCallback*, llvm::unique_fu[Error - 4:21:50 PM] Connection to server got closed. Server will not be restarted.
[Error - 4:21:50 PM] Request textDocument/codeAction failed.
@sureyeaah
Copy link

@sureyeaah sureyeaah commented Aug 1, 2019

Hmm, it seems like crashes for EXPECT_THAT(true, true) as well.

@sureyeaah sureyeaah changed the title Clangd crashes on undefined symbols in macros Clangd crashes due to toHalfOpenFileRange assertion Aug 1, 2019
@ilya-biryukov ilya-biryukov added this to the 9.0 milestone Aug 6, 2019
llvm-git-migration pushed a commit to llvm/llvm-project that referenced this issue Aug 6, 2019
Summary:
- Added new function that gets Expansion range with both ends in the same file.
- Fixes the crash at clangd/clangd#113

Subscribers: ilya-biryukov, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D65754

llvm-svn: 368058
@sureyeaah sureyeaah closed this Aug 6, 2019
chapuni pushed a commit to llvm-project/llvm-project-20170507 that referenced this issue Aug 6, 2019
Summary:
- Added new function that gets Expansion range with both ends in the same file.
- Fixes the crash at clangd/clangd#113

Subscribers: ilya-biryukov, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D65754
chapuni pushed a commit to llvm-project/llvm-project-submodule that referenced this issue Aug 6, 2019
Summary:
- Added new function that gets Expansion range with both ends in the same file.
- Fixes the crash at clangd/clangd#113

Subscribers: ilya-biryukov, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D65754
llvm-git-migration pushed a commit to llvm/llvm-project that referenced this issue Aug 9, 2019
------------------------------------------------------------------------
r368058 | sureyeaah | 2019-08-06 19:01:12 +0200 (Tue, 06 Aug 2019) | 11 lines

Fixed toHalfOpenFileRange assertion fail

Summary:
- Added new function that gets Expansion range with both ends in the same file.
- Fixes the crash at clangd/clangd#113

Subscribers: ilya-biryukov, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D65754
------------------------------------------------------------------------

llvm-svn: 368407
dtzWill pushed a commit to llvm-mirror/clang-tools-extra that referenced this issue Aug 9, 2019
------------------------------------------------------------------------
r368058 | sureyeaah | 2019-08-06 19:01:12 +0200 (Tue, 06 Aug 2019) | 11 lines

Fixed toHalfOpenFileRange assertion fail

Summary:
- Added new function that gets Expansion range with both ends in the same file.
- Fixes the crash at clangd/clangd#113

Subscribers: ilya-biryukov, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D65754
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/branches/release_90@368407 91177308-0d34-0410-b5e6-96231b3b80d8
shrouxm pushed a commit to sourcegraph/lsif-clang that referenced this issue Jul 12, 2020
Summary:
- Added new function that gets Expansion range with both ends in the same file.
- Fixes the crash at clangd/clangd#113

Subscribers: ilya-biryukov, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D65754

llvm-svn: 368058
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants