]> granicus.if.org Git - clang/commit
C++ modules: fix a bug where loading a declaration with some name would prevent
authorRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 9 Sep 2013 07:34:56 +0000 (07:34 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 9 Sep 2013 07:34:56 +0000 (07:34 +0000)
commitb7165589b2eafc4b48d09a5914e21604ae580256
tree8f0d050aa18cfcd6365ffed6909aa23932a44cf3
parente904acfb439faa186fcbe7312861a222d8df4f91
C++ modules: fix a bug where loading a declaration with some name would prevent
name lookup from lazily deserializing the other declarations with the same
name, by tracking a bit to indicate whether a name in a DeclContext might have
additional external results. This also allows lazier reconciling of the lookup
table if a module import adds decls to a pre-existing DC.

However, this exposes a pre-existing bug, which causes a regression in
test/Modules/decldef.mm: if we have a reference to a declaration, and a
later-imported module adds a redeclaration, nothing causes us to load that
redeclaration when we use or emit the reference (which can manifest as a
reference to an undefined inline function, a use of an incomplete type, and so
on). decldef.mm has been extended with an additional testcase which fails with
or without this change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190293 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/DeclContextInternals.h
lib/AST/DeclBase.cpp
lib/Sema/SemaType.cpp
test/Modules/Inputs/def.h
test/Modules/Inputs/namespaces-top.h
test/Modules/cxx-templates.cpp
test/Modules/decldef.mm
test/Modules/namespaces.cpp