diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-08-12 22:25:24 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-08-12 22:25:24 +0000 |
commit | 78d81ecfc38c273cde9b4daed155c6c1e042f996 (patch) | |
tree | 9e1ec2d351051f40b6ad3fed27ae1536ef9cb599 /clang/lib/Basic/SourceManager.cpp | |
parent | 971dc3a82a018b23d408484e0a0e4482d78dbdc8 (diff) | |
download | bcm5719-llvm-78d81ecfc38c273cde9b4daed155c6c1e042f996.tar.gz bcm5719-llvm-78d81ecfc38c273cde9b4daed155c6c1e042f996.zip |
[modules] If loading a .pcm file would cause us to run out of source locations, attempt to fail more gracefully. (No test; this requires >= 4GB of preprocessed input...)
llvm-svn: 244822
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
-rw-r--r-- | clang/lib/Basic/SourceManager.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index c0b045331dd..6c2bd7d2332 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -484,10 +484,12 @@ std::pair<int, unsigned> SourceManager::AllocateLoadedSLocEntries(unsigned NumSLocEntries, unsigned TotalSize) { assert(ExternalSLocEntries && "Don't have an external sloc source"); + // Make sure we're not about to run out of source locations. + if (CurrentLoadedOffset - TotalSize < NextLocalOffset) + return std::make_pair(0, 0); LoadedSLocEntryTable.resize(LoadedSLocEntryTable.size() + NumSLocEntries); SLocEntryLoaded.resize(LoadedSLocEntryTable.size()); CurrentLoadedOffset -= TotalSize; - assert(CurrentLoadedOffset >= NextLocalOffset && "Out of source locations"); int ID = LoadedSLocEntryTable.size(); return std::make_pair(-ID - 1, CurrentLoadedOffset); } |