Thanks for looking. It seems your commit exposed some other issue. Now, unfortunately, it has stopped being reproducible. Thanks for looking anyway.
A good bug will show itself sooner or later. Thanks Galina On Mon, Sep 18, 2017 at 3:49 PM, Douglas Gregor <dgre...@apple.com> wrote: > > On Sep 18, 2017, at 3:11 PM, Richard Smith <rich...@metafoo.co.uk> wrote: > > On 18 September 2017 at 14:34, Douglas Gregor via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> >> On Sep 18, 2017, at 1:45 PM, Galina Kistanova <gkistan...@gmail.com> >> wrote: >> >> Hello Douglas, >> >> Your r313316 commit broke one of our builders on Thursday, Sep-14th. >> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64- >> scei-ps4-ubuntu-fast/builds/17506 >> >> Are you about to commit the fix, or shall I revert that commit to give >> you more time? >> >> >> I’m unable to reproduce this issue, and it’s weirdly not hitting the >> other bots. >> >> Is anyone able to reproduce this? The stack trace is… insufficient… to >> figure out what’s going on. >> > > I think that bot might be the only one with a target whose default C++ > language mode is C++11. > > > Hmm. It’s not the C++ RUN lines that are failing, though; it’s the default > (Objective-C) one. > > - Doug > > > >> - Doug >> >> >> Thanks >> >> Galina >> >> On Thu, Sep 14, 2017 at 4:38 PM, Douglas Gregor via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> Author: dgregor >>> Date: Thu Sep 14 16:38:44 2017 >>> New Revision: 313316 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=313316&view=rev >>> Log: >>> [Module map] Introduce a private module re-export directive. >>> >>> Introduce a new "export_as" directive for top-level modules, which >>> indicates that the current module is a "private" module whose symbols >>> will eventually be exported through the named "public" module. This is >>> in support of a common pattern in the Darwin ecosystem where a single >>> public framework is constructed of several private frameworks, with >>> (currently) header duplication and some support from the linker. >>> >>> Addresses rdar://problem/34438420. >>> >>> Added: >>> cfe/trunk/test/Modules/Inputs/export_as_test.modulemap >>> cfe/trunk/test/Modules/export_as_test.c >>> Modified: >>> cfe/trunk/docs/Modules.rst >>> cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td >>> cfe/trunk/include/clang/Basic/Module.h >>> cfe/trunk/include/clang/Serialization/ASTBitCodes.h >>> cfe/trunk/lib/Basic/Module.cpp >>> cfe/trunk/lib/Lex/ModuleMap.cpp >>> cfe/trunk/lib/Serialization/ASTReader.cpp >>> cfe/trunk/lib/Serialization/ASTWriter.cpp >>> >>> Modified: cfe/trunk/docs/Modules.rst >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/Modules.r >>> st?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/docs/Modules.rst (original) >>> +++ cfe/trunk/docs/Modules.rst Thu Sep 14 16:38:44 2017 >>> @@ -323,11 +323,12 @@ Module map files use a simplified form o >>> >>> .. parsed-literal:: >>> >>> - ``config_macros`` ``export`` ``private`` >>> + ``config_macros`` ``export_as`` ``private`` >>> ``conflict`` ``framework`` ``requires`` >>> ``exclude`` ``header`` ``textual`` >>> ``explicit`` ``link`` ``umbrella`` >>> ``extern`` ``module`` ``use`` >>> + ``export`` >>> >>> Module map file >>> --------------- >>> @@ -387,6 +388,7 @@ Modules can have a number of different k >>> *umbrella-dir-declaration* >>> *submodule-declaration* >>> *export-declaration* >>> + *export-as-declaration* >>> *use-declaration* >>> *link-declaration* >>> *config-macros-declaration* >>> @@ -666,6 +668,31 @@ Note that, if ``Derived.h`` includes ``B >>> compatibility for programs that rely on transitive inclusion (i.e., >>> all of them). >>> >>> +Re-export Declaration >>> +~~~~~~~~~~~~~~~~~~ >>> +An *export-as-declaration* specifies that the current module is a >>> private >>> +module whose interface will be re-exported by the named public module. >>> + >>> +.. parsed-literal:: >>> + >>> + *export-as-declaration*: >>> + ``export_as`` *identifier* >>> + >>> +The *export-as-declaration* names the public module that the current >>> +(private) module will be re-exported through. Only top-level modules >>> +can be re-exported, and any given module may only be re-exported >>> +through a single public module. >>> + >>> +**Example:** In the following example, the (private) module >>> +``MyFrameworkCore`` will be re-exported via the public module >>> +``MyFramework``: >>> + >>> +.. parsed-literal:: >>> + >>> + module MyFrameworkCore { >>> + export_as MyFramework >>> + } >>> + >>> Use declaration >>> ~~~~~~~~~~~~~~~ >>> A *use-declaration* specifies another module that the current top-level >>> module >>> >>> Modified: cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >>> Basic/DiagnosticLexKinds.td?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td (original) >>> +++ cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td Thu Sep 14 >>> 16:38:44 2017 >>> @@ -674,6 +674,13 @@ def err_mmap_invalid_header_attribute_va >>> "expected integer literal as value for header attribute '%0'">; >>> def err_mmap_expected_header_attribute : Error< >>> "expected a header attribute name ('size' or 'mtime')">; >>> +def err_mmap_conflicting_export_as : Error< >>> + "conflicting re-export of module '%0' as '%1' or '%2'">; >>> +def warn_mmap_redundant_export_as : Warning< >>> + "module '%0' already re-exported as '%1'">, >>> + InGroup<PrivateModule>; >>> +def err_mmap_submodule_export_as : Error< >>> + "only top-level modules can be re-exported as public">; >>> >>> def warn_auto_module_import : Warning< >>> "treating #%select{include|import|include_next|__include_macros}0 as >>> an " >>> >>> Modified: cfe/trunk/include/clang/Basic/Module.h >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >>> Basic/Module.h?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/include/clang/Basic/Module.h (original) >>> +++ cfe/trunk/include/clang/Basic/Module.h Thu Sep 14 16:38:44 2017 >>> @@ -99,6 +99,10 @@ public: >>> >>> /// \brief The name of the umbrella entry, as written in the module >>> map. >>> std::string UmbrellaAsWritten; >>> + >>> + /// \brief The module through which entities defined in this module >>> will >>> + /// eventually be exposed, for use in "private" modules. >>> + std::string ExportAsModule; >>> >>> private: >>> /// \brief The submodules of this module, indexed by name. >>> >>> Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >>> Serialization/ASTBitCodes.h?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original) >>> +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Thu Sep 14 >>> 16:38:44 2017 >>> @@ -716,6 +716,9 @@ namespace clang { >>> /// \brief Specifies some declarations with initializers that >>> must be >>> /// emitted to initialize the module. >>> SUBMODULE_INITIALIZERS = 16, >>> + /// \brief Specifies the name of the module that will eventually >>> + /// re-export the entities in this module. >>> + SUBMODULE_EXPORT_AS = 17, >>> }; >>> >>> /// \brief Record types used within a comments block. >>> >>> Modified: cfe/trunk/lib/Basic/Module.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Modu >>> le.cpp?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Basic/Module.cpp (original) >>> +++ cfe/trunk/lib/Basic/Module.cpp Thu Sep 14 16:38:44 2017 >>> @@ -440,6 +440,11 @@ void Module::print(raw_ostream &OS, unsi >>> } >>> } >>> >>> + if (!ExportAsModule.empty()) { >>> + OS.indent(Indent + 2); >>> + OS << "export_as" << ExportAsModule << "\n"; >>> + } >>> + >>> for (submodule_const_iterator MI = submodule_begin(), MIEnd = >>> submodule_end(); >>> MI != MIEnd; ++MI) >>> // Print inferred subframework modules so that we don't need to >>> re-infer >>> >>> Modified: cfe/trunk/lib/Lex/ModuleMap.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Module >>> Map.cpp?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Lex/ModuleMap.cpp (original) >>> +++ cfe/trunk/lib/Lex/ModuleMap.cpp Thu Sep 14 16:38:44 2017 >>> @@ -1201,6 +1201,7 @@ namespace clang { >>> ExcludeKeyword, >>> ExplicitKeyword, >>> ExportKeyword, >>> + ExportAsKeyword, >>> ExternKeyword, >>> FrameworkKeyword, >>> LinkKeyword, >>> @@ -1312,6 +1313,7 @@ namespace clang { >>> SourceLocation LeadingLoc); >>> void parseUmbrellaDirDecl(SourceLocation UmbrellaLoc); >>> void parseExportDecl(); >>> + void parseExportAsDecl(); >>> void parseUseDecl(); >>> void parseLinkDecl(); >>> void parseConfigMacros(); >>> @@ -1363,6 +1365,7 @@ retry: >>> .Case("exclude", MMToken::ExcludeKeyword) >>> .Case("explicit", MMToken::ExplicitKeyword) >>> .Case("export", MMToken::ExportKeyword) >>> + .Case("export_as", MMToken::ExportAsKeyword) >>> .Case("extern", MMToken::ExternKeyword) >>> .Case("framework", MMToken::FrameworkKeyword) >>> .Case("header", MMToken::HeaderKeyword) >>> @@ -1590,6 +1593,7 @@ namespace { >>> /// header-declaration >>> /// submodule-declaration >>> /// export-declaration >>> +/// export-as-declaration >>> /// link-declaration >>> /// >>> /// submodule-declaration: >>> @@ -1824,6 +1828,10 @@ void ModuleMapParser::parseModuleDecl() >>> parseExportDecl(); >>> break; >>> >>> + case MMToken::ExportAsKeyword: >>> + parseExportAsDecl(); >>> + break; >>> + >>> case MMToken::UseKeyword: >>> parseUseDecl(); >>> break; >>> @@ -2284,6 +2292,41 @@ void ModuleMapParser::parseExportDecl() >>> ActiveModule->UnresolvedExports.push_back(Unresolved); >>> } >>> >>> +/// \brief Parse a module export_as declaration. >>> +/// >>> +/// export-as-declaration: >>> +/// 'export_as' identifier >>> +void ModuleMapParser::parseExportAsDecl() { >>> + assert(Tok.is <http://tok.is/>(MMToken::ExportAsKeyword)); >>> + consumeToken(); >>> + >>> + if (!Tok.is <http://tok.is/>(MMToken::Identifier)) { >>> + Diags.Report(Tok.getLocation(), diag::err_mmap_module_id); >>> + HadError = true; >>> + return; >>> + } >>> + >>> + if (ActiveModule->Parent) { >>> + Diags.Report(Tok.getLocation(), diag::err_mmap_submodule_expor >>> t_as); >>> + consumeToken(); >>> + return; >>> + } >>> + >>> + if (!ActiveModule->ExportAsModule.empty()) { >>> + if (ActiveModule->ExportAsModule == Tok.getString()) { >>> + Diags.Report(Tok.getLocation(), diag::warn_mmap_redundant_expo >>> rt_as) >>> + << ActiveModule->Name << Tok.getString(); >>> + } else { >>> + Diags.Report(Tok.getLocation(), diag::err_mmap_conflicting_exp >>> ort_as) >>> + << ActiveModule->Name << ActiveModule->ExportAsModule >>> + << Tok.getString(); >>> + } >>> + } >>> + >>> + ActiveModule->ExportAsModule = Tok.getString(); >>> + consumeToken(); >>> +} >>> + >>> /// \brief Parse a module use declaration. >>> /// >>> /// use-declaration: >>> @@ -2689,6 +2732,7 @@ bool ModuleMapParser::parseModuleMapFile >>> case MMToken::Exclaim: >>> case MMToken::ExcludeKeyword: >>> case MMToken::ExportKeyword: >>> + case MMToken::ExportAsKeyword: >>> case MMToken::HeaderKeyword: >>> case MMToken::Identifier: >>> case MMToken::LBrace: >>> >>> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serializat >>> ion/ASTReader.cpp?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) >>> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Thu Sep 14 16:38:44 2017 >>> @@ -5123,7 +5123,7 @@ ASTReader::ReadSubmoduleBlock(ModuleFile >>> break; >>> } >>> >>> - case SUBMODULE_INITIALIZERS: >>> + case SUBMODULE_INITIALIZERS: { >>> if (!ContextObj) >>> break; >>> SmallVector<uint32_t, 16> Inits; >>> @@ -5132,6 +5132,11 @@ ASTReader::ReadSubmoduleBlock(ModuleFile >>> ContextObj->addLazyModuleInitializers(CurrentModule, Inits); >>> break; >>> } >>> + >>> + case SUBMODULE_EXPORT_AS: >>> + CurrentModule->ExportAsModule = Blob.str(); >>> + break; >>> + } >>> } >>> } >>> >>> >>> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serializat >>> ion/ASTWriter.cpp?rev=313316&r1=313315&r2=313316&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) >>> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Thu Sep 14 16:38:44 2017 >>> @@ -1130,6 +1130,7 @@ void ASTWriter::WriteBlockInfoBlock() { >>> RECORD(SUBMODULE_TEXTUAL_HEADER); >>> RECORD(SUBMODULE_PRIVATE_TEXTUAL_HEADER); >>> RECORD(SUBMODULE_INITIALIZERS); >>> + RECORD(SUBMODULE_EXPORT_AS); >>> >>> // Comments Block. >>> BLOCK(COMMENTS_BLOCK); >>> @@ -2791,6 +2792,12 @@ void ASTWriter::WriteSubmodules(Module * >>> Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Message >>> unsigned ConflictAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); >>> >>> + Abbrev = std::make_shared<BitCodeAbbrev>(); >>> + Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_EXPORT_AS)); >>> + Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Macro name >>> + unsigned ExportAsAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); >>> + >>> + >>> // Write the submodule metadata block. >>> RecordData::value_type Record[] = { >>> getNumberOfModules(WritingModule), >>> @@ -2925,6 +2932,12 @@ void ASTWriter::WriteSubmodules(Module * >>> if (!Inits.empty()) >>> Stream.EmitRecord(SUBMODULE_INITIALIZERS, Inits); >>> >>> + // Emit the name of the re-exported module, if any. >>> + if (!Mod->ExportAsModule.empty()) { >>> + RecordData::value_type Record[] = {SUBMODULE_EXPORT_AS}; >>> + Stream.EmitRecordWithBlob(ExportAsAbbrev, Record, >>> Mod->ExportAsModule); >>> + } >>> + >>> // Queue up the submodules of this module. >>> for (auto *M : Mod->submodules()) >>> Q.push(M); >>> >>> Added: cfe/trunk/test/Modules/Inputs/export_as_test.modulemap >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/I >>> nputs/export_as_test.modulemap?rev=313316&view=auto >>> ============================================================ >>> ================== >>> --- cfe/trunk/test/Modules/Inputs/export_as_test.modulemap (added) >>> +++ cfe/trunk/test/Modules/Inputs/export_as_test.modulemap Thu Sep 14 >>> 16:38:44 2017 >>> @@ -0,0 +1,9 @@ >>> +module PrivateFoo { >>> + export_as Foo >>> + export_as Bar >>> + export_as Bar >>> + >>> + module Sub { >>> + export_as Wibble >>> + } >>> +} >>> >>> Added: cfe/trunk/test/Modules/export_as_test.c >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/e >>> xport_as_test.c?rev=313316&view=auto >>> ============================================================ >>> ================== >>> --- cfe/trunk/test/Modules/export_as_test.c (added) >>> +++ cfe/trunk/test/Modules/export_as_test.c Thu Sep 14 16:38:44 2017 >>> @@ -0,0 +1,9 @@ >>> +// RUN: rm -rf %t >>> +// RUN: not %clang_cc1 -fmodules -fmodules-cache-path=%t >>> -fmodule-map-file=%S/Inputs/export_as_test.modulemap %s 2> %t.err >>> +// RUN: FileCheck %s < %t.err >>> + >>> +// CHECK: export_as_test.modulemap:3:13: error: conflicting re-export >>> of module 'PrivateFoo' as 'Foo' or 'Bar' >>> +// CHECK: export_as_test.modulemap:4:13: warning: module 'PrivateFoo' >>> already re-exported as 'Bar' >>> +// CHECK: export_as_test.modulemap:7:15: error: only top-level modules >>> can be re-exported as public >>> + >>> + >>> >>> >>> _______________________________________________ >>> 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 >> >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits