aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic/FileManager.cpp
AgeCommit message (Collapse)AuthorFilesLines
2013-01-26<limits.h> includes <linux/limits.h> on Linux, no need to special-case itDmitri Gribenko1-3/+1
llvm-svn: 173578
2013-01-26Since we're stuck with realpath for the header <-> module mapping,Douglas Gregor1-0/+28
factor the realpath calls into FileManager::getCanonicalName() so we can cache the results of this epically slow operation. 5% speedup on my modules test, and realpath drops out of the profile. llvm-svn: 173542
2012-12-11Extend stat query APIs to explicitly specify if the query is forArgyrios Kyrtzidis1-12/+8
a file or directory, allowing just a stat call if a file descriptor is not needed. Doing just 'stat' is faster than 'open/fstat/close'. This has the effect of cutting down system time for validating the input files of a PCH. llvm-svn: 169831
2012-12-04Sort all of Clang's files under 'lib', and fix up the broken headersChandler Carruth1-2/+2
uncovered. This required manually correcting all of the incorrect main-module headers I could find, and running the new llvm/utils/sort_includes.py script over the files. I also manually added quite a few missing headers that were uncovered by shuffling the order or moving headers up to be main-module-headers. llvm-svn: 169237
2012-11-06Basic: Windows doesn't define S_IFIFO.Daniel Dunbar1-1/+4
llvm-svn: 167468
2012-11-05Frontend: Add support for reading named pipes as the main file.Daniel Dunbar1-0/+4
- The whole {File,Source}Manager is built around wanting to pre-determine the size of files, so we can't fit this in naturally. Instead, we handle it like we do STDIN, where we just replace the main file contents upfront. llvm-svn: 167419
2012-07-31Fixes a segfault in Tooling when using pch's:Manuel Klimek1-0/+4
Clear the FileManager's stat cache in between running translation units, as the stat cache loaded from a pch is only valid for one compiler invocation. llvm-svn: 161047
2012-07-11Introduce a flag in SourceManager to treat non-system source filesArgyrios Kyrtzidis1-5/+11
as "volatile", meaning there's a high enough chance that they may change while we are trying to use them. This flag is only enabled by libclang. Currently "volatile" source files will be stat'ed immediately before opening them, because the file size stat info may not be accurate since when we got it (e.g. from the PCH). This avoids crashes when trying to reference mmap'ed memory from a file whose size is not what we expect. Note that there's still a window for a racing issue to occur but the window for it should be way smaller than before. We can consider later on to avoid mmap completely on such files. rdar://11612916 llvm-svn: 160074
2012-07-11LLVM_ON_WIN32 case: use the proper key in the UniqueFiles map.Axel Naumann1-1/+7
llvm-svn: 160041
2012-07-10Improve r159256 following Chandler's comments:Axel Naumann1-10/+9
Implement UniqueFileContainer::erase(), camelCase, add comment on future optimizations of the cache versus de-optimizations of invalidations. llvm-svn: 159997
2012-06-27Fix for r159256 on Windows.Axel Naumann1-0/+4
llvm-svn: 159262
2012-06-27From Vassil Vassilev:Axel Naumann1-0/+13
add interface for removing a FileEntry from the cache. Forces a re-read the contents from disk, e.g. because a tool (like cling) wants to pick up a modified file. llvm-svn: 159256
2012-06-16clang/lib/Basic/FileManager.cpp: Detect the root directory with PathV2. It ↵NAKAMURA Takumi1-2/+4
should be better fix for PR10331, or, "clang X:\foo.c" fails. llvm-svn: 158596
2012-06-15Documentation cleanup: delete doc comments from source files where they areJames Dennett1-7/+0
broken duplicates of comments that are in the corresponding header files. llvm-svn: 158550
2012-05-03[PCH] When validating that the files coming from PCH did not change, alsoArgyrios Kyrtzidis1-0/+6
validate that we didn't override the contents of any of such files. If this is detected, emit a diagnostic error and recover gracefully by using the contents of the original file that the PCH was built from. Part of rdar://11305263 llvm-svn: 156107
2012-02-05Basic: import SmallString<> into clang namespaceDylan Noblesmith1-5/+5
(I was going to fix the TODO about DenseMap too, but that would break self-host right now. See PR11922.) llvm-svn: 149799
2012-02-05Basic: import OwningPtr<> into clang namespaceDylan Noblesmith1-2/+2
llvm-svn: 149798
2011-12-22remove unneeded config.h includesDylan Noblesmith1-1/+1
llvm-svn: 147195
2011-11-17Revert r132539 for now, "My testing shows that function stat has no problem ↵NAKAMURA Takumi1-0/+6
with trailing separators. (tested on Windows and Darwin)." It caused PR10331. MSVCRT stat() cannot strip trailing '/'. (can '\') llvm-svn: 144884
2011-11-06Use StringRef's case transformation methods.Benjamin Kramer1-3/+2
llvm-svn: 143889
2011-09-13For modules, use a hash of the compiler version, language options, andDouglas Gregor1-12/+22
target triple to separate modules built under different conditions. The hash is used to create a subdirectory in the module cache path where other invocations of the compiler (with the same version, language options, etc.) can find the precompiled modules. llvm-svn: 139662
2011-09-12When an import statement fails to find a module in the module cache,Douglas Gregor1-0/+4
but there is a corresponding umbrella header in a framework, build the module on-the-fly so it can be immediately loaded at the import statement. This is very much proof-of-concept code, with details to be fleshed out over time. llvm-svn: 139558
2011-07-23remove unneeded llvm:: namespace qualifiers on some core types now that ↵Chris Lattner1-13/+13
LLVM.h imports them into the clang namespace. llvm-svn: 135852
2011-06-03My testing shows that function stat has no problem with trailing separators. ↵Francois Pichet1-4/+0
(tested on Windows and Darwin). This fixes a bug on Windows: clang c:\test.cpp Here the call stat("c:") is not recognized as a directory (must be "c:\"). llvm-svn: 132539
2011-03-18Add FileManager::getNoncachedStatValue, which will resolve relative paths ↵Anders Carlsson1-0/+8
against the working directory specified in the file system options. llvm-svn: 127893
2011-03-16Having FileManager::getFile always open the file, brought much consternation ↵Argyrios Kyrtzidis1-1/+6
and leaking of file descriptors. Add 'openFile' bool to FileManager::getFile to specify whether we want to have the file opened or not, have it false by default, and enable it only in HeaderSearch.cpp where the open+fstat optimization matters. Fixes rdar://9139899. llvm-svn: 127748
2011-03-15Stop leaking file descriptors.Argyrios Kyrtzidis1-14/+16
After the open+fstat optimization, files were already opened for FileManager::getBufferForFile() and we closed them after reading them. The problem was that when -working-directory was passed, the code path that actually reuses & closes the already opened file descriptor was not followed. llvm-svn: 127639
2011-03-14Get rid of the static FileManager::FixupRelativePath.Anders Carlsson1-8/+4
llvm-svn: 127573
2011-03-07Check in the implementation as well...Anders Carlsson1-3/+7
llvm-svn: 127144
2011-03-06Convert FileManager::FixupRelativePath over to using PathV2.Anders Carlsson1-8/+10
llvm-svn: 127133
2011-02-11Uses llvm::sys::path instead of hand-rolled algorithm in FileManager.Zhanyong Wan1-32/+11
Reviewed by dgregor. llvm-svn: 125407
2011-02-11Improves Clang's virtual file handling.Zhanyong Wan1-85/+146
This patch contains: - making some of the existing comments more accurate in the presence of virtual files/directories. - renaming some private data members of FileManager to match their roles better. - creating 'DirectorEntry's for the parent directories of virtual files, such that we can tell whether two virtual files are from the same directory. This is useful for injecting virtual files whose directories don't exist in the real file system. - minor clean-ups and adding comments for class FileManager::UniqueDirContainer and FileManager::UniqueFileContainer. - adding statistics on virtual files to FileManager::PrintStats(). - adding unit tests to verify the existing and new behavior of FileManager. llvm-svn: 125384
2011-02-10Implement two related optimizations that make de-serialization ofDouglas Gregor1-0/+19
AST/PCH files more lazy: - Don't preload all of the file source-location entries when reading the AST file. Instead, load them lazily, when needed. - Only look up header-search information (whether a header was already #import'd, how many times it's been included, etc.) when it's needed by the preprocessor, rather than pre-populating it. Previously, we would pre-load all of the file source-location entries, which also populated the header-search information structure. This was a relatively minor performance issue, since we would end up stat()'ing all of the headers stored within a AST/PCH file when the AST/PCH file was loaded. In the normal PCH use case, the stat()s were cached, so the cost--of preloading ~860 source-location entries in the Cocoa.h case---was relatively low. However, the recent optimization that replaced stat+open with open+fstat turned this into a major problem, since the preloading of source-location entries would now end up opening those files. Worse, those files wouldn't be closed until the file manager was destroyed, so just opening a Cocoa.h PCH file would hold on to ~860 file descriptors, and it was easy to blow through the process's limit on the number of open file descriptors. By eliminating the preloading of these files, we neither open nor stat the headers stored in the PCH/AST file until they're actually needed for something. Concretely, we went from *** HeaderSearch Stats: 835 files tracked. 364 #import/#pragma once files. 823 included exactly once. 6 max times a file is included. 3 #include/#include_next/#import. 0 #includes skipped due to the multi-include optimization. 1 framework lookups. 0 subframework lookups. *** Source Manager Stats: 835 files mapped, 3 mem buffers mapped. 37460 SLocEntry's allocated, 11215575B of Sloc address space used. 62 bytes of files mapped, 0 files with line #'s computed. with a trivial program that uses a chained PCH including a Cocoa PCH to *** HeaderSearch Stats: 4 files tracked. 1 #import/#pragma once files. 3 included exactly once. 2 max times a file is included. 3 #include/#include_next/#import. 0 #includes skipped due to the multi-include optimization. 1 framework lookups. 0 subframework lookups. *** Source Manager Stats: 3 files mapped, 3 mem buffers mapped. 37460 SLocEntry's allocated, 11215575B of Sloc address space used. 62 bytes of files mapped, 0 files with line #'s computed. for the same program. llvm-svn: 125286
2011-02-08Update for API change.Rafael Espindola1-2/+2
llvm-svn: 125129
2011-02-05Improve our uniquing of file entries when files are re-saved or areDouglas Gregor1-21/+36
overridden via remapping. Thus, when we create a "virtual" file in the file manager, we still stat() the real file that lives behind it so that we can provide proper uniquing based on inodes. This helps keep the file manager much more consistent. To take advantage of this when reparsing files in libclang, we disable the use of the stat() cache when reparsing or performing code completion, since the stat() cache is very likely to be out of date in this use case. llvm-svn: 124971
2011-02-03Revert 124754 and 124760 as they made clang unusable in the presence of symbolicRafael Espindola1-84/+0
links. llvm-svn: 124776
2011-02-03Improve the performance of filename canonicalization by avoidingDouglas Gregor1-1/+8
redundant searches in the string. No functionality change. llvm-svn: 124760
2011-02-02Canonicalize path names in the file manager before performing a lookupDouglas Gregor1-0/+77
on that name. Canonicalization eliminates silliness such as "." and "foo/.." that breaks the uniquing of files in the presence of virtual files or files whose inode numbers have changed during parsing/re-parsing. c-index-test isn't able to create this crazy situation, so I've resorted to testing outside of the Clang tree. Fixes <rdar://problem/8928220>. Note that this hackery will go away once we have a real virtual file system on which we can layer FileManager; the virtual-files hack is showing cracks. llvm-svn: 124754
2011-01-27TextDiagnosticPrinter.cpp: Show diagnostics as far as possible even with ↵Axel Naumann1-6/+10
invalid PresomedLoc, instead of just silencing it. FileManager.cpp: Allow virtual files in nonexistent directories. FileManager.cpp: Close FileDescriptor for virtual files that correspond to actual files. FileManager.cpp: Enable virtual files to be created even for files that were flagged as NON_EXISTENT_FILE, e.g. by a prior (unsuccessful) addFile(). ASTReader.cpp: Read a PCH even if the original source files cannot be found. Add a test for reading a PCH of a file that has been removed and diagnostics referencing that file. llvm-svn: 124374
2010-12-21Replace all uses of PathV1::makeAbsolute with PathV2::fs::make_absolute.Michael J. Spencer1-3/+4
llvm-svn: 122340
2010-12-17Replace all uses of PathV1::isAbsolute with PathV2::is_{absolute,relative}.Michael J. Spencer1-4/+5
llvm-svn: 122087
2010-12-16MemoryBuffer API update.Michael J. Spencer1-19/+18
llvm-svn: 121956
2010-12-09Use error_code instead of std::string* for MemoryBuffer.Michael J. Spencer1-8/+27
llvm-svn: 121378
2010-12-02attempt to fix a buildbot failure, apparently apache fails to build.Chris Lattner1-1/+1
llvm-svn: 120688
2010-11-29Merge System into Support.Michael J. Spencer1-1/+1
llvm-svn: 120297
2010-11-23The final result of all this refactoring: instead of doing stat immediatelyChris Lattner1-3/+16
followed by an open for every source file we open, probe the file system with 'open' and then do an fstat when it succeeds. open+fstat is faster than stat+open because the kernel only has to perform the string->inode mapping once. Presumably it gets faster the deeper in your filesystem a lookup happens. For -Eonly on cocoa.h, this reduces system time from 0.042s to 0.039s on my machine, a 7.7% speedup. llvm-svn: 120066
2010-11-23hopefully resolve the windows buildbot issue (retch)Chris Lattner1-0/+8
llvm-svn: 120061
2010-11-23change the 'is directory' indicator to be a null-or-notChris Lattner1-14/+19
pointer that is passed down through the APIs, and make FileSystemStatCache::get be the one that filters out directory lookups that hit files. This also paves the way to have stat queries be able to return opened files. llvm-svn: 120060
2010-11-23pull "is directory" handling into FileManager::getStatValueChris Lattner1-29/+36
which simplifies clients and is important for future directions. Add a FD member to FileEntry which isn't used but will be shortly. llvm-svn: 120056
2010-11-23tidy up code, add a comment about dir caching.Chris Lattner1-20/+16
llvm-svn: 120048