Stacks for getFile() from PCH files look like so: (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 * frame #0: 0x000000010005a1fb clang-cl`clang::FileManager::getFile(this=0x00000001106111f0, Filename=(Data = "/Users/thakis/src/chrome/src/out/gnwin/../../third_party/skia/include/core/SkPoint3.h", Length = 85), openFile=false, CacheFailure=true) at FileManager.cpp:187 frame #1: 0x0000000103c44b2e clang-cl`clang::ASTReader::getInputFile(this=0x000000011104c200, F=0x000000011104fc00, ID=3, Complain=true) at ASTReader.cpp:2120 frame #2: 0x0000000103c5173b clang-cl`clang::ASTReader::ReadControlBlock(this=0x000000011104c200, F=0x000000011104fc00, Loaded=0x00007fff5fbfa130, ImportedBy=0x0000000000000000, ClientLoadCapabilities=0) at ASTReader.cpp:2398 frame #3: 0x0000000103c5381b clang-cl`clang::ASTReader::ReadASTCore(this=0x000000011104c200, FileName=(Data = "obj/third_party/blink/renderer/core/layout/layout_cc.pch", Length = 56), Type=MK_PCH, ImportLoc=(ID = 0), ImportedBy=0x0000000000000000, Loaded=0x00007fff5fbfa130, ExpectedSize=0, ExpectedModTime=0, ExpectedSignature=ASTFileSignature @ 0x00007fff5fbf9d58, ClientLoadCapabilities=0) at ASTReader.cpp:4208 frame #4: 0x0000000103c5fe95 clang-cl`clang::ASTReader::ReadAST(this=0x000000011104c200, FileName=(Data = "obj/third_party/blink/renderer/core/layout/layout_cc.pch", Length = 56), Type=MK_PCH, ImportLoc=(ID = 0), ClientLoadCapabilities=0, Imported=0x0000000000000000) at ASTReader.cpp:3883 frame #5: 0x0000000100a49542 clang-cl`clang::CompilerInstance::createPCHExternalASTSource(Path=(Data = "obj/third_party/blink/renderer/core/layout/layout_cc.pch", Length = 56), Sysroot=(Data = "/", Length = 1), DisablePCHValidation=false, AllowPCHWithCompilerErrors=false, PP=0x0000000111037e18, Context=0x0000000111042200, PCHContainerRdr=0x000000011060d2b0, Extensions=ArrayRef<std::__1::shared_ptr<clang::ModuleFileExtension> > @ 0x00007fff5fbfa430, DependencyFile=0x0000000000000000, DependencyCollectors=ArrayRef<std::__1::shared_ptr<clang::DependencyCollector> > @ 0x00007fff5fbfa448, DeserializationListener=0x0000000000000000, OwnDeserializationListener=false, Preamble=false, UseGlobalModuleIndex=true) at CompilerInstance.cpp:532 frame #6: 0x0000000100a4909b clang-cl`clang::CompilerInstance::createPCHExternalASTSource(this=0x000000011060d000, Path=(Data = "obj/third_party/blink/renderer/core/layout/layout_cc.pch", Length = 56), DisablePCHValidation=false, AllowPCHWithCompilerErrors=false, DeserializationListener=0x0000000000000000, OwnDeserializationListener=false) at CompilerInstance.cpp:490 frame #7: 0x0000000100ada301 clang-cl`clang::FrontendAction::BeginSourceFile(this=0x000000011060eee0, CI=0x000000011060d000, RealInput=0x0000000110614a60) at FrontendAction.cpp:859 frame #8: 0x0000000100a4cdf8 clang-cl`clang::CompilerInstance::ExecuteAction(this=0x000000011060d000, Act=0x000000011060eee0) at CompilerInstance.cpp:953 frame #9: 0x0000000100b5c21f clang-cl`clang::ExecuteCompilerInvocation(Clang=0x000000011060d000) at ExecuteCompilerInvocation.cpp:267 frame #10: 0x0000000100001ac9 clang-cl`cc1_main(Argv=ArrayRef<const char *> @ 0x00007fff5fbfb4c8, Argv0="../../../../llvm-mono-2/out/gn/bin/clang-cl", MainAddr=0x0000000100028110) at cc1_main.cpp:218 frame #11: 0x000000010002999f clang-cl`ExecuteCC1Tool(argv=ArrayRef<const char *> @ 0x00007fff5fbfba78, Tool=(Data = "", Length = 0)) at driver.cpp:309 frame #12: 0x0000000100028a81 clang-cl`main(argc_=409, argv_=0x00007fff5fbfd170) at driver.cpp:381 frame #13: 0x00007fffb015c235 libdyld.dylib`start + 1
(lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 * frame #0: 0x000000010005a1fb clang-cl`clang::FileManager::getFile(this=0x00000001106111f0, Filename=(Data = "/Users/thakis/src/chrome/src/out/gnwin/../../third_party/skia/include/core/SkPoint3.h", Length = 85), openFile=false, CacheFailure=true) at FileManager.cpp:187 frame #1: 0x0000000103c476e3 clang-cl`clang::serialization::reader::HeaderFileInfoTrait::EqualKey(this=0x00007fff5fbf5f80, Key=0x00007fff5fbf6068)::$_1::operator()(clang::serialization::reader::HeaderFileInfoTrait::internal_key_type const&) const at ASTReader.cpp:1723 frame #2: 0x0000000103c4759f clang-cl`clang::serialization::reader::HeaderFileInfoTrait::EqualKey(this=0x0000000113a16c88, a=0x00007fff5fbf6068, b=0x00007fff5fbf6138) at ASTReader.cpp:1726 frame #3: 0x0000000103cd5c1e clang-cl`llvm::OnDiskChainedHashTable<clang::serialization::reader::HeaderFileInfoTrait>::find_hashed(this=0x0000000113a16c70, IKey=0x00007fff5fbf6138, KeyHash=986574196, InfoPtr=0x0000000113a16c88) at OnDiskHashTable.h:390 frame #4: 0x0000000103cd59b8 clang-cl`llvm::OnDiskChainedHashTable<clang::serialization::reader::HeaderFileInfoTrait>::find(this=0x0000000113a16c70, EKey=0x00007fff5fbf6538, InfoPtr=0x0000000000000000) at OnDiskHashTable.h:345 frame #5: 0x0000000103cd58b9 clang-cl`(anonymous namespace)::HeaderFileInfoVisitor::operator(this=0x00007fff5fbf6538, M=0x000000011104fc00)(clang::serialization::ModuleFile&) at ASTReader.cpp:5683 frame #6: 0x0000000103cd5850 clang-cl`bool llvm::function_ref<bool (clang::serialization::ModuleFile&)>::callback_fn<(anonymous namespace)::HeaderFileInfoVisitor>(callable=140734799766840, params=0x000000011104fc00) at STLExtras.h:125 frame #7: 0x0000000103e338cc clang-cl`llvm::function_ref<bool (clang::serialization::ModuleFile&)>::operator(this=0x00007fff5fbf64a0, params=0x000000011104fc00)(clang::serialization::ModuleFile&) const at STLExtras.h:142 frame #8: 0x0000000103e33507 clang-cl`clang::serialization::ModuleManager::visit(this=0x000000011104c298, Visitor=function_ref<bool (clang::serialization::ModuleFile &)> @ 0x00007fff5fbf64a0, ModuleFilesHit=0x0000000000000000)>, llvm::SmallPtrSetImpl<clang::serialization::ModuleFile*>*) at ModuleManager.cpp:411 frame #9: 0x0000000103c69ade clang-cl`clang::ASTReader::GetHeaderFileInfo(this=0x000000011104c200, FE=0x0000000113a00030) at ASTReader.cpp:5698 frame #10: 0x0000000103c69d03 clang-cl`non-virtual thunk to clang::ASTReader::GetHeaderFileInfo(this=0x000000011104c200, FE=0x0000000113a00030) at ASTReader.cpp:0 frame #11: 0x0000000102ca607c clang-cl`clang::HeaderSearch::getExistingFileInfo(this=0x0000000111036e00, FE=0x0000000113a00030, WantExternal=true) const at HeaderSearch.cpp:1140 frame #12: 0x0000000102ca6faf clang-cl`clang::HeaderSearch::findModuleForHeader(this=0x0000000111036e00, File=0x0000000113a00030, AllowTextual=true) const at HeaderSearch.cpp:1334 frame #13: 0x0000000102ca700a clang-cl`suggestModule(HS=0x0000000111036e00, File=0x0000000113a00030, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9020) at HeaderSearch.cpp:1343 frame #14: 0x0000000102ca1dd2 clang-cl`clang::HeaderSearch::findUsableModuleForHeader(this=0x0000000111036e00, File=0x0000000113a00030, Root=0x00000001106126d0, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9020, IsSystemHeaderDir=false) at HeaderSearch.cpp:1367 frame #15: 0x0000000102ca1cee clang-cl`clang::HeaderSearch::getFileAndSuggestModule(this=0x0000000111036e00, FileName=(Data = "../../third_party/skia/include/core/SkPoint3.h", Length = 46), IncludeLoc=(ID = 4980551), Dir=0x00000001106126d0, IsSystemHeaderDir=false, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9020) at HeaderSearch.cpp:318 frame #16: 0x0000000102ca20ad clang-cl`clang::DirectoryLookup::LookupFile(this=0x000000011060f1e0, Filename=0x00007fff5fbf7c20, HS=0x0000000111036e00, IncludeLoc=(ID = 4980551), SearchPath=0x00007fff5fbf9438, RelativePath=0x00007fff5fbf9028, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9020, InUserSpecifiedSystemFramework=0x00007fff5fbf763f, HasBeenMapped=0x00007fff5fbf763e, MappedName=0x00007fff5fbf7640) const at HeaderSearch.cpp:357 frame #17: 0x0000000102ca3e15 clang-cl`clang::HeaderSearch::LookupFile(this=0x0000000111036e00, Filename=(Data = "third_party/skia/include/core/SkPoint3.h", Length = 40), IncludeLoc=(ID = 4980551), isAngled=false, FromDir=0x0000000000000000, CurDir=0x00007fff5fbf9848, Includers=ArrayRef<std::__1::pair<const clang::FileEntry *, const clang::DirectoryEntry *> > @ 0x00007fff5fbf7c78, SearchPath=0x00007fff5fbf9438, RelativePath=0x00007fff5fbf9028, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9020, IsMapped=0x00007fff5fbf9857, SkipCache=false, BuildSystemModule=false) at HeaderSearch.cpp:854 frame #18: 0x0000000102d01858 clang-cl`clang::Preprocessor::LookupFile(this=0x0000000111037e18, FilenameLoc=(ID = 4980551), Filename=(Data = "third_party/skia/include/core/SkPoint3.h", Length = 40), isAngled=false, FromDir=0x0000000000000000, FromFile=0x0000000000000000, CurDir=0x00007fff5fbf9848, SearchPath=0x00007fff5fbf9438, RelativePath=0x00007fff5fbf9028, SuggestedModule=0x00007fff5fbf9020, IsMapped=0x00007fff5fbf9857, SkipCache=false) at PPDirectives.cpp:740 frame #19: 0x0000000102d03384 clang-cl`clang::Preprocessor::HandleIncludeDirective(this=0x0000000111037e18, HashLoc=(ID = 4980542), IncludeTok=0x000000011080ac10, LookupFrom=0x0000000000000000, LookupFromFile=0x0000000000000000, isImport=false) at PPDirectives.cpp:1773 frame #20: 0x0000000102d05dfa clang-cl`clang::Preprocessor::HandleDirective(this=0x0000000111037e18, Result=0x000000011080ac10) at PPDirectives.cpp:942 frame #21: 0x0000000102cbfedf clang-cl`clang::Lexer::LexTokenInternal(this=0x000000011a6f1430, Result=0x000000011080ac10, TokAtPhysicalStartOfLine=true) at Lexer.cpp:3931 frame #22: 0x0000000102cbc178 clang-cl`clang::Lexer::Lex(this=0x000000011a6f1430, Result=0x000000011080ac10) at Lexer.cpp:3152 frame #23: 0x0000000102d54d8b clang-cl`clang::Preprocessor::Lex(this=0x0000000111037e18, Result=0x000000011080ac10) at Preprocessor.cpp:868 frame #24: 0x0000000102f235b9 clang-cl`clang::Parser::ConsumeBrace(this=0x000000011080ac00) at Parser.h:563 frame #25: 0x0000000102f2a1da clang-cl`clang::BalancedDelimiterTracker::consumeClose(this=0x00007fff5fbfa560) at RAIIObjectsForParser.h:429 frame #26: 0x0000000102e788a5 clang-cl`clang::Parser::ParseInnerNamespace(this=0x000000011080ac00, InnerNSs=0x00007fff5fbfa6e0, index=0, InlineLoc=0x00007fff5fbfa7a0, attrs=0x00007fff5fbfa6b8, Tracker=0x00007fff5fbfa560) at ParseDeclCXX.cpp:250 frame #27: 0x0000000102e77d96 clang-cl`clang::Parser::ParseNamespace(this=0x000000011080ac00, Context=FileContext, DeclEnd=0x00007fff5fbfaa70, InlineLoc=(ID = 0)) at ParseDeclCXX.cpp:223 frame #28: 0x0000000102e5aee9 clang-cl`clang::Parser::ParseDeclaration(this=0x000000011080ac00, Context=FileContext, DeclEnd=0x00007fff5fbfaa70, attrs=0x00007fff5fbfac40) at ParseDecl.cpp:1714 frame #29: 0x0000000102f25d83 clang-cl`clang::Parser::ParseExternalDeclaration(this=0x000000011080ac00, attrs=0x00007fff5fbfac40, DS=0x0000000000000000) at Parser.cpp:788 frame #30: 0x0000000102f24ec6 clang-cl`clang::Parser::ParseTopLevelDecl(this=0x000000011080ac00, Result=0x00007fff5fbfad78) at Parser.cpp:609 frame #31: 0x0000000102e4a036 clang-cl`clang::ParseAST(S=0x00000001108fba00, PrintStats=true, SkipFunctionBodies=false) at ParseAST.cpp:156 frame #32: 0x0000000100add2d2 clang-cl`clang::ASTFrontendAction::ExecuteAction(this=0x000000011060eee0) at FrontendAction.cpp:1035 frame #33: 0x00000001004f6c7d clang-cl`clang::CodeGenAction::ExecuteAction(this=0x000000011060eee0) at CodeGenAction.cpp:1047 frame #34: 0x0000000100adc8e0 clang-cl`clang::FrontendAction::Execute(this=0x000000011060eee0) at FrontendAction.cpp:934 frame #35: 0x0000000100a4ce0e clang-cl`clang::CompilerInstance::ExecuteAction(this=0x000000011060d000, Act=0x000000011060eee0) at CompilerInstance.cpp:954 frame #36: 0x0000000100b5c21f clang-cl`clang::ExecuteCompilerInvocation(Clang=0x000000011060d000) at ExecuteCompilerInvocation.cpp:267 frame #37: 0x0000000100001ac9 clang-cl`cc1_main(Argv=ArrayRef<const char *> @ 0x00007fff5fbfb4c8, Argv0="../../../../llvm-mono-2/out/gn/bin/clang-cl", MainAddr=0x0000000100028110) at cc1_main.cpp:218 frame #38: 0x000000010002999f clang-cl`ExecuteCC1Tool(argv=ArrayRef<const char *> @ 0x00007fff5fbfba78, Tool=(Data = "", Length = 0)) at driver.cpp:309 frame #39: 0x0000000100028a81 clang-cl`main(argc_=409, argv_=0x00007fff5fbfd170) at driver.cpp:381 frame #40: 0x00007fffb015c235 libdyld.dylib`start + 1 For regular includes they look like so: (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 * frame #0: 0x0000000100059d29 clang-cl`clang::FileManager::getStatValue(this=0x0000000110611270, Path=(Data = "../../third_party/blink/renderer/platform/scheduler/public/scheduling_lifecycle_state.h", Length = 87), Data=0x00007fff5fbf6640, isFile=true, F=0x00007fff5fbf6680) at FileManager.cpp:465 frame #1: 0x000000010005a471 clang-cl`clang::FileManager::getFile(this=0x0000000110611270, Filename=(Data = "../../third_party/blink/renderer/platform/scheduler/public/scheduling_lifecycle_state.h", Length = 87), openFile=true, CacheFailure=true) at FileManager.cpp:230 frame #2: 0x0000000102ca1ca2 clang-cl`clang::HeaderSearch::getFileAndSuggestModule(this=0x0000000111036e00, FileName=(Data = "../../third_party/blink/renderer/platform/scheduler/public/scheduling_lifecycle_state.h", Length = 87), IncludeLoc=(ID = 9004850), Dir=0x0000000110502730, IsSystemHeaderDir=false, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9030) at HeaderSearch.cpp:313 frame #3: 0x0000000102ca20dd clang-cl`clang::DirectoryLookup::LookupFile(this=0x0000000110503850, Filename=0x00007fff5fbf7c30, HS=0x0000000111036e00, IncludeLoc=(ID = 9004850), SearchPath=0x00007fff5fbf9448, RelativePath=0x00007fff5fbf9038, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9030, InUserSpecifiedSystemFramework=0x00007fff5fbf764f, HasBeenMapped=0x00007fff5fbf764e, MappedName=0x00007fff5fbf7650) const at HeaderSearch.cpp:357 frame #4: 0x0000000102ca3e45 clang-cl`clang::HeaderSearch::LookupFile(this=0x0000000111036e00, Filename=(Data = "third_party/blink/renderer/platform/scheduler/public/scheduling_lifecycle_state.h", Length = 81), IncludeLoc=(ID = 9004850), isAngled=false, FromDir=0x0000000000000000, CurDir=0x00007fff5fbf9858, Includers=ArrayRef<std::__1::pair<const clang::FileEntry *, const clang::DirectoryEntry *> > @ 0x00007fff5fbf7c88, SearchPath=0x00007fff5fbf9448, RelativePath=0x00007fff5fbf9038, RequestingModule=0x0000000000000000, SuggestedModule=0x00007fff5fbf9030, IsMapped=0x00007fff5fbf9867, SkipCache=false, BuildSystemModule=false) at HeaderSearch.cpp:854 frame #5: 0x0000000102d01888 clang-cl`clang::Preprocessor::LookupFile(this=0x0000000111037e18, FilenameLoc=(ID = 9004850), Filename=(Data = "third_party/blink/renderer/platform/scheduler/public/scheduling_lifecycle_state.h", Length = 81), isAngled=false, FromDir=0x0000000000000000, FromFile=0x0000000000000000, CurDir=0x00007fff5fbf9858, SearchPath=0x00007fff5fbf9448, RelativePath=0x00007fff5fbf9038, SuggestedModule=0x00007fff5fbf9030, IsMapped=0x00007fff5fbf9867, SkipCache=false) at PPDirectives.cpp:740 frame #6: 0x0000000102d033b4 clang-cl`clang::Preprocessor::HandleIncludeDirective(this=0x0000000111037e18, HashLoc=(ID = 9004841), IncludeTok=0x0000000115068810, LookupFrom=0x0000000000000000, LookupFromFile=0x0000000000000000, isImport=false) at PPDirectives.cpp:1773 frame #7: 0x0000000102d05e2a clang-cl`clang::Preprocessor::HandleDirective(this=0x0000000111037e18, Result=0x0000000115068810) at PPDirectives.cpp:942 frame #8: 0x0000000102cbff0f clang-cl`clang::Lexer::LexTokenInternal(this=0x000000011d98b010, Result=0x0000000115068810, TokAtPhysicalStartOfLine=true) at Lexer.cpp:3931 frame #9: 0x0000000102cbc1a8 clang-cl`clang::Lexer::Lex(this=0x000000011d98b010, Result=0x0000000115068810) at Lexer.cpp:3152 frame #10: 0x0000000102d54dbb clang-cl`clang::Preprocessor::Lex(this=0x0000000111037e18, Result=0x0000000115068810) at Preprocessor.cpp:868 frame #11: 0x0000000102f235e9 clang-cl`clang::Parser::ConsumeBrace(this=0x0000000115068800) at Parser.h:563 frame #12: 0x0000000102f2a20a clang-cl`clang::BalancedDelimiterTracker::consumeClose(this=0x00007fff5fbfa570) at RAIIObjectsForParser.h:429 frame #13: 0x0000000102e788d5 clang-cl`clang::Parser::ParseInnerNamespace(this=0x0000000115068800, InnerNSs=0x00007fff5fbfa6f0, index=0, InlineLoc=0x00007fff5fbfa7b0, attrs=0x00007fff5fbfa6c8, Tracker=0x00007fff5fbfa570) at ParseDeclCXX.cpp:250 frame #14: 0x0000000102e77dc6 clang-cl`clang::Parser::ParseNamespace(this=0x0000000115068800, Context=FileContext, DeclEnd=0x00007fff5fbfaa80, InlineLoc=(ID = 0)) at ParseDeclCXX.cpp:223 frame #15: 0x0000000102e5af19 clang-cl`clang::Parser::ParseDeclaration(this=0x0000000115068800, Context=FileContext, DeclEnd=0x00007fff5fbfaa80, attrs=0x00007fff5fbfac50) at ParseDecl.cpp:1714 frame #16: 0x0000000102f25db3 clang-cl`clang::Parser::ParseExternalDeclaration(this=0x0000000115068800, attrs=0x00007fff5fbfac50, DS=0x0000000000000000) at Parser.cpp:788 frame #17: 0x0000000102f24ef6 clang-cl`clang::Parser::ParseTopLevelDecl(this=0x0000000115068800, Result=0x00007fff5fbfad88) at Parser.cpp:609 frame #18: 0x0000000102e4a066 clang-cl`clang::ParseAST(S=0x0000000115061a00, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:156 frame #19: 0x0000000100add302 clang-cl`clang::ASTFrontendAction::ExecuteAction(this=0x000000011060ef90) at FrontendAction.cpp:1035 frame #20: 0x00000001004f6cad clang-cl`clang::CodeGenAction::ExecuteAction(this=0x000000011060ef90) at CodeGenAction.cpp:1047 frame #21: 0x0000000100adc910 clang-cl`clang::FrontendAction::Execute(this=0x000000011060ef90) at FrontendAction.cpp:934 frame #22: 0x0000000100a4ce3e clang-cl`clang::CompilerInstance::ExecuteAction(this=0x000000011060d050, Act=0x000000011060ef90) at CompilerInstance.cpp:954 frame #23: 0x0000000100b5c24f clang-cl`clang::ExecuteCompilerInvocation(Clang=0x000000011060d050) at ExecuteCompilerInvocation.cpp:267 frame #24: 0x0000000100001b19 clang-cl`cc1_main(Argv=ArrayRef<const char *> @ 0x00007fff5fbfb4d8, Argv0="../../../../llvm-mono-2/out/gn/bin/clang-cl", MainAddr=0x0000000100028160) at cc1_main.cpp:218 frame #25: 0x00000001000299ef clang-cl`ExecuteCC1Tool(argv=ArrayRef<const char *> @ 0x00007fff5fbfba88, Tool=(Data = "", Length = 0)) at driver.cpp:309 frame #26: 0x0000000100028ad1 clang-cl`main(argc_=408, argv_=0x00007fff5fbfd188) at driver.cpp:381 frame #27: 0x00007fffb015c235 libdyld.dylib`start + 1 frame #28: 0x00007fffb015c235 libdyld.dylib`start + 1 On Wed, Jan 23, 2019 at 12:10 PM Sam McCall <sammcc...@google.com> wrote: > Thanks! given that we don't see an earlier stat, I guess these files were > being treated as virtual (file metadata deserialized from PCH). Previously > despite the open=true these never actually got opened, and that worked fine. > > I'm away from my computer but will verify later tonight or in the morning > (CET) and try to find a fix. If it's not obvious, we should revert the > patch at least on the release branch. > > A stack trace at the relevant breakpoint might well be useful - can't > remember if there are lots of entry points here. > > Cheers, Sam > > On Wed, Jan 23, 2019, 16:38 Nico Weber <tha...@chromium.org wrote: > >> With your patch reverted locally, at the same breakpoint I instead get >> >> $ lsof -p 95842 | wc -l >> 94 >> >> So your patch seems to increase number of open file handles by ~260%. >> >> On Wed, Jan 23, 2019 at 10:27 AM Nico Weber <tha...@chromium.org> wrote: >> >>> On Wed, Jan 23, 2019 at 9:54 AM Sam McCall <sammcc...@google.com> wrote: >>> >>>> (Email is better than IRC if that's OK - I don't know this code that >>>> well so it takes me a while). >>>> >>>> Thanks, that's definitely interesting and not what I expected. I >>>> thought every call sequence r347205 changed the behavior of would have >>>> resulted in two calls to getStatValue(). >>>> I guess the "pch"/"main" output is printed before the corresponding >>>> lines in run.sh? >>>> >>> >>> Correct. >>> >>> >>>> Weird that we don't get any output from building the PCH, but I don't >>>> know well how PCH builds work. >>>> >>>> > It looks like FS->getCurrentWorkingDirectory() is set >>>> yet FileSystemOpts.WorkingDir.empty() is also true. Is that expected? >>>> I think so. The FileManager and the VFS each have their own concept of >>>> working directory, I guess for historical reasons. >>>> Making use of the VFS one but not the FileManager one seems reasonable. >>>> >>>> So the weirdness is that FileSystemStatCache::get() is returning true >>>> (i.e. file doesn't exist), when the file does exist. >>>> Possibilities: >>>> 1) we're serving this result from the FileSystemStatCache (and maybe >>>> it's being poisoned in a PCH-related way somehow). Except as far as I can >>>> tell, FileSystemStatCache is always null (FileManager::setStateCache has no >>>> callers). >>>> 2) the FS.openFileForRead call failed (ultimately ::open, if FS is the >>>> real FS) >>>> 3) the OwnedFile->status() call failed (ultimately ::fstat) >>>> 4) I'm misreading the code somehow >>>> >>> >>> ::open() fails with errno == 24, EMFILE. >>> >>> This log statement here: >>> >>> diff --git a/clang/lib/Basic/FileSystemStatCache.cpp >>> b/clang/lib/Basic/FileSystemStatCache.cpp >>> index d29ebb750fc..63fc4780237 100644 >>> --- a/clang/lib/Basic/FileSystemStatCache.cpp >>> +++ b/clang/lib/Basic/FileSystemStatCache.cpp >>> @@ -70,9 +70,13 @@ bool FileSystemStatCache::get(StringRef Path, >>> FileData &Data, bool isFile, >>> // >>> // Because of this, check to see if the file exists with 'open'. >>> If the >>> // open succeeds, use fstat to get the stat info. >>> - auto OwnedFile = FS.openFileForRead(Path); >>> + llvm::ErrorOr<std::unique_ptr<llvm::vfs::File>> OwnedFile = >>> + FS.openFileForRead(Path); >>> >>> if (!OwnedFile) { >>> +if (Path.endswith("scheduling_lifecycle_state.h")) { >>> +fprintf(stderr, "hmm failed %s\n", >>> OwnedFile.getError().message().c_str()); >>> +} >>> // If the open fails, our "stat" fails. >>> R = CacheMissing; >>> } else { >>> >>> >>> causes clang to print "hmm failed Too many open files". That path should >>> maybe check if `OwnedFile.getError().value() == EMFILE && >>> OwnedFile.getError().category() == std::generic_category()` on mac and >>> abort or diag or something more visible. >>> >>> `ulimit -n` on macOS is pretty small -- do you see how your patch could >>> cause clang to keep more file handles open? >>> >>> Here's how many files clang had open when I had a breakpoint in that >>> error path: >>> >>> $ lsof -p 91890 | wc -l >>> 343 >>> >>> >>> >>>> >>>> Could you find out which of these is going on? Either running in a >>>> debugger or adding some similar printfs to FileSystemStatCache::get() >>>> should be doable. >>>> I'm also going to try to work out how the patch could have affected >>>> this, but new vs correct much easier for me to compare than new vs old... >>>> >>>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits