]> granicus.if.org Git - clang/commit
Implement a proper local -> global type ID remapping scheme in the AST
authorDouglas Gregor <dgregor@apple.com>
Tue, 2 Aug 2011 16:26:37 +0000 (16:26 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 2 Aug 2011 16:26:37 +0000 (16:26 +0000)
commita119da0761cb6b85f53857eaee50f6ad8c5ea0a0
treea173065d2d94f754efd844d593041b76b8bdffec
parent8df5c9b5d65beec807e4e77dae2813dd193f77dd
Implement a proper local -> global type ID remapping scheme in the AST
reader. This scheme permits an AST file to be loaded with its type IDs
shifted anywhere in the type ID space.

At present, the type indices are still allocated in the same boring
way they always have been, just by adding up the number of types in
each PCH file within the chain. However, I've done testing with this
patch by randomly sliding the base indices at load time, to ensure
that remapping is occurring as expected. I may eventually formalize
this in some testing flag, but loading multiple (non-chained) AST
files at once will eventually exercise the same code.

There is one known problem with this patch, which involves name lookup
of operator names (e.g., "x.operator int*()") in cases where multiple
PCH files in the chain. The hash function itself depends on having a
stable type ID, which doesn't happen with chained PCH and *certainly*
doesn't happen when sliding type IDs around. We'll need another
approach. I'll tackle that next.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@136693 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Serialization/ASTBitCodes.h
include/clang/Serialization/ASTReader.h
include/clang/Serialization/ContinuousRangeMap.h
lib/Serialization/ASTReader.cpp
lib/Serialization/ASTWriter.cpp