DmitryPolukhin created this revision.
DmitryPolukhin added reviewers: bruno, troyj, arphaman, vsapsai, jansvoboda11.
DmitryPolukhin added a project: clang.
Herald added a subscriber: kadircet.
Herald added a project: All.
DmitryPolukhin requested review of this revision.
Herald added a subscriber: ilya-biryukov.

The issue was intrduced in D135801 <https://reviews.llvm.org/D135801>. When 
there is no header map in the
SearchDirs, out out of bounds values assigned to FirstNonHeaderMapSearchDirIdx.

Reproduced crash on clangd:
V[10:30:24.298] Building first preamble for <stripped> version 1
I[10:31:26.018] Indexing c++20 standard library in the context of <stripped>
clangd: llvm-project/clang/include/clang/Lex/HeaderSearch.h:817: 
ConstSearchDirIterator clang::HeaderSearch::search_dir_nth(size_t) const: 
Assertion `n < SearchDirs.size()' failed.
`bt
(lldb) bt

- thread #1, name = 'clangd.main', stop reason = hit program assert
  - frame #0: 0x00007ffff584eacf libc.so.6`raise + 271 frame #1: 
0x00007ffff5821ea5 libc.so.6`abort + 295 frame #2: 0x00007ffff5821d79 
libc.so.6`__assert_fail_base.cold.0 + 15 frame #3: 0x00007ffff5847426 
libc.so.6`__assert_fail + 70 frame #4: 0x00005555597ec12d 
clangd`clang::HeaderSearch::search_dir_nth(this=0x00005555679d1500, n=1) const 
at HeaderSearch.h:817:5 frame #5: 0x00005555597e47c2 
clangd`clang::HeaderSearch::LookupFile(this=0x00005555679d1500, Filename=(Data 
= "vector>)\n#error Mandatory header <vector> not found in standard 
library!\n#endif\n#if __has_include(<codecvt>)\n#include <codecvt>\n#endif\n#if 
__has_include(<cwchar>)\n#include <cwchar>\n#endif\n#if 
__has_include(<cuchar>)\n#include <cuchar>\n#endif\n#if 
__has_include(<cstddef>)\n#include <cstddef>\n#endif\n#if 
__has_include(<cstdlib>)\n#include <cstdlib>\n#endif\n#if 
__has_include(<cstring>)\n#include <cstring>\n#endif\n#if 
__has_include(<ctime>)\n#include <ctime>\n#endif\n#if 
__has_include(<cstdio>)\n#include <cstdio>\n#endif\n#if 
__has_include(<stddef.h>)\n#include <stddef.h>\n#endif\n#if 
__has_include(<stdlib.h>)\n#include <stdlib.h>\n#endif\n#if 
__has_include(<string.h>)\n#include <string.h>\n#endif\n#if 
__has_include(<wchar.h>)\n#include <wchar.h>\n#endif\n#if 
__has_include(<uchar.h>)\n#include <uchar.h>\n#endif\n#if 
__has_include(<time.h>)\n#include <time.h>\n#endif\n#if 
__has_include(<stdio.h>)\n#include <stdio.h>\n#endif\n#if 
__has_include(<type_traits>)\n#include <type_traits>\n#endif\n#if 
__has_include(<functional>)\n#include <functional>\n#endif\n#"..., Length = 6), 
IncludeLoc=(ID = 21), isAngled=true, FromDir=clang::ConstSearchDirIterator @ 
0x00007fffffff4490, CurDirArg=0x00007fffffff4968, 
Includers=ArrayRef<std::pair<const clang::FileEntry *, const 
clang::DirectoryEntry *> > @ 0x00007fffffff44a0, SearchPath=0x0000000000000000, 
RelativePath=0x0000000000000000, RequestingModule=0x0000000000000000, 
SuggestedModule=0x0000000000000000, IsMapped=0x0000000000000000, 
IsFrameworkFound=0x0000000000000000, SkipCache=false, BuildSystemModule=false, 
OpenFile=true, CacheFailures=true) at HeaderSearch.cpp:1031:16 frame #6: 
0x000055555979490c 
clangd`clang::Preprocessor::LookupFile(this=0x0000555567d44f00, FilenameLoc=(ID 
= 21), Filename=(Data = "vector>)\n#error Mandatory header <vector> not found 
in standard library!\n#endif\n#if __has_include(<codecvt>)\n#include 
<codecvt>\n#endif\n#if __has_include(<cwchar>)\n#include <cwchar>\n#endif\n#if 
__has_include(<cuchar>)\n#include <cuchar>\n#endif\n#if 
__has_include(<cstddef>)\n#include <cstddef>\n#endif\n#if 
__has_include(<cstdlib>)\n#include <cstdlib>\n#endif\n#if 
__has_include(<cstring>)\n#include <cstring>\n#endif\n#if 
__has_include(<ctime>)\n#include <ctime>\n#endif\n#if 
__has_include(<cstdio>)\n#include <cstdio>\n#endif\n#if 
__has_include(<stddef.h>)\n#include <stddef.h>\n#endif\n#if 
__has_include(<stdlib.h>)\n#include <stdlib.h>\n#endif\n#if 
__has_include(<string.h>)\n#include <string.h>\n#endif\n#if 
__has_include(<wchar.h>)\n#include <wchar.h>\n#endif\n#if 
__has_include(<uchar.h>)\n#include <uchar.h>\n#endif\n#if 
__has_include(<time.h>)\n#include <time.h>\n#endif\n#if 
__has_include(<stdio.h>)\n#include <stdio.h>\n#endif\n#if 
__has_include(<type_traits>)\n#include <type_traits>\n#endif\n#if 
__has_include(<functional>)\n#include <functional>\n#endif\n#"..., Length = 6), 
isAngled=true, FromDir=clang::ConstSearchDirIterator @ 0x00007fffffff49f0, 
FromFile=0x0000000000000000, CurDirArg=0x0000000000000000, 
SearchPath=0x0000000000000000, RelativePath=0x0000000000000000, 
SuggestedModule=0x0000000000000000, IsMapped=0x0000000000000000, 
IsFrameworkFound=0x0000000000000000, SkipCache=false, OpenFile=true, 
CacheFailures=true) at PPDirectives.cpp:1014:40 frame #7: 0x0000555559812355 
clangd`EvaluateHasIncludeCommon(Tok=0x00007fffffff6830, II=0x000055556721c008, 
PP=0x0000555567d44f00, LookupFrom=clang::ConstSearchDirIterator @ 
0x00007fffffff4c98, LookupFromFile=0x0000000000000000) at 
PPMacroExpansion.cpp:1253:10 frame #8: 0x0000555559811e17 
clangd`clang::Preprocessor::EvaluateHasInclude(this=0x0000555567d44f00, 
Tok=0x00007fffffff6830, II=0x000055556721c008) at PPMacroExpansion.cpp:1269:10 
frame #9: 0x000055555980f85d 
clangd`clang::Preprocessor::ExpandBuiltinMacro(this=0x0000555567d44f00, 
Tok=0x00007fffffff6830) at PPMacroExpansion.cpp:1802:15 frame #10: 
0x000055555980ddca 
clangd`clang::Preprocessor::HandleMacroExpandedIdentifier(this=0x0000555567d44f00,
 Identifier=0x00007fffffff6830, M=0x00007fffffff5c50) at 
PPMacroExpansion.cpp:493:5 frame #11: 0x000055555983ba8b 
clangd`clang::Preprocessor::HandleIdentifier(this=0x0000555567d44f00, 
Identifier=0x00007fffffff6830) at Preprocessor.cpp:825:18 frame #12: 
0x00005555597765f5 
clangd`clang::Lexer::LexIdentifierContinue(this=0x0000555567d3a410, 
Result=0x00007fffffff6830, CurPtr="(<vector>)\n#error Mandatory header <vector> 
not found in standard library!\n#endif\n#if __has_include(<codecvt>)\n#include 
<codecvt>\n#endif\n#if __has_include(<cwchar>)\n#include <cwchar>\n#endif\n#if 
__has_include(<cuchar>)\n#include <cuchar>\n#endif\n#if 
__has_include(<cstddef>)\n#include <cstddef>\n#endif\n#if 
__has_include(<cstdlib>)\n#include <cstdlib>\n#endif\n#if 
__has_include(<cstring>)\n#include <cstring>\n#endif\n#if 
__has_include(<ctime>)\n#include <ctime>\n#endif\n#if 
__has_include(<cstdio>)\n#include <cstdio>\n#endif\n#if 
__has_include(<stddef.h>)\n#include <stddef.h>\n#endif\n#if 
__has_include(<stdlib.h>)\n#include <stdlib.h>\n#endif\n#if 
__has_include(<string.h>)\n#include <string.h>\n#endif\n#if 
__has_include(<wchar.h>)\n#include <wchar.h>\n#endif\n#if 
__has_include(<uchar.h>)\n#include <uchar.h>\n#endif\n#if 
__has_include(<time.h>)\n#include <time.h>\n#endif\n#if 
__has_include(<stdio.h>)\n#include <stdio.h>\n#endif\n#if 
__has_include(<type_traits>)\n#include <type_traits>\n#endif\n#if 
__has_include(<functional>)\n#include <functional>\n#endif"...) at 
Lexer.cpp:1900:16 frame #13: 0x000055555977cb2c 
clangd`clang::Lexer::LexTokenInternal(this=0x0000555567d3a410, 
Result=0x00007fffffff6830, TokAtPhysicalStartOfLine=false) at Lexer.cpp:3873:12 
frame #14: 0x0000555559779dec clangd`clang::Lexer::Lex(this=0x0000555567d3a410, 
Result=0x00007fffffff6830) at Lexer.cpp:3576:24 frame #15: 0x000055555983bdef 
clangd`clang::Preprocessor::Lex(this=0x0000555567d44f00, 
Result=0x00007fffffff6830) at Preprocessor.cpp:886:33 frame #16: 
0x00005555597fe055 
clangd`clang::Preprocessor::LexNonComment(this=0x0000555567d44f00, 
Result=0x00007fffffff6830) at Preprocessor.h:1758:7 frame #17: 
0x00005555597fba74 clangd`EvaluateValue(Result=0x00007fffffff6808, 
PeekTok=0x00007fffffff6830, DT=0x00007fffffff67f0, ValueLive=true, 
PP=0x0000555567d44f00) at PPExpressions.cpp:513:8 frame #18: 0x00005555597fa338 
clangd`clang::Preprocessor::EvaluateDirectiveExpression(this=0x0000555567d44f00,
 IfNDefMacro=0x00007fffffff6938) at PPExpressions.cpp:892:7 frame #19: 
0x0000555559797018 
clangd`clang::Preprocessor::HandleIfDirective(this=0x0000555567d44f00, 
IfToken=0x0000555568032160, HashToken=0x00007fffffff6b50, 
ReadAnyTokensBeforeDirective=false) at PPDirectives.cpp:3303:35 frame #20: 
0x00005555597963d2 
clangd`clang::Preprocessor::HandleDirective(this=0x0000555567d44f00, 
Result=0x0000555568032160) at PPDirectives.cpp:1204:14 frame #21: 
0x000055555977e424 
clangd`clang::Lexer::LexTokenInternal(this=0x0000555567d3a410, 
Result=0x0000555568032160, TokAtPhysicalStartOfLine=true) at Lexer.cpp:4362:7 
frame #22: 0x0000555559779dec clangd`clang::Lexer::Lex(this=0x0000555567d3a410, 
Result=0x0000555568032160) at Lexer.cpp:3576:24 frame #23: 0x000055555983bdef 
clangd`clang::Preprocessor::Lex(this=0x0000555567d44f00, 
Result=0x0000555568032160) at Preprocessor.cpp:886:33 frame #24: 
0x000055555da8574e clangd`clang::Parser::ConsumeToken(this=0x0000555568032150) 
at Parser.h:503:8 frame #25: 0x000055555da7c724 
clangd`clang::Parser::Initialize(this=0x0000555568032150) at Parser.cpp:567:3 
frame #26: 0x000055555da78175 clangd`clang::ParseAST(S=0x0000555567c6e920, 
PrintStats=false, SkipFunctionBodies=true) at ParseAST.cpp:155:7 frame #27: 
0x000055555adcd686 
clangd`clang::ASTFrontendAction::ExecuteAction(this=0x000055556068c7e0) at 
FrontendAction.cpp:1168:3 frame #28: 0x000055555adcd0ac 
clangd`clang::FrontendAction::Execute(this=0x000055556068c7e0) at 
FrontendAction.cpp:1058:8 frame #29: 0x000055555ba4b5c3 
clangd`clang::clangd::indexStandardLibrary(HeaderSources=(Data = "#if 
!__has_include(<vector>)\n#error Mandatory header <vector> not found in 
standard library!\n#endif\n#if __has_include(<codecvt>)\n#include 
<codecvt>\n#endif\n#if __has_include(<cwchar>)\n#include <cwchar>\n#endif\n#if 
__has_include(<cuchar>)\n#include <cuchar>\n#endif\n#if 
__has_include(<cstddef>)\n#include <cstddef>\n#endif\n#if 
__has_include(<cstdlib>)\n#include <cstdlib>\n#endif\n#if 
__has_include(<cstring>)\n#include <cstring>\n#endif\n#if 
__has_include(<ctime>)\n#include <ctime>\n#endif\n#if 
__has_include(<cstdio>)\n#include <cstdio>\n#endif\n#if 
__has_include(<stddef.h>)\n#include <stddef.h>\n#endif\n#if 
__has_include(<stdlib.h>)\n#include <stdlib.h>\n#endif\n#if 
__has_include(<string.h>)\n#include <string.h>\n#endif\n#if 
__has_include(<wchar.h>)\n#include <wchar.h>\n#endif\n#if 
__has_include(<uchar.h>)\n#include <uchar.h>\n#endif\n#if 
__has_include(<time.h>)\n#include <time.h>\n#endif\n#if 
__has_include(<stdio.h>)\n#include <stdio.h>\n#endif\n#if 
__has_include(<type_traits>)\n#include <type_traits>\n#endif\n#if 
__has_include(<functional>)\n#include <"..., Length = 6974), CI=nullptr, 
Loc=0x00007fffffff8398, TFS=0x00007fffffffe478) at StdLib.cpp:248:33 frame #30: 
0x000055555ba4c181 
clangd`clang::clangd::indexStandardLibrary(Invocation=nullptr, 
Loc=0x00007fffffff8398, TFS=0x00007fffffffe478) at StdLib.cpp:271:10 frame #31: 
0x000055555b14303b clangd`clang::clangd::(anonymous 
namespace)::UpdateIndexCallbacks::indexStdlib(this=0x00007fffffff8098)::'lambda'()::operator()()
 at ClangdServer.cpp:94:20 frame #32: 0x000055555b142e61 
clangd`clang::clangd::(anonymous 
namespace)::UpdateIndexCallbacks::indexStdlib(this=0x000055555f44ccc0, 
CI=0x000055555f455490, Loc=StdLibLocation @ 0x00007fffffff8468) at 
ClangdServer.cpp:102:7 frame #33: 0x000055555b1429b2 
clangd`clang::clangd::(anonymous 
namespace)::UpdateIndexCallbacks::onPreambleAST(this=0x000055555f44ccc0, 
Path=(Data = "<stripped>", Length = 71), Version=(Data = "1", Length = 1), 
CI=0x000055555f455490, Ctx=0x000055555f573190, PP=0x000055555f4834a0, 
CanonIncludes=0x00007fffffff9350) at ClangdServer.cpp:75:9 frame #34: 
0x000055555b68a74b clangd`clang::clangd::(anonymous 
namespace)::PreambleThread::build(clang::clangd::(anonymous 
namespace)::PreambleThread::Request)::$_0::operator()(this=0x000055555f4b2910, 
Ctx=0x000055555f573190, PP=0x000055555f4834a0, 
CanonIncludes=0x00007fffffff9350) const at TUScheduler.cpp:1088:19 frame #35: 
0x000055555b68a69d clangd`void std::__invoke_impl<void, 
clang::clangd::(anonymous 
namespace)::PreambleThread::build(clang::clangd::(anonymous 
namespace)::PreambleThread::Request)::$_0&, clang::ASTContext&, 
clang::Preprocessor&, clang::clangd::CanonicalIncludes 
const&>((null)=__invoke_other @ 0x00007fffffff85b8, __f=0x000055555f4b2910, 
__args=0x000055555f573190, __args=0x000055555f4834a0, 
__args=0x00007fffffff9350) at invoke.h:61:14 frame #36: 0x000055555b68a63d 
clangd`std::enable_if<is_invocable_r_v<void, clang::clangd::(anonymous 
namespace)::PreambleThread::build(clang::clangd::(anonymous 
namespace)::PreambleThread::Request)::$_0&, clang::ASTContext&, 
clang::Preprocessor&, clang::clangd::CanonicalIncludes const&>, void>::type 
std::__invoke_r<void, clang::clangd::(anonymous 
namespace)::PreambleThread::build(clang::clangd::(anonymous 
namespace)::PreambleThread::Request)::$_0&, clang::ASTContext&, 
clang::Preprocessor&, clang::clangd::CanonicalIncludes 
const&>(__fn=0x000055555f4b2910, __args=0x000055555f573190, 
__args=0x000055555f4834a0, __args=0x00007fffffff9350) at invoke.h:111:2 frame 
#37: 0x000055555b68a525 clangd`std::_Function_handler<void (clang::ASTContext&, 
clang::Preprocessor&, clang::clangd::CanonicalIncludes const&), 
clang::clangd::(anonymous 
namespace)::PreambleThread::build(clang::clangd::(anonymous 
namespace)::PreambleThread::Request)::$_0>::_M_invoke(__functor=0x00007fffffff9280,
 __args=0x000055555f573190, __args=0x000055555f4834a0, 
__args=0x00007fffffff9350) at std_function.h:290:9 frame #38: 
0x000055555b4a19bd clangd`std::function<void (clang::ASTContext&, 
clang::Preprocessor&, clang::clangd::CanonicalIncludes 
const&)>::operator()(this=0x00007fffffff9280, __args=0x000055555f573190, 
__args=0x000055555f4834a0, __args=0x00007fffffff9350) const at 
std_function.h:591:9 frame #39: 0x000055555b49a0f6 
clangd`clang::clangd::(anonymous 
namespace)::CppFilePreambleCallbacks::AfterExecute(this=0x00007fffffff9268, 
CI=0x000055555f4bf9f0) at Preamble.cpp:97:7 frame #40: 0x000055555ae012c5 
clangd`clang::PrecompiledPreamble::Build(Invocation=0x00007fffffff9d10, 
MainFileBuffer=0x000055555f4b0a30, Bounds=(Size = 133, 
PreambleEndsAtStartOfLine = true), Diagnostics=0x000055555f4b0ac0, 
VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x00007fffffff90f8, 
PCHContainerOps=nullptr, StoreInMemory=false, StoragePath=(Data = 
0x0000000000000000, Length = 0), Callbacks=0x00007fffffff9268) at 
PrecompiledPreamble.cpp:539:13 frame #41: 0x000055555b4973a8 
clangd`clang::clangd::buildPreamble(FileName=(Data = "<stripped>", Length = 
71), CI=CompilerInvocation @ 0x00007fffffff9d10, Inputs=0x00007fffffffab78, 
StoreInMemory=false, PreambleCallback=clang::clangd::PreambleParsedCallback @ 
0x00007fffffff9cf0, Stats=0x00007fffffffaa10) at Preamble.cpp:644:24 frame #42: 
0x000055555b689692 clangd`clang::clangd::(anonymous 
namespace)::PreambleThread::build(this=0x000055555f4b99b8, Req=Request @ 
0x00007fffffffab70) at TUScheduler.cpp:1084:17 frame #43: 0x000055555b68ee91 
clangd`clang::clangd::(anonymous 
namespace)::PreambleThread::update(this=0x000055555f4b99b8, CI=<unavailable>, 
PI=ParseInputs @ 0x00007fffffffb000, CIDiags=size=0, WantDiags=Yes) at 
TUScheduler.cpp:444:7 frame #44: 0x000055555b68ec14 
clangd`clang::clangd::(anonymous 
namespace)::ASTWorker::update(clang::clangd::ParseInputs, 
clang::clangd::WantDiagnostics, bool)::$_7::operator()(this=0x000055555f44d260) 
at TUScheduler.cpp:944:18 frame #45: 0x000055555b68e48d clangd`void 
llvm::detail::UniqueFunctionBase<void>::CallImpl<clang::clangd::(anonymous 
namespace)::ASTWorker::update(clang::clangd::ParseInputs, 
clang::clangd::WantDiagnostics, bool)::$_7>(CallableAddr=0x000055555f44d260) at 
FunctionExtras.h:221:12 frame #46: 0x000055555b1a15bf 
clangd`llvm::unique_function<void ()>::operator()(this=0x00007fffffffc3f0) at 
FunctionExtras.h:383:12 frame #47: 0x000055555b694435 clangd`void 
llvm::function_ref<void ()>::callback_fn<llvm::unique_function<void 
()>>(callable=140737488339952) at STLFunctionalExtras.h:45:12 frame #48: 
0x0000555558aba659 clangd`llvm::function_ref<void 
()>::operator()(this=0x00007fffffffbcb0) const at STLFunctionalExtras.h:68:12 
frame #49: 0x000055555b685f34 clangd`clang::clangd::(anonymous 
namespace)::ASTWorker::runTask(this=0x000055555f4b9510, Name=(Data = "Update", 
Length = 6), Task=function_ref<void ()> @ 0x00007fffffffbcb0) at 
TUScheduler.cpp:1328:3 frame #50: 0x000055555b68d6c1 
clangd`clang::clangd::(anonymous 
namespace)::ASTWorker::startTask(this=0x000055555f4b9510, Name=(Data = 
"Update", Length = 6), Task=unique_function<void ()> @ 0x00007fffffffc3f0, 
Update= Has Value=true , Invalidation=NoInvalidation) at TUScheduler.cpp:1337:5 
frame #51: 0x000055555b6804f3 clangd`clang::clangd::(anonymous 
namespace)::ASTWorker::update(this=0x000055555f4b9510, Inputs=ParseInputs @ 
0x00007fffffffc610, WantDiags=Yes, ContentChanged=true) at 
TUScheduler.cpp:965:3 frame #52: 0x000055555b680043 
clangd`clang::clangd::TUScheduler::update(this=0x00007fffffffdbe8, File=(Data = 
"<stripped>", Length = 71), Inputs=ParseInputs @ 0x00007fffffffc7e8, 
WantDiags=Yes) at TUScheduler.cpp:1690:15 frame #53: 0x000055555b13d251 
clangd`clang::clangd::ClangdServer::addDocument(this=0x00007fffffffda98, 
File=(Data = "<stripped>", Length = 71), Contents=(Data = "#include 
\"admarket/libadmarket/AdMarket.h\"\n#include <iosfwd>\n#include 
\"common/crypt/Crypt.h\"\n#include \"common/time/TimeConstants.h\"\n\nusing 
namespace std;\n\nnamespace facebook {\nnamespace admarket {\n\nconst int64_t 
kFbUidSidFbType = 18833;\n\nconst int32_t kAdMarketMinDbId = 51001;\n\nconst 
int32_t kAdmonitorEventDelayedSecs =\n    kSecondsPerHour * 1 + 
kSecondsPerMinute * 45;\n\nconst int32_t kAdmonitorFeedEventDelayedSecs = 
kSecondsPerDay;\nconst int32_t kAdmonitorFlagDelayedSecs = 
kSecondsPerDay;\n\n// Max bid is set to $1000 USD\nconst int32_t 
kAdMarketMaxBidScaledUsd = 1000000;\n\nconst int32_t 
kAdMarketMaxBidScaledNative = 1000000000; // 1e9\n\nconst int32_t 
kAdMarketMaxPriceNative = 1000000000; // 1e9\n\nconst double kCPMScalerUp = 
1000.0;\nconst double kCPMScalerDown = 1.0 / kCPMScalerUp;\n\nconst int64_t 
kFb303Scaling{1000000};\n\nconst int32_t kCorrectedImpScaler = 1000;\n\nconst 
double kMaxPrClickAdjustment = 3.0;\nconst double kMinPrClickAdjustment = 
1e-6;\n\nconst double kMinPrImpression = 1e-6;\nconst double kMinEctr = 
1e-7;\n"..., Length = 1665), Version=(Data = "1", Length = 1), WantDiags=Yes, 
ForceRebuild=false) at ClangdServer.cpp:277:33 frame #54: 0x000055555b090455 
clangd`clang::clangd::ClangdLSPServer::onDocumentDidOpen(this=0x00007fffffffd480,
 Params=0x00007fffffffcc00) at ClangdLSPServer.cpp:665:11 frame #55: 
0x000055555b11b4ac clangd`void 
clang::clangd::LSPBinder::notification<clang::clangd::DidOpenTextDocumentParams,
 clang::clangd::ClangdLSPServer>(this=0x000055555f4e7090, 
RawParams=clang::clangd::LSPBinder::JSON @ 
0x00007fffffffcca0)(clang::clangd::DidOpenTextDocumentParams 
const&))::'lambda'(llvm::json::Value)::operator()(llvm::json::Value) const at 
LSPBinder.h:153:5 frame #56: 0x000055555b11b34a clangd`void 
llvm::detail::UniqueFunctionBase<void, llvm::json::Value>::CallImpl<void 
clang::clangd::LSPBinder::notification<clang::clangd::DidOpenTextDocumentParams,
 clang::clangd::ClangdLSPServer>(llvm::StringLiteral, 
clang::clangd::ClangdLSPServer*, void 
(clang::clangd::ClangdLSPServer::*)(clang::clangd::DidOpenTextDocumentParams 
const&))::'lambda'(llvm::json::Value)>(CallableAddr=0x000055555f4e7090, 
Params=0x00007fffffffcd88) at FunctionExtras.h:221:12 frame #57: 
0x000055555b0c7447 clangd`llvm::unique_function<void 
(llvm::json::Value)>::operator()(this=0x000055555f4e70c8, Params=Value @ 
0x00007fffffffcd88) at FunctionExtras.h:383:12 frame #58: 0x000055555b0c61b5 
clangd`clang::clangd::ClangdLSPServer::MessageHandler::onNotify(this=0x000055555f44a180,
 Method=(Data = "textDocument/didOpen", Length = 20), Params=Value @ 
0x00007fffffffcf20) at ClangdLSPServer.cpp:168:7 frame #59: 0x000055555b44a5ba 
clangd`clang::clangd::(anonymous 
namespace)::JSONTransport::handleMessage(this=0x000055555f443d90, Message=Value 
@ 0x00007fffffffd258, Handler=0x000055555f44a180) at JSONTransport.cpp:196:18 
frame #60: 0x000055555b4494fd clangd`clang::clangd::(anonymous 
namespace)::JSONTransport::loop(this=0x000055555f443d90, 
Handler=0x000055555f44a180) at JSONTransport.cpp:120:16 frame #61: 
0x000055555b095300 
clangd`clang::clangd::ClangdLSPServer::run(this=0x00007fffffffd480) at 
ClangdLSPServer.cpp:1649:25 frame #62: 0x0000555558a33168 clangd`main(argc=8, 
argv=0x00007fffffffebe8) at ClangdMain.cpp:1028:28 frame #63: 
0x00007ffff583ad85 libc.so.6`__libc_start_main + 229 frame #64: 
0x00005555586cf92e clangd`_start + 46

Test Plan:
check-clang


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D146156

Files:
  clang/lib/Lex/HeaderSearch.cpp


Index: clang/lib/Lex/HeaderSearch.cpp
===================================================================
--- clang/lib/Lex/HeaderSearch.cpp
+++ clang/lib/Lex/HeaderSearch.cpp
@@ -378,15 +378,17 @@
   llvm::StringMap<unsigned, llvm::BumpPtrAllocator> Index(SearchDirs.size());
 
   // Iterate over all filename keys and associate them with the index i.
-  unsigned i = 0;
-  for (; i != SearchDirs.size(); ++i) {
+  for (unsigned i = 0; i != SearchDirs.size(); ++i) {
     auto &Dir = SearchDirs[i];
 
     // We're concerned with only the initial contiguous run of header
     // maps within SearchDirs, which can be 99% of SearchDirs when
     // SearchDirs.size() is ~10000.
-    if (!Dir.isHeaderMap())
+    if (!Dir.isHeaderMap()) {
+      SearchDirHeaderMapIndex = std::move(Index);
+      FirstNonHeaderMapSearchDirIdx = i;
       break;
+    }
 
     // Give earlier keys precedence over identical later keys.
     auto Callback = [&](StringRef Filename) {
@@ -394,9 +396,6 @@
     };
     Dir.getHeaderMap()->forEachKey(Callback);
   }
-
-  SearchDirHeaderMapIndex = std::move(Index);
-  FirstNonHeaderMapSearchDirIdx = i;
 }
 
 
//===----------------------------------------------------------------------===//
@@ -1929,7 +1928,7 @@
     llvm::StringRef File, llvm::StringRef WorkingDir, llvm::StringRef MainFile,
     bool *IsSystem) {
   using namespace llvm::sys;
-  
+
   llvm::SmallString<32> FilePath = File;
   // remove_dots switches to backslashes on windows as a side-effect!
   // We always want to suggest forward slashes for includes.


Index: clang/lib/Lex/HeaderSearch.cpp
===================================================================
--- clang/lib/Lex/HeaderSearch.cpp
+++ clang/lib/Lex/HeaderSearch.cpp
@@ -378,15 +378,17 @@
   llvm::StringMap<unsigned, llvm::BumpPtrAllocator> Index(SearchDirs.size());
 
   // Iterate over all filename keys and associate them with the index i.
-  unsigned i = 0;
-  for (; i != SearchDirs.size(); ++i) {
+  for (unsigned i = 0; i != SearchDirs.size(); ++i) {
     auto &Dir = SearchDirs[i];
 
     // We're concerned with only the initial contiguous run of header
     // maps within SearchDirs, which can be 99% of SearchDirs when
     // SearchDirs.size() is ~10000.
-    if (!Dir.isHeaderMap())
+    if (!Dir.isHeaderMap()) {
+      SearchDirHeaderMapIndex = std::move(Index);
+      FirstNonHeaderMapSearchDirIdx = i;
       break;
+    }
 
     // Give earlier keys precedence over identical later keys.
     auto Callback = [&](StringRef Filename) {
@@ -394,9 +396,6 @@
     };
     Dir.getHeaderMap()->forEachKey(Callback);
   }
-
-  SearchDirHeaderMapIndex = std::move(Index);
-  FirstNonHeaderMapSearchDirIdx = i;
 }
 
 //===----------------------------------------------------------------------===//
@@ -1929,7 +1928,7 @@
     llvm::StringRef File, llvm::StringRef WorkingDir, llvm::StringRef MainFile,
     bool *IsSystem) {
   using namespace llvm::sys;
-  
+
   llvm::SmallString<32> FilePath = File;
   // remove_dots switches to backslashes on windows as a side-effect!
   // We always want to suggest forward slashes for includes.
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to