summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-03-20 19:44:17 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-03-20 19:44:17 +0000
commitb9eab6d1c8681c72371e02eaae0f406255b9c9a7 (patch)
treedd12e1ced30aa873e3f1cc13e13adacdbd99206f /clang/lib/Serialization/ASTReader.cpp
parentc962cda1db568582dada8380e4ab5efd06c1d8a8 (diff)
downloadbcm5719-llvm-b9eab6d1c8681c72371e02eaae0f406255b9c9a7.tar.gz
bcm5719-llvm-b9eab6d1c8681c72371e02eaae0f406255b9c9a7.zip
Rearrange serialization block order to put decl update emission into the same
block as decl and type emission. This allows decl updates include statements and expressions. No functionality change (but the generated PCM files are incompatible with earlier versions of Clang). llvm-svn: 204385
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index a0ee3d37c5c..f7a1921e519 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -2352,14 +2352,7 @@ bool ASTReader::ReadASTBlock(ModuleFile &F) {
return true;
}
break;
-
- case DECL_UPDATES_BLOCK_ID:
- if (Stream.SkipBlock()) {
- Error("malformed block record in AST file");
- return true;
- }
- break;
-
+
case PREPROCESSOR_BLOCK_ID:
F.MacroCursor = Stream;
if (!PP.getExternalSource())
@@ -2707,9 +2700,9 @@ bool ASTReader::ReadASTBlock(ModuleFile &F) {
// Initialize the remapping table.
// Invalid stays invalid.
- F.SLocRemap.insert(std::make_pair(0U, 0));
+ F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
// This module. Base was 2 when being compiled.
- F.SLocRemap.insert(std::make_pair(2U,
+ F.SLocRemap.insertOrReplace(std::make_pair(2U,
static_cast<int>(F.SLocEntryBaseOffset - 2)));
TotalNumSLocEntries += F.LocalNumSLocEntries;
@@ -2720,7 +2713,13 @@ bool ASTReader::ReadASTBlock(ModuleFile &F) {
// Additional remapping information.
const unsigned char *Data = (const unsigned char*)Blob.data();
const unsigned char *DataEnd = Data + Blob.size();
-
+
+ // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
+ if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
+ F.SLocRemap.insert(std::make_pair(0U, 0));
+ F.SLocRemap.insert(std::make_pair(2U, 1));
+ }
+
// Continuous range maps we may be updating in our module.
ContinuousRangeMap<uint32_t, int, 2>::Builder SLocRemap(F.SLocRemap);
ContinuousRangeMap<uint32_t, int, 2>::Builder
OpenPOWER on IntegriCloud