]> granicus.if.org Git - clang/commit
[modules] Don't emit initializers for VarDecls within a module eagerly whenever
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 20 Jul 2016 19:10:16 +0000 (19:10 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 20 Jul 2016 19:10:16 +0000 (19:10 +0000)
commit3b75c09ec6e3dbf1722c6aa551b51202f2e8c22d
tree90c143c4a3f71bec5ddb9bcf59be381ab77dc2af
parentbb573cbb0fcc4e8e0049132504502e48f59c12f4
[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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@276159 91177308-0d34-0410-b5e6-96231b3b80d8
19 files changed:
include/clang/AST/ASTContext.h
include/clang/Sema/Sema.h
include/clang/Serialization/ASTBitCodes.h
lib/AST/ASTContext.cpp
lib/CodeGen/CodeGenModule.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaLookup.cpp
lib/Serialization/ASTReader.cpp
lib/Serialization/ASTReaderDecl.cpp
lib/Serialization/ASTWriter.cpp
lib/Serialization/ASTWriterDecl.cpp
test/Modules/Inputs/unused-global-init/init.h [new file with mode: 0644]
test/Modules/Inputs/unused-global-init/module.modulemap [new file with mode: 0644]
test/Modules/Inputs/unused-global-init/other.h [new file with mode: 0644]
test/Modules/Inputs/unused-global-init/unused.h [new file with mode: 0644]
test/Modules/Inputs/unused-global-init/used.h [new file with mode: 0644]
test/Modules/odr.cpp
test/Modules/templates.mm
test/Modules/unused-global-init.cpp [new file with mode: 0644]