Method Pool in modules: we make sure that if a module contains an entry for
authorManman Ren <manman.ren@gmail.com>
Fri, 29 Apr 2016 19:04:05 +0000 (19:04 +0000)
committerManman Ren <manman.ren@gmail.com>
Fri, 29 Apr 2016 19:04:05 +0000 (19:04 +0000)
commita0f31a01f34dbde84b331cf49685c04cf02c8250
tree5fd2008f8a310a2c91eef697bc1c068290455c28
parentb014ee467d61ad0cfbf59f721b29e27082ea878d
Method Pool in modules: we make sure that if a module contains an entry for
a selector, the entry should be complete, containing everything introduced by
that module and all modules it imports.

Before writing out the method pool of a module, we sync up the out of date
selectors by pulling in methods for the selectors, from all modules it imports.

In ReadMethodPool, after pulling in the method pool entry for module A, this
lets us skip the modules that module A imports.

rdar://problem/25900131

llvm-svn: 268091
15 files changed:
clang/include/clang/Sema/ExternalSemaSource.h
clang/include/clang/Sema/MultiplexExternalSemaSource.h
clang/include/clang/Sema/Sema.h
clang/include/clang/Serialization/ASTReader.h
clang/lib/Sema/MultiplexExternalSemaSource.cpp
clang/lib/Sema/Sema.cpp
clang/lib/Sema/SemaDeclObjC.cpp
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTWriter.cpp
clang/test/Modules/Inputs/MethodPoolCombined1.h [new file with mode: 0644]
clang/test/Modules/Inputs/MethodPoolCombined2.h [new file with mode: 0644]
clang/test/Modules/Inputs/MethodPoolString1.h [new file with mode: 0644]
clang/test/Modules/Inputs/MethodPoolString2.h [new file with mode: 0644]
clang/test/Modules/Inputs/module.map
clang/test/Modules/method_pool_write.m [new file with mode: 0644]