diff options
author | Eric Liu <ioeric@google.com> | 2017-10-10 13:09:40 +0000 |
---|---|---|
committer | Eric Liu <ioeric@google.com> | 2017-10-10 13:09:40 +0000 |
commit | e8f1fa7770f1d9c8a25344b3c342aef7bb8c0bca (patch) | |
tree | a4ca0cc33605603dd3c587cb671b4ee75defb9a4 /lib/Sema/SemaLookup.cpp | |
parent | 5c21b0272a1bf5bfa17457368afcbd097ea1314e (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.cpp | 30 |
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. |