diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-07-20 19:10:16 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-07-20 19:10:16 +0000 |
commit | dc1f042171d93709952aeaa1c83bf91c0cf8a1be (patch) | |
tree | a504aefcca00d128754cdcfb479bf7cabd423e87 /clang/lib/Serialization/ASTReader.cpp | |
parent | 62ae568bbb9c4d22d341a71d12ab0bc74506476c (diff) | |
download | bcm5719-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.cpp | 7 |
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; } } } |