From 5c21b0272a1bf5bfa17457368afcbd097ea1314e Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Tue, 10 Oct 2017 13:00:18 +0000 Subject: [PATCH] Revert "[Modules TS] Avoid computing the linkage of the enclosing DeclContext for a declaration in the global module." This reverts commit r315256. See the original commit thread for reason. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315308 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/DeclBase.h | 5 +---- include/clang/Sema/Sema.h | 7 ++----- lib/AST/Decl.cpp | 4 +--- test/Modules/anon-linkage.cpp | 12 ------------ 4 files changed, 4 insertions(+), 24 deletions(-) delete mode 100644 test/Modules/anon-linkage.cpp diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 47515a848a..aa278c301e 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -740,10 +740,7 @@ public: /// Get the module that owns this declaration for linkage purposes. /// There only ever is such a module under the C++ Modules TS. - /// - /// \param IgnoreLinkage Ignore the linkage of the entity; assume that - /// all declarations in a global module fragment are unowned. - Module *getOwningModuleForLinkage(bool IgnoreLinkage = false) const; + Module *getOwningModuleForLinkage() const; /// \brief Determine whether this declaration might be hidden from name /// lookup. Note that the declaration might be visible even if this returns diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index 277c62f543..f32fafa447 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -3051,11 +3051,8 @@ public: RedeclarationKind forRedeclarationInCurContext() { // A declaration with an owning module for linkage can never link against - // anything that is not visible. We don't need to check linkage here; if - // the context has internal linkage, redeclaration lookup won't find things - // from other TUs, and we can't safely compute linkage yet in general. - if (cast(CurContext) - ->getOwningModuleForLinkage(/*IgnoreLinkage*/true)) + // anything that is not visible. + if (cast(CurContext)->getOwningModuleForLinkage()) return ForVisibleRedeclaration; return ForExternalRedeclaration; } diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 4a9b9bea83..cdd89d20e6 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -1395,7 +1395,7 @@ LinkageInfo LinkageComputer::getDeclLinkageAndVisibility(const NamedDecl *D) { : NamedDecl::VisibilityForValue)); } -Module *Decl::getOwningModuleForLinkage(bool IgnoreLinkage) const { +Module *Decl::getOwningModuleForLinkage() const { Module *M = getOwningModule(); if (!M) return nullptr; @@ -1413,8 +1413,6 @@ Module *Decl::getOwningModuleForLinkage(bool IgnoreLinkage) const { // for linkage purposes. But internal linkage declarations in the global // module fragment of a particular module are owned by that module for // linkage purposes. - if (IgnoreLinkage) - return nullptr; bool InternalLinkage; if (auto *ND = dyn_cast(this)) InternalLinkage = !ND->hasExternalFormalLinkage(); diff --git a/test/Modules/anon-linkage.cpp b/test/Modules/anon-linkage.cpp deleted file mode 100644 index 590638292b..0000000000 --- a/test/Modules/anon-linkage.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -std=c++17 -fmodules-ts %s - -typedef struct { - int c; - union { - int n; - char c[4]; - } v; -} mbstate; - -export module M; -export using ::mbstate; -- 2.40.0