]> granicus.if.org Git - clang/commit
Ensure that the identifier chains have the most recent declaration after module deser...
authorDouglas Gregor <dgregor@apple.com>
Mon, 18 Feb 2013 15:53:43 +0000 (15:53 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 18 Feb 2013 15:53:43 +0000 (15:53 +0000)
commitaa945900d5438984bdcaac85c4f54868292231f4
tree3dbdeb36b0741abc4b881816eeec040eafcaa9da
parent82282dc907a04b1931f8f578693b035ad751fd3b
Ensure that the identifier chains have the most recent declaration after module deserialization.

This commit introduces a set of related changes to ensure that the
declaration that shows up in the identifier chain after deserializing
declarations with a given identifier is, in fact, the most recent
declaration. The primary change involves waiting until after we
deserialize and wire up redeclaration chains before updating the
identifier chains. There is a minor optimization in here to avoid
recursively deserializing names as part of looking to see whether
top-level declarations for a given name exist.

A related change that became suddenly more urgent is to property
record a merged declaration when an entity first declared in the
current translation unit is later deserialized from a module (that had
not been loaded at the time of the original declaration). Since we key
off the canonical declaration (which is parsed, not from an AST file)
for emitted redeclarations, we simply record this as a merged
declaration during AST writing and let the readers merge them.

Re-fixes <rdar://problem/13189985>, presumably for good this time.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175447 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Serialization/ASTReader.h
lib/Serialization/ASTReader.cpp
lib/Serialization/ASTReaderDecl.cpp
lib/Serialization/ASTWriter.cpp
test/Modules/Inputs/redecl-merge-left.h
test/Modules/Inputs/redecl-merge-right.h
test/Modules/Inputs/redecl-merge-top.h
test/Modules/redecl-merge.m