I am reverting this commit as it depends on r315251. See r315251 thread for reason.
On Tue, Oct 10, 2017 at 2:49 AM Richard Smith via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: rsmith > Date: Mon Oct 9 17:49:38 2017 > New Revision: 315256 > > URL: http://llvm.org/viewvc/llvm-project?rev=315256&view=rev > Log: > [Modules TS] Avoid computing the linkage of the enclosing DeclContext for > a declaration in the global module. > > This works around a language issue where adding a typedef name for linkage > purposes changes the linkage of an already-defined class after it becomes > complete. > > Added: > cfe/trunk/test/Modules/anon-linkage.cpp > Modified: > cfe/trunk/include/clang/AST/DeclBase.h > cfe/trunk/include/clang/Sema/Sema.h > cfe/trunk/lib/AST/Decl.cpp > > Modified: cfe/trunk/include/clang/AST/DeclBase.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=315256&r1=315255&r2=315256&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/AST/DeclBase.h (original) > +++ cfe/trunk/include/clang/AST/DeclBase.h Mon Oct 9 17:49:38 2017 > @@ -740,7 +740,10 @@ public: > > /// Get the module that owns this declaration for linkage purposes. > /// There only ever is such a module under the C++ Modules TS. > - Module *getOwningModuleForLinkage() const; > + /// > + /// \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; > > /// \brief Determine whether this declaration might be hidden from name > /// lookup. Note that the declaration might be visible even if this > returns > > Modified: cfe/trunk/include/clang/Sema/Sema.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=315256&r1=315255&r2=315256&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Sema/Sema.h (original) > +++ cfe/trunk/include/clang/Sema/Sema.h Mon Oct 9 17:49:38 2017 > @@ -3051,8 +3051,11 @@ public: > > RedeclarationKind forRedeclarationInCurContext() { > // A declaration with an owning module for linkage can never link > against > - // anything that is not visible. > - if (cast<Decl>(CurContext)->getOwningModuleForLinkage()) > + // 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<Decl>(CurContext) > + ->getOwningModuleForLinkage(/*IgnoreLinkage*/true)) > return ForVisibleRedeclaration; > return ForExternalRedeclaration; > } > > Modified: cfe/trunk/lib/AST/Decl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=315256&r1=315255&r2=315256&view=diff > > ============================================================================== > --- cfe/trunk/lib/AST/Decl.cpp (original) > +++ cfe/trunk/lib/AST/Decl.cpp Mon Oct 9 17:49:38 2017 > @@ -1395,7 +1395,7 @@ LinkageInfo LinkageComputer::getDeclLink > : > NamedDecl::VisibilityForValue)); > } > > -Module *Decl::getOwningModuleForLinkage() const { > +Module *Decl::getOwningModuleForLinkage(bool IgnoreLinkage) const { > Module *M = getOwningModule(); > if (!M) > return nullptr; > @@ -1413,6 +1413,8 @@ Module *Decl::getOwningModuleForLinkage( > // 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<NamedDecl>(this)) > InternalLinkage = !ND->hasExternalFormalLinkage(); > > Added: cfe/trunk/test/Modules/anon-linkage.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/anon-linkage.cpp?rev=315256&view=auto > > ============================================================================== > --- cfe/trunk/test/Modules/anon-linkage.cpp (added) > +++ cfe/trunk/test/Modules/anon-linkage.cpp Mon Oct 9 17:49:38 2017 > @@ -0,0 +1,12 @@ > +// 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; > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits