diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-04 03:27:32 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-04 03:27:32 +0000 |
commit | 6a7664c4a8b378da5a7f58d940d39b76fb0d6673 (patch) | |
tree | 80bedb6fa1b0316be820df0d2e760f39faa2a120 /lib/Sema/SemaDecl.cpp | |
parent | 4a3c6c6daebce44416a63bb19ad1ab7fe0d16354 (diff) |
Avoid computing the linkage instead of avoiding caching it.
This mostly reverts 178733, but keeps the tests.
I don't claim to understand how hidden sub modules work or when we need to see
them (is that documented?), but this has the same semantics and avoids adding
hasExternalLinkageUncached which has the same foot gun potential as the old
hasExternalLinkage.
Last but not least, not computing linkage when it is not needed is more
efficient.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178739 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 15 |
1 files changed, 1 insertions, 14 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index a25204d808..0ad539ef17 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1605,19 +1605,6 @@ static void filterNonConflictingPreviousDecls(ASTContext &context, if (previous.empty()) return; - // If this declaration would have external linkage if it were the first - // declaration of this name, then it may in fact be a redeclaration of - // some hidden declaration, so include those too. We don't need to worry - // about some previous visible declaration giving this declaration external - // linkage, because in that case, we'll mark this declaration as a redecl - // of the visible decl, and that decl will already be a redecl of the - // hidden declaration if that's appropriate. - // - // Don't cache this linkage computation, because it's not yet correct: we - // may later give this declaration a previous declaration which changes - // its linkage. - bool hasExternalLinkage = decl->hasExternalLinkageUncached(); - LookupResult::Filter filter = previous.makeFilter(); while (filter.hasNext()) { NamedDecl *old = filter.next(); @@ -1627,7 +1614,7 @@ static void filterNonConflictingPreviousDecls(ASTContext &context, continue; // If either has no-external linkage, ignore the old declaration. - if (!hasExternalLinkage || old->getLinkage() != ExternalLinkage) + if (old->getLinkage() != ExternalLinkage || !decl->hasExternalLinkage()) filter.erase(); } |