summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-07-20 19:10:16 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-07-20 19:10:16 +0000
commitdc1f042171d93709952aeaa1c83bf91c0cf8a1be (patch)
treea504aefcca00d128754cdcfb479bf7cabd423e87 /clang/lib/Serialization/ASTReader.cpp
parent62ae568bbb9c4d22d341a71d12ab0bc74506476c (diff)
downloadbcm5719-llvm-dc1f042171d93709952aeaa1c83bf91c0cf8a1be.tar.gz
bcm5719-llvm-dc1f042171d93709952aeaa1c83bf91c0cf8a1be.zip
[modules] Don't emit initializers for VarDecls within a module eagerly whenever
we first touch any part of that module. Instead, defer them until the first time that module is (transitively) imported. The initializer step for a module then recursively initializes modules that its own headers imported. For example, this avoids running the <iostream> global initializer in programs that don't actually use iostreams, but do use other parts of the standard library. llvm-svn: 276159
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index b35bd7bd329..6bfae07b82b 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -4673,6 +4673,13 @@ ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
UnresolvedModuleRefs.push_back(Unresolved);
break;
}
+
+ case SUBMODULE_INITIALIZERS:
+ SmallVector<uint32_t, 16> Inits;
+ for (auto &ID : Record)
+ Inits.push_back(getGlobalDeclID(F, ID));
+ Context.addLazyModuleInitializers(CurrentModule, Inits);
+ break;
}
}
}
OpenPOWER on IntegriCloud