Thanks, should hopefully be fixed in r203548.
On Mon, Mar 10, 2014 at 11:30 PM, Michael Spencer <[email protected]>wrote: > On Mon, Mar 10, 2014 at 8:10 PM, Richard Smith > <[email protected]> wrote: > > Author: rsmith > > Date: Mon Mar 10 22:10:46 2014 > > New Revision: 203534 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=203534&view=rev > > Log: > > If a visibility update record is found for a DeclContext after that Decl > has > > already been loaded, apply that update record to the Decl immediately, > rather > > than adding it to a pending list and never applying it. > > > > Added: > > cfe/trunk/test/Modules/Inputs/update-after-load/ > > cfe/trunk/test/Modules/Inputs/update-after-load/a.h > > cfe/trunk/test/Modules/Inputs/update-after-load/b.h > > cfe/trunk/test/Modules/Inputs/update-after-load/module.map > > cfe/trunk/test/Modules/Inputs/update-after-load/modules.timestamp > > cfe/trunk/test/Modules/update-after-load.cpp > > Modified: > > cfe/trunk/include/clang/Serialization/Module.h > > cfe/trunk/lib/Serialization/ASTReader.cpp > > cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > > cfe/trunk/lib/Serialization/Module.cpp > > > > Modified: cfe/trunk/include/clang/Serialization/Module.h > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/Module.h?rev=203534&r1=203533&r2=203534&view=diff > > > ============================================================================== > > --- cfe/trunk/include/clang/Serialization/Module.h (original) > > +++ cfe/trunk/include/clang/Serialization/Module.h Mon Mar 10 22:10:46 > 2014 > > @@ -44,13 +44,21 @@ enum ModuleKind { > > MK_MainFile ///< File is a PCH file treated as the actual main file. > > }; > > > > +/// A custom deleter for DeclContextInfo::NameLookupTableData, to allow > > +/// an incomplete type to be used there. > > +struct NameLookupTableDataDeleter { > > + void operator()( > > + OnDiskChainedHashTable<reader::ASTDeclContextNameLookupTrait> > *Ptr) const; > > +}; > > + > > /// \brief Information about the contents of a DeclContext. > > struct DeclContextInfo { > > DeclContextInfo() > > - : NameLookupTableData(), LexicalDecls(), NumLexicalDecls() {} > > + : NameLookupTableData(), LexicalDecls(), NumLexicalDecls() {} > > > > - OnDiskChainedHashTable<reader::ASTDeclContextNameLookupTrait> > > - *NameLookupTableData; // an ASTDeclContextNameLookupTable. > > + /// An ASTDeclContextNameLookupTable. > > + > > std::unique_ptr<OnDiskChainedHashTable<reader::ASTDeclContextNameLookupTrait>, > > + NameLookupTableDataDeleter> NameLookupTableData; > > const KindDeclIDPair *LexicalDecls; > > unsigned NumLexicalDecls; > > }; > > > > Modified: cfe/trunk/lib/Serialization/ASTReader.cpp > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=203534&r1=203533&r2=203534&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) > > +++ cfe/trunk/lib/Serialization/ASTReader.cpp Mon Mar 10 22:10:46 2014 > > @@ -457,6 +457,11 @@ ASTReader::setDeserializationListener(AS > > } > > > > > > +void NameLookupTableDataDeleter:: > > +operator()(ASTDeclContextNameLookupTable *Ptr) const { > > + delete Ptr; > > +} > > + > > > > unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) { > > return serialization::ComputeHash(Sel); > > @@ -836,11 +841,10 @@ bool ASTReader::ReadDeclContextStorage(M > > Error("Expected visible lookup table block"); > > return true; > > } > > - Info.NameLookupTableData > > - = ASTDeclContextNameLookupTable::Create( > > - (const unsigned char *)Blob.data() + Record[0], > > - (const unsigned char *)Blob.data(), > > - ASTDeclContextNameLookupTrait(*this, M)); > > + > Info.NameLookupTableData.reset(ASTDeclContextNameLookupTable::Create( > > + (const unsigned char *)Blob.data() + Record[0], > > + (const unsigned char *)Blob.data(), > > + ASTDeclContextNameLookupTrait(*this, M))); > > } > > > > return false; > > @@ -2493,8 +2497,12 @@ bool ASTReader::ReadASTBlock(ModuleFile > > ASTDeclContextNameLookupTrait(*this, F)); > > if (ID == PREDEF_DECL_TRANSLATION_UNIT_ID) { // Is it the TU? > > DeclContext *TU = Context.getTranslationUnitDecl(); > > - F.DeclContextInfos[TU].NameLookupTableData = Table; > > + F.DeclContextInfos[TU].NameLookupTableData.reset(Table); > > TU->setHasExternalVisibleStorage(true); > > + } else if (Decl *D = DeclsLoaded[ID - NUM_PREDEF_DECL_IDS]) { > > + auto *DC = cast<DeclContext>(D); > > + DC->getPrimaryContext()->setHasExternalVisibleStorage(true); > > + F.DeclContextInfos[DC].NameLookupTableData.reset(Table); > > } else > > PendingVisibleUpdates[ID].push_back(std::make_pair(Table, &F)); > > break; > > @@ -6078,7 +6086,7 @@ namespace { > > return false; > > > > // Look for this name within this module. > > - ASTDeclContextNameLookupTable *LookupTable = > > + const auto &LookupTable = > > Info->second.NameLookupTableData; > > ASTDeclContextNameLookupTable::iterator Pos > > = LookupTable->find(This->Name); > > @@ -6208,7 +6216,7 @@ namespace { > > if (!FoundInfo) > > return false; > > > > - ASTDeclContextNameLookupTable *LookupTable = > > + const auto &LookupTable = > > Info->second.NameLookupTableData; > > bool FoundAnything = false; > > for (ASTDeclContextNameLookupTable::data_iterator > > > > Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=203534&r1=203533&r2=203534&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) > > +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Mon Mar 10 22:10:46 > 2014 > > @@ -2609,13 +2609,9 @@ Decl *ASTReader::ReadDeclRecord(DeclID I > > // There are updates. This means the context has external visible > > // storage, even if the original stored version didn't. > > LookupDC->setHasExternalVisibleStorage(true); > > - DeclContextVisibleUpdates &U = I->second; > > - for (DeclContextVisibleUpdates::iterator UI = U.begin(), UE = > U.end(); > > - UI != UE; ++UI) { > > - DeclContextInfo &Info = UI->second->DeclContextInfos[DC]; > > - delete Info.NameLookupTableData; > > - Info.NameLookupTableData = UI->first; > > - } > > + for (const auto &Update : I->second) > > + Update.second->DeclContextInfos[DC].NameLookupTableData.reset( > > + Update.first); > > PendingVisibleUpdates.erase(I); > > } > > } > > > > Modified: cfe/trunk/lib/Serialization/Module.cpp > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/Module.cpp?rev=203534&r1=203533&r2=203534&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/Serialization/Module.cpp (original) > > +++ cfe/trunk/lib/Serialization/Module.cpp Mon Mar 10 22:10:46 2014 > > @@ -45,13 +45,6 @@ ModuleFile::ModuleFile(ModuleKind Kind, > > {} > > > > ModuleFile::~ModuleFile() { > > - for (DeclContextInfosMap::iterator I = DeclContextInfos.begin(), > > - E = DeclContextInfos.end(); > > - I != E; ++I) { > > - if (I->second.NameLookupTableData) > > - delete I->second.NameLookupTableData; > > - } > > - > > delete static_cast<ASTIdentifierLookupTable *>(IdentifierLookupTable); > > delete static_cast<HeaderFileInfoLookupTable *>(HeaderFileInfoTable); > > delete static_cast<ASTSelectorLookupTable *>(SelectorLookupTable); > > > > Added: cfe/trunk/test/Modules/Inputs/update-after-load/a.h > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/update-after-load/a.h?rev=203534&view=auto > > > ============================================================================== > > --- cfe/trunk/test/Modules/Inputs/update-after-load/a.h (added) > > +++ cfe/trunk/test/Modules/Inputs/update-after-load/a.h Mon Mar 10 > 22:10:46 2014 > > @@ -0,0 +1 @@ > > +namespace llvm {} > > > > Added: cfe/trunk/test/Modules/Inputs/update-after-load/b.h > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/update-after-load/b.h?rev=203534&view=auto > > > ============================================================================== > > --- cfe/trunk/test/Modules/Inputs/update-after-load/b.h (added) > > +++ cfe/trunk/test/Modules/Inputs/update-after-load/b.h Mon Mar 10 > 22:10:46 2014 > > @@ -0,0 +1,2 @@ > > +#include "a.h" > > +namespace llvm { void f(); } > > > > Added: cfe/trunk/test/Modules/Inputs/update-after-load/module.map > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/update-after-load/module.map?rev=203534&view=auto > > > ============================================================================== > > --- cfe/trunk/test/Modules/Inputs/update-after-load/module.map (added) > > +++ cfe/trunk/test/Modules/Inputs/update-after-load/module.map Mon Mar > 10 22:10:46 2014 > > @@ -0,0 +1 @@ > > +module a { header "a.h" } module b { header "b.h" } > > > > Added: cfe/trunk/test/Modules/Inputs/update-after-load/modules.timestamp > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/update-after-load/modules.timestamp?rev=203534&view=auto > > > ============================================================================== > > (empty) > > > > Added: cfe/trunk/test/Modules/update-after-load.cpp > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/update-after-load.cpp?rev=203534&view=auto > > > ============================================================================== > > --- cfe/trunk/test/Modules/update-after-load.cpp (added) > > +++ cfe/trunk/test/Modules/update-after-load.cpp Mon Mar 10 22:10:46 2014 > > @@ -0,0 +1,8 @@ > > +// RUN: rm -rf %t > > +// RUN: %clang_cc1 -fmodules -I %S/Inputs/update-after-load -verify > -fmodules-cache-path=%t %s > > + > > +// expected-no-diagnostics > > +#include "a.h" > > +namespace llvm {} > > +#include "b.h" > > +void llvm::f() {} > > > > > > _______________________________________________ > > cfe-commits mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > This breaks the VS 2012 build. It tries to create a default > DeclContextInfo::DeclContextInfo(const DeclContextInfo&), but that > fails because of the unique_ptr. > > - Michael Spencer >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
