summaryrefslogtreecommitdiffstats
path: root/lib/Sema/SemaLookup.cpp
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2017-10-10 13:09:40 +0000
committerEric Liu <ioeric@google.com>2017-10-10 13:09:40 +0000
commite8f1fa7770f1d9c8a25344b3c342aef7bb8c0bca (patch)
treea4ca0cc33605603dd3c587cb671b4ee75defb9a4 /lib/Sema/SemaLookup.cpp
parent5c21b0272a1bf5bfa17457368afcbd097ea1314e (diff)
Revert "[Modules TS] Module ownership semantics for redeclarations."
This reverts commit r315251. See the original commit thread for reason. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315309 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaLookup.cpp')
-rw-r--r--lib/Sema/SemaLookup.cpp30
1 files changed, 1 insertions, 29 deletions
diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp
index 6fb0260075..a89d3ace24 100644
--- a/lib/Sema/SemaLookup.cpp
+++ b/lib/Sema/SemaLookup.cpp
@@ -1609,39 +1609,11 @@ bool Sema::isVisibleSlow(const NamedDecl *D) {
}
bool Sema::shouldLinkPossiblyHiddenDecl(LookupResult &R, const NamedDecl *New) {
- // FIXME: If there are both visible and hidden declarations, we need to take
- // into account whether redeclaration is possible. Example:
- //
- // Non-imported module:
- // int f(T); // #1
- // Some TU:
- // static int f(U); // #2, not a redeclaration of #1
- // int f(T); // #3, finds both, should link with #1 if T != U, but
- // // with #2 if T == U; neither should be ambiguous.
for (auto *D : R) {
if (isVisible(D))
return true;
- assert(D->isExternallyDeclarable() &&
- "should not have hidden, non-externally-declarable result here");
}
-
- // This function is called once "New" is essentially complete, but before a
- // previous declaration is attached. We can't query the linkage of "New" in
- // general, because attaching the previous declaration can change the
- // linkage of New to match the previous declaration.
- //
- // However, because we've just determined that there is no *visible* prior
- // declaration, we can compute the linkage here. There are two possibilities:
- //
- // * This is not a redeclaration; it's safe to compute the linkage now.
- //
- // * This is a redeclaration of a prior declaration that is externally
- // redeclarable. In that case, the linkage of the declaration is not
- // changed by attaching the prior declaration, because both are externally
- // declarable (and thus ExternalLinkage or VisibleNoLinkage).
- //
- // FIXME: This is subtle and fragile.
- return New->isExternallyDeclarable();
+ return New->isExternallyVisible();
}
/// \brief Retrieve the visible declaration corresponding to D, if any.