<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 3, 2016, at 5:28 AM, Richard Smith via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><p dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">On 3 Mar 2016 3:18 a.m., "Argyrios Kyrtzidis via cfe-commits" <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:<br class="">><br class="">> Mind if we keep -fmodule-implementation-of as an alias so that we can gradually transition to -fmodule-name ?</p><p dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Sure, no problem.</p><p dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">> > On Feb 19, 2016, at 2:25 PM, Richard Smith via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:<br class="">> ><br class="">> > Author: rsmith<br class="">> > Date: Fri Feb 19 16:25:36 2016<br class="">> > New Revision: 261372<br class="">> ><br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=261372&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=261372&view=rev</a><br class="">> > Log:<br class="">> > [modules] Flatten -fmodule-name= and -fmodule-implementation-of= into a single<br class="">> > option. Previously these options could both be used to specify that you were<br class="">> > compiling the implementation file of a module, with a different set of minor<br class="">> > bugs in each case.<br class="">> ><br class="">> > This change removes -fmodule-implementation-of, and instead tracks a flag to<br class="">> > determine whether we're currently building a module. -fmodule-name now behaves<br class="">> > the same way that -fmodule-implementation-of previously did.<br class="">> ><br class="">> > Modified:<br class="">> >    cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td<br class="">> >    cfe/trunk/include/clang/Basic/LangOptions.def<br class="">> >    cfe/trunk/include/clang/Basic/LangOptions.h<br class="">> >    cfe/trunk/include/clang/Driver/CC1Options.td<br class="">> >    cfe/trunk/include/clang/Driver/Options.td<br class="">> >    cfe/trunk/include/clang/Lex/ModuleMap.h<br class="">> >    cfe/trunk/lib/Basic/LangOptions.cpp<br class="">> >    cfe/trunk/lib/Driver/Tools.cpp<br class="">> >    cfe/trunk/lib/Frontend/ASTUnit.cpp<br class="">> >    cfe/trunk/lib/Frontend/CompilerInstance.cpp<br class="">> >    cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br class="">> >    cfe/trunk/lib/Frontend/FrontendActions.cpp<br class="">> >    cfe/trunk/lib/Lex/ModuleMap.cpp<br class="">> >    cfe/trunk/lib/Lex/PPDirectives.cpp<br class="">> >    cfe/trunk/lib/Lex/PPMacroExpansion.cpp<br class="">> >    cfe/trunk/lib/Lex/Preprocessor.cpp<br class="">> >    cfe/trunk/lib/Sema/SemaDecl.cpp<br class="">> >    cfe/trunk/lib/Sema/SemaDeclObjC.cpp<br class="">> >    cfe/trunk/test/Modules/Inputs/explicit-build/a.h<br class="">> >    cfe/trunk/test/Modules/explicit-build.cpp<br class="">> >    cfe/trunk/test/Modules/implementation-of-module.m<br class="">> >    cfe/trunk/test/Modules/import-self.m<br class="">> ><br class="">> > Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original)<br class="">> > +++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Fri Feb 19 16:25:36 2016<br class="">> > @@ -210,10 +210,6 @@ def err_test_module_file_extension_versi<br class="">> >   "test module file extension '%0' has different version (%1.%2) than expected "<br class="">> >   "(%3.%4)">;<br class="">> ><br class="">> > -def err_conflicting_module_names : Error<<br class="">> > -  "conflicting module names specified: '-fmodule-name=%0' and "<br class="">> > -  "'-fmodule-implementation-of %1'">;<br class="">> > -<br class="">> > def err_missing_vfs_overlay_file : Error<<br class="">> >   "virtual filesystem overlay file '%0' not found">, DefaultFatal;<br class="">> > def err_invalid_vfs_overlay : Error<<br class="">> ><br class="">> > Modified: cfe/trunk/include/clang/Basic/LangOptions.def<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/include/clang/Basic/LangOptions.def (original)<br class="">> > +++ cfe/trunk/include/clang/Basic/LangOptions.def Fri Feb 19 16:25:36 2016<br class="">> > @@ -127,6 +127,7 @@ BENIGN_LANGOPT(EmitAllDecls      , 1, 0,<br class="">> > LANGOPT(MathErrno         , 1, 1, "errno support for math functions")<br class="">> > BENIGN_LANGOPT(HeinousExtensions , 1, 0, "Extensions that we really don't like and may be ripped out at any time")<br class="">> > LANGOPT(Modules           , 1, 0, "modules extension to C")<br class="">> > +BENIGN_LANGOPT(CompilingModule, 1, 0, "compiling a module interface")<br class="">> > COMPATIBLE_LANGOPT(ModulesDeclUse    , 1, 0, "require declaration of module uses")<br class="">> > LANGOPT(ModulesSearchAll  , 1, 1, "search even non-imported modules to find unresolved references")<br class="">> > COMPATIBLE_LANGOPT(ModulesStrictDeclUse, 1, 0, "require declaration of module uses and all headers to be in modules")<br class="">> ><br class="">> > Modified: cfe/trunk/include/clang/Basic/LangOptions.h<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/include/clang/Basic/LangOptions.h (original)<br class="">> > +++ cfe/trunk/include/clang/Basic/LangOptions.h Fri Feb 19 16:25:36 2016<br class="">> > @@ -92,14 +92,12 @@ public:<br class="">> >   /// If none is specified, abort (GCC-compatible behaviour).<br class="">> >   std::string OverflowHandler;<br class="">> ><br class="">> > -  /// \brief The name of the current module.<br class="">> > +  /// \brief The name of the current module, of which the main source file<br class="">> > +  /// is a part. If CompilingModule is set, we are compiling the interface<br class="">> > +  /// of this module, otherwise we are compiling an implementation file of<br class="">> > +  /// it.<br class="">> >   std::string CurrentModule;<br class="">> ><br class="">> > -  /// \brief The name of the module that the translation unit is an<br class="">> > -  /// implementation of. Prevents semantic imports, but does not otherwise<br class="">> > -  /// treat this as the CurrentModule.<br class="">> > -  std::string ImplementationOfModule;<br class="">> > -<br class="">> >   /// \brief The names of any features to enable in module 'requires' decls<br class="">> >   /// in addition to the hard-coded list in Module.cpp and the target features.<br class="">> >   ///<br class="">> ><br class="">> > Modified: cfe/trunk/include/clang/Driver/CC1Options.td<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/include/clang/Driver/CC1Options.td (original)<br class="">> > +++ cfe/trunk/include/clang/Driver/CC1Options.td Fri Feb 19 16:25:36 2016<br class="">> > @@ -382,9 +382,6 @@ def fno_modules_global_index : Flag<["-"<br class="">> >   HelpText<"Do not automatically generate or update the global module index">;<br class="">> > def fno_modules_error_recovery : Flag<["-"], "fno-modules-error-recovery">,<br class="">> >   HelpText<"Do not automatically import modules for error recovery">;<br class="">> > -def fmodule_implementation_of : Separate<["-"], "fmodule-implementation-of">,<br class="">> > -  MetaVarName<"<name>">,<br class="">> > -  HelpText<"Specify the name of the module whose implementation file this is">;<br class="">> > def fmodule_map_file_home_is_cwd : Flag<["-"], "fmodule-map-file-home-is-cwd">,<br class="">> >   HelpText<"Use the current working directory as the home directory of "<br class="">> >            "module maps specified by -fmodule-map-file=<FILE>">;<br class="">> ><br class="">> > Modified: cfe/trunk/include/clang/Driver/Options.td<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/include/clang/Driver/Options.td (original)<br class="">> > +++ cfe/trunk/include/clang/Driver/Options.td Fri Feb 19 16:25:36 2016<br class="">> > @@ -786,9 +786,10 @@ def fimplicit_module_maps : Flag <["-"],<br class="">> >   Flags<[DriverOption, CC1Option]>,<br class="">> >   HelpText<"Implicitly search the file system for module map files.">;<br class="">> > def fmodule_maps : Flag <["-"], "fmodule-maps">, Alias<fimplicit_module_maps>;<br class="">> > -def fmodule_name : JoinedOrSeparate<["-"], "fmodule-name=">, Group<f_Group>,<br class="">> > +def fmodule_name_EQ : Joined<["-"], "fmodule-name=">, Group<f_Group>,<br class="">> >   Flags<[DriverOption,CC1Option]>, MetaVarName<"<name>">,<br class="">> >   HelpText<"Specify the name of the module to build">;<br class="">> > +def fmodule_name : Separate<["-"], "fmodule-name">, Alias<fmodule_name_EQ>;<br class="">> > def fmodule_map_file : Joined<["-"], "fmodule-map-file=">,<br class="">> >   Group<f_Group>, Flags<[DriverOption,CC1Option]>, MetaVarName<"<file>">,<br class="">> >   HelpText<"Load this module map file">;<br class="">> ><br class="">> > Modified: cfe/trunk/include/clang/Lex/ModuleMap.h<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/ModuleMap.h?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/ModuleMap.h?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/include/clang/Lex/ModuleMap.h (original)<br class="">> > +++ cfe/trunk/include/clang/Lex/ModuleMap.h Fri Feb 19 16:25:36 2016<br class="">> > @@ -70,15 +70,10 @@ class ModuleMap {<br class="">> >   /// These are always simple C language options.<br class="">> >   LangOptions MMapLangOpts;<br class="">> ><br class="">> > -  // The module that we are building; related to \c LangOptions::CurrentModule.<br class="">> > -  Module *CompilingModule;<br class="">> > -<br class="">> > -public:<br class="">> > -  // The module that the .cc source file is associated with.<br class="">> > +  // The module that the main source file is associated with (the module<br class="">> > +  // named LangOpts::CurrentModule, if we've loaded it).<br class="">> >   Module *SourceModule;<br class="">> > -  std::string SourceModuleName;<br class="">> ><br class="">> > -private:<br class="">> >   /// \brief The top-level modules that are known.<br class="">> >   llvm::StringMap<Module *> Modules;<br class="">> ><br class="">> ><br class="">> > Modified: cfe/trunk/lib/Basic/LangOptions.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/LangOptions.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/LangOptions.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Basic/LangOptions.cpp (original)<br class="">> > +++ cfe/trunk/lib/Basic/LangOptions.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -34,7 +34,6 @@ void LangOptions::resetNonModularOptions<br class="">> >   SanitizerBlacklistFiles.clear();<br class="">> ><br class="">> >   CurrentModule.clear();<br class="">> > -  ImplementationOfModule.clear();<br class="">> > }<br class="">> ><br class="">> > bool LangOptions::isNoBuiltinFunc(const char *Name) const {<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Driver/Tools.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Driver/Tools.cpp (original)<br class="">> > +++ cfe/trunk/lib/Driver/Tools.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -4909,7 +4909,7 @@ void Clang::ConstructJob(Compilation &C,<br class="">> ><br class="">> >   // -fmodule-name specifies the module that is currently being built (or<br class="">> >   // used for header checking by -fmodule-maps).<br class="">> > -  Args.AddLastArg(CmdArgs, options::OPT_fmodule_name);<br class="">> > +  Args.AddLastArg(CmdArgs, options::OPT_fmodule_name_EQ);<br class="">> ><br class="">> >   // -fmodule-map-file can be used to specify files containing module<br class="">> >   // definitions.<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)<br class="">> > +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -2814,7 +2814,7 @@ const FileEntry *ASTUnit::getPCHFile() {<br class="">> > }<br class="">> ><br class="">> > bool ASTUnit::isModuleFile() {<br class="">> > -  return isMainFileAST() && !ASTFileLangOpts.CurrentModule.empty();<br class="">> > +  return isMainFileAST() && ASTFileLangOpts.CompilingModule;<br class="">> > }<br class="">> ><br class="">> > void ASTUnit::PreambleData::countLines() const {<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)<br class="">> > +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -1386,8 +1386,7 @@ CompilerInstance::loadModule(SourceLocat<br class="">> >   // when both the preprocessor and parser see the same import declaration.<br class="">> >   if (ImportLoc.isValid() && LastModuleImportLoc == ImportLoc) {<br class="">> >     // Make the named module visible.<br class="">> > -    if (LastModuleImportResult && ModuleName != getLangOpts().CurrentModule &&<br class="">> > -        ModuleName != getLangOpts().ImplementationOfModule)<br class="">> > +    if (LastModuleImportResult && ModuleName != getLangOpts().CurrentModule)<br class="">> >       ModuleManager->makeModuleVisible(LastModuleImportResult, Visibility,<br class="">> >                                        ImportLoc);<br class="">> >     return LastModuleImportResult;<br class="">> > @@ -1401,8 +1400,7 @@ CompilerInstance::loadModule(SourceLocat<br class="">> >   if (Known != KnownModules.end()) {<br class="">> >     // Retrieve the cached top-level module.<br class="">> >     Module = Known->second;<br class="">> > -  } else if (ModuleName == getLangOpts().CurrentModule ||<br class="">> > -             ModuleName == getLangOpts().ImplementationOfModule) {<br class="">> > +  } else if (ModuleName == getLangOpts().CurrentModule) {<br class="">> >     // This is the module we're building.<br class="">> >     Module = PP->getHeaderSearchInfo().lookupModule(ModuleName);<br class="">> >     Known = KnownModules.insert(std::make_pair(Path[0].first, Module)).first;<br class="">> > @@ -1580,10 +1578,6 @@ CompilerInstance::loadModule(SourceLocat<br class="">> >     }<br class="">> >   }<br class="">> ><br class="">> > -  // Don't make the module visible if we are in the implementation.<br class="">> > -  if (ModuleName == getLangOpts().ImplementationOfModule)<br class="">> > -    return ModuleLoadResult(Module, false);<br class="">> > -<br class="">> >   // Make the named module visible, if it's not already part of the module<br class="">> >   // we are parsing.<br class="">> >   if (ModuleName != getLangOpts().CurrentModule) {<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br class="">> > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -1763,10 +1763,8 @@ static void ParseLangArgs(LangOptions &O<br class="">> >   Opts.DebuggerCastResultToId = Args.hasArg(OPT_fdebugger_cast_result_to_id);<br class="">> >   Opts.DebuggerObjCLiteral = Args.hasArg(OPT_fdebugger_objc_literal);<br class="">> >   Opts.ApplePragmaPack = Args.hasArg(OPT_fapple_pragma_pack);<br class="">> > -  Opts.CurrentModule = Args.getLastArgValue(OPT_fmodule_name);<br class="">> > +  Opts.CurrentModule = Args.getLastArgValue(OPT_fmodule_name_EQ);<br class="">> >   Opts.AppExt = Args.hasArg(OPT_fapplication_extension);<br class="">> > -  Opts.ImplementationOfModule =<br class="">> > -      Args.getLastArgValue(OPT_fmodule_implementation_of);<br class="">> >   Opts.ModuleFeatures = Args.getAllArgValues(OPT_fmodule_feature);<br class="">> >   std::sort(Opts.ModuleFeatures.begin(), Opts.ModuleFeatures.end());<br class="">> >   Opts.NativeHalfType |= Args.hasArg(OPT_fnative_half_type);<br class="">> > @@ -1784,12 +1782,6 @@ static void ParseLangArgs(LangOptions &O<br class="">> >       Args.hasFlag(OPT_fdeclspec, OPT_fno_declspec,<br class="">> >                    (Opts.MicrosoftExt || Opts.Borland || Opts.CUDA));<br class="">> ><br class="">> > -  if (!Opts.CurrentModule.empty() && !Opts.ImplementationOfModule.empty() &&<br class="">> > -      Opts.CurrentModule != Opts.ImplementationOfModule) {<br class="">> > -    Diags.Report(diag::err_conflicting_module_names)<br class="">> > -        << Opts.CurrentModule << Opts.ImplementationOfModule;<br class="">> > -  }<br class="">> > -<br class="">> >   // For now, we only support local submodule visibility in C++ (because we<br class="">> >   // heavily depend on the ODR for merging redefinitions).<br class="">> >   if (Opts.ModulesLocalVisibility && !Opts.CPlusPlus)<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Frontend/FrontendActions.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Frontend/FrontendActions.cpp (original)<br class="">> > +++ cfe/trunk/lib/Frontend/FrontendActions.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -270,6 +270,8 @@ collectModuleHeaderIncludes(const LangOp<br class="">> ><br class="">> > bool GenerateModuleAction::BeginSourceFileAction(CompilerInstance &CI,<br class="">> >                                                  StringRef Filename) {<br class="">> > +  CI.getLangOpts().CompilingModule = true;<br class="">> > +<br class="">> >   // Find the module map file.<br class="">> >   const FileEntry *ModuleMap =<br class="">> >       CI.getFileManager().getFile(Filename, /*openFile*/true);<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Lex/ModuleMap.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Lex/ModuleMap.cpp (original)<br class="">> > +++ cfe/trunk/lib/Lex/ModuleMap.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -89,7 +89,7 @@ ModuleMap::ModuleMap(SourceManager &Sour<br class="">> >                      HeaderSearch &HeaderInfo)<br class="">> >     : SourceMgr(SourceMgr), Diags(Diags), LangOpts(LangOpts), Target(Target),<br class="">> >       HeaderInfo(HeaderInfo), BuiltinIncludeDir(nullptr),<br class="">> > -      CompilingModule(nullptr), SourceModule(nullptr), NumCreatedModules(0) {<br class="">> > +      SourceModule(nullptr), NumCreatedModules(0) {<br class="">> >   MMapLangOpts.LineComment = true;<br class="">> > }<br class="">> ><br class="">> > @@ -343,8 +343,8 @@ ModuleMap::KnownHeader ModuleMap::findMo<br class="">> >     ModuleMap::KnownHeader Result;<br class="">> >     // Iterate over all modules that 'File' is part of to find the best fit.<br class="">> >     for (KnownHeader &H : Known->second) {<br class="">> > -      // Prefer a header from the current module over all others.<br class="">> > -      if (H.getModule()->getTopLevelModule() == CompilingModule)<br class="">> > +      // Prefer a header from the source module over all others.<br class="">> > +      if (H.getModule()->getTopLevelModule() == SourceModule)<br class="">> >         return MakeResult(H);<br class="">> >       if (!Result || isBetterKnownHeader(H, Result))<br class="">> >         Result = H;<br class="">> > @@ -556,16 +556,10 @@ ModuleMap::findOrCreateModule(StringRef<br class="">> >   // Create a new module with this name.<br class="">> >   Module *Result = new Module(Name, SourceLocation(), Parent,<br class="">> >                               IsFramework, IsExplicit, NumCreatedModules++);<br class="">> > -  if (LangOpts.CurrentModule == Name) {<br class="">> > -    SourceModule = Result;<br class="">> > -    SourceModuleName = Name;<br class="">> > -  }<br class="">> >   if (!Parent) {<br class="">> > +    if (LangOpts.CurrentModule == Name)<br class="">> > +      SourceModule = Result;<br class="">> >     Modules[Name] = Result;<br class="">> > -    if (!LangOpts.CurrentModule.empty() && !CompilingModule &&<br class="">> > -        Name == LangOpts.CurrentModule) {<br class="">> > -      CompilingModule = Result;<br class="">> > -    }<br class="">> >   }<br class="">> >   return std::make_pair(Result, true);<br class="">> > }<br class="">> > @@ -693,9 +687,10 @@ Module *ModuleMap::inferFrameworkModule(<br class="">> >                               NumCreatedModules++);<br class="">> >   InferredModuleAllowedBy[Result] = ModuleMapFile;<br class="">> >   Result->IsInferred = true;<br class="">> > -  if (LangOpts.CurrentModule == ModuleName) {<br class="">> > -    SourceModule = Result;<br class="">> > -    SourceModuleName = ModuleName;<br class="">> > +  if (!Parent) {<br class="">> > +    if (LangOpts.CurrentModule == ModuleName)<br class="">> > +      SourceModule = Result;<br class="">> > +    Modules[ModuleName] = Result;<br class="">> >   }<br class="">> ><br class="">> >   Result->IsSystem |= Attrs.IsSystem;<br class="">> > @@ -703,9 +698,6 @@ Module *ModuleMap::inferFrameworkModule(<br class="">> >   Result->ConfigMacrosExhaustive |= Attrs.IsExhaustive;<br class="">> >   Result->Directory = FrameworkDir;<br class="">> ><br class="">> > -  if (!Parent)<br class="">> > -    Modules[ModuleName] = Result;<br class="">> > -<br class="">> >   // umbrella header "umbrella-header-name"<br class="">> >   //<br class="">> >   // The "Headers/" component of the name is implied because this is<br class="">> > @@ -812,7 +804,8 @@ void ModuleMap::addHeader(Module *Mod, M<br class="">> >   HeaderList.push_back(KH);<br class="">> >   Mod->Headers[headerRoleToKind(Role)].push_back(std::move(Header));<br class="">> ><br class="">> > -  bool isCompilingModuleHeader = Mod->getTopLevelModule() == CompilingModule;<br class="">> > +  bool isCompilingModuleHeader =<br class="">> > +      LangOpts.CompilingModule && Mod->getTopLevelModule() == SourceModule;<br class="">> >   if (!Imported || isCompilingModuleHeader) {<br class="">> >     // When we import HeaderFileInfo, the external source is expected to<br class="">> >     // set the isModuleHeader flag itself.<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Lex/PPDirectives.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Lex/PPDirectives.cpp (original)<br class="">> > +++ cfe/trunk/lib/Lex/PPDirectives.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -573,23 +573,23 @@ void Preprocessor::PTHSkipExcludedCondit<br class="">> > }<br class="">> ><br class="">> > Module *Preprocessor::getModuleForLocation(SourceLocation Loc) {<br class="">> > -  ModuleMap &ModMap = HeaderInfo.getModuleMap();<br class="">> > -  if (SourceMgr.isInMainFile(Loc)) {<br class="">> > -    if (Module *CurMod = getCurrentModule())<br class="">> > -      return CurMod;                               // Compiling a module.<br class="">> > -    return HeaderInfo.getModuleMap().SourceModule; // Compiling a source.<br class="">> > -  }<br class="">> > -  // Try to determine the module of the include directive.<br class="">> > -  // FIXME: Look into directly passing the FileEntry from LookupFile instead.<br class="">> > -  FileID IDOfIncl = SourceMgr.getFileID(SourceMgr.getExpansionLoc(Loc));<br class="">> > -  if (const FileEntry *EntryOfIncl = SourceMgr.getFileEntryForID(IDOfIncl)) {<br class="">> > -    // The include comes from a file.<br class="">> > -    return ModMap.findModuleForHeader(EntryOfIncl).getModule();<br class="">> > -  } else {<br class="">> > -    // The include does not come from a file,<br class="">> > -    // so it is probably a module compilation.<br class="">> > -    return getCurrentModule();<br class="">> > +  if (!SourceMgr.isInMainFile(Loc)) {<br class="">> > +    // Try to determine the module of the include directive.<br class="">> > +    // FIXME: Look into directly passing the FileEntry from LookupFile instead.<br class="">> > +    FileID IDOfIncl = SourceMgr.getFileID(SourceMgr.getExpansionLoc(Loc));<br class="">> > +    if (const FileEntry *EntryOfIncl = SourceMgr.getFileEntryForID(IDOfIncl)) {<br class="">> > +      // The include comes from an included file.<br class="">> > +      return HeaderInfo.getModuleMap()<br class="">> > +          .findModuleForHeader(EntryOfIncl)<br class="">> > +          .getModule();<br class="">> > +    }<br class="">> >   }<br class="">> > +<br class="">> > +  // This is either in the main file or not in a file at all. It belongs<br class="">> > +  // to the current module, if there is one.<br class="">> > +  return getLangOpts().CurrentModule.empty()<br class="">> > +             ? nullptr<br class="">> > +             : HeaderInfo.lookupModule(getLangOpts().CurrentModule);<br class="">> > }<br class="">> ><br class="">> > Module *Preprocessor::getModuleContainingLocation(SourceLocation Loc) {<br class="">> > @@ -1668,10 +1668,7 @@ void Preprocessor::HandleIncludeDirectiv<br class="">> >   // are processing this module textually (because we're building the module).<br class="">> >   if (File && SuggestedModule && getLangOpts().Modules &&<br class="">> >       SuggestedModule.getModule()->getTopLevelModuleName() !=<br class="">> > -          getLangOpts().CurrentModule &&<br class="">> > -      SuggestedModule.getModule()->getTopLevelModuleName() !=<br class="">> > -          getLangOpts().ImplementationOfModule) {<br class="">> > -<br class="">> > +          getLangOpts().CurrentModule) {<br class="">> >     // If this include corresponds to a module but that module is<br class="">> >     // unavailable, diagnose the situation and bail out.<br class="">> >     if (!SuggestedModule.getModule()->isAvailable()) {<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Lex/PPMacroExpansion.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Lex/PPMacroExpansion.cpp (original)<br class="">> > +++ cfe/trunk/lib/Lex/PPMacroExpansion.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -1438,8 +1438,9 @@ static bool EvaluateBuildingModule(Token<br class="">> >     return false;<br class="">> >   }<br class="">> ><br class="">> > -  bool Result<br class="">> > -    = Tok.getIdentifierInfo()->getName() == PP.getLangOpts().CurrentModule;<br class="">> > +  bool Result =<br class="">> > +      PP.getLangOpts().CompilingModule &&<br class="">> > +      Tok.getIdentifierInfo()->getName() == PP.getLangOpts().CurrentModule;<br class="">> ><br class="">> >   // Get ')'.<br class="">> >   PP.LexNonComment(Tok);<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Lex/Preprocessor.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Preprocessor.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Preprocessor.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Lex/Preprocessor.cpp (original)<br class="">> > +++ cfe/trunk/lib/Lex/Preprocessor.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -477,7 +477,7 @@ void Preprocessor::CreateString(StringRe<br class="">> > }<br class="">> ><br class="">> > Module *Preprocessor::getCurrentModule() {<br class="">> > -  if (getLangOpts().CurrentModule.empty())<br class="">> > +  if (!getLangOpts().CompilingModule)<br class="">> >     return nullptr;<br class="">> ><br class="">> >   return getHeaderSearchInfo().lookupModule(getLangOpts().CurrentModule);<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br class="">> > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -14752,11 +14752,10 @@ DeclResult Sema::ActOnModuleImport(Sourc<br class="">> >   // of the same top-level module. Until we do, make it an error rather than<br class="">> >   // silently ignoring the import.<br class="">> >   if (Mod->getTopLevelModuleName() == getLangOpts().CurrentModule)<br class="">> > -    Diag(ImportLoc, diag::err_module_self_import)<br class="">> > +    Diag(ImportLoc, getLangOpts().CompilingModule<br class="">> > +                        ? diag::err_module_self_import<br class="">> > +                        : diag::err_module_import_in_implementation)<br class="">> >         << Mod->getFullModuleName() << getLangOpts().CurrentModule;<br class="">> > -  else if (Mod->getTopLevelModuleName() == getLangOpts().ImplementationOfModule)<br class="">> > -    Diag(ImportLoc, diag::err_module_import_in_implementation)<br class="">> > -        << Mod->getFullModuleName() << getLangOpts().ImplementationOfModule;<br class="">> ><br class="">> >   SmallVector<SourceLocation, 2> IdentifierLocs;<br class="">> >   Module *ModCheck = Mod;<br class="">> > @@ -14790,11 +14789,13 @@ void Sema::ActOnModuleInclude(SourceLoca<br class="">> >       TUKind == TU_Module &&<br class="">> >       getSourceManager().isWrittenInMainFile(DirectiveLoc);<br class="">> ><br class="">> > -  // Similarly, if this module is specified by -fmodule-implementation-of<br class="">> > -  // don't actually synthesize an illegal module import.<br class="">> > -  bool ShouldAddImport = !IsInModuleIncludes &&<br class="">> > -    (getLangOpts().ImplementationOfModule.empty() ||<br class="">> > -     getLangOpts().ImplementationOfModule != Mod->getTopLevelModuleName());<br class="">> > +  // Similarly, if we're in the implementation of a module, don't<br class="">> > +  // synthesize an illegal module import. FIXME: Why not?<br class="">> > +  bool ShouldAddImport =<br class="">> > +      !IsInModuleIncludes &&<br class="">> > +      (getLangOpts().CompilingModule ||<br class="">> > +       getLangOpts().CurrentModule.empty() ||<br class="">> > +       getLangOpts().CurrentModule != Mod->getTopLevelModuleName());<br class="">> ><br class="">> >   // If this module import was due to an inclusion directive, create an<br class="">> >   // implicit import declaration to capture it in the AST.<br class="">> ><br class="">> > Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)<br class="">> > +++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -3171,7 +3171,7 @@ void Sema::addMethodToGlobalList(ObjCMet<br class="">> >   ObjCMethodList *Previous = List;<br class="">> >   for (; List; Previous = List, List = List->getNext()) {<br class="">> >     // If we are building a module, keep all of the methods.<br class="">> > -    if (getLangOpts().Modules && !getLangOpts().CurrentModule.empty())<br class="">> > +    if (getLangOpts().CompilingModule)<br class="">> >       continue;<br class="">> ><br class="">> >     if (!MatchTwoMethodDeclarations(Method, List->getMethod())) {<br class="">> ><br class="">> > Modified: cfe/trunk/test/Modules/Inputs/explicit-build/a.h<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/explicit-build/a.h?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/explicit-build/a.h?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/test/Modules/Inputs/explicit-build/a.h (original)<br class="">> > +++ cfe/trunk/test/Modules/Inputs/explicit-build/a.h Fri Feb 19 16:25:36 2016<br class="">> > @@ -1,4 +1,4 @@<br class="">> > -#if !__building_module(a)<br class="">> > +#if !__building_module(a) && !BUILDING_A_PCH<br class="">> > #error "should only get here when building module a"<br class="">> > #endif<br class="">> ><br class="">> ><br class="">> > Modified: cfe/trunk/test/Modules/explicit-build.cpp<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/explicit-build.cpp?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/explicit-build.cpp?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/test/Modules/explicit-build.cpp (original)<br class="">> > +++ cfe/trunk/test/Modules/explicit-build.cpp Fri Feb 19 16:25:36 2016<br class="">> > @@ -143,7 +143,7 @@<br class="">> > // -------------------------------<br class="">> > // Try to import a PCH with -fmodule-file=<br class="">> > // RUN: %clang_cc1 -x c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Rmodule-build -fno-modules-error-recovery \<br class="">> > -// RUN:            -fmodule-name=a -emit-pch %S/Inputs/explicit-build/a.h -o %t/a.pch \<br class="">> > +// RUN:            -fmodule-name=a -emit-pch %S/Inputs/explicit-build/a.h -o %t/a.pch -DBUILDING_A_PCH \<br class="">> > // RUN:            2>&1 | FileCheck --check-prefix=CHECK-NO-IMPLICIT-BUILD %s --allow-empty<br class="">> > //<br class="">> > // RUN: not %clang_cc1 -x c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Rmodule-build -fno-modules-error-recovery \<br class="">> ><br class="">> > Modified: cfe/trunk/test/Modules/implementation-of-module.m<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/implementation-of-module.m?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/implementation-of-module.m?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/test/Modules/implementation-of-module.m (original)<br class="">> > +++ cfe/trunk/test/Modules/implementation-of-module.m Fri Feb 19 16:25:36 2016<br class="">> > @@ -1,22 +1,18 @@<br class="">> > -// RUN: not %clang_cc1 -fmodule-implementation-of Foo -fmodule-name=Bar %s 2>&1 \<br class="">> > -// RUN:     | FileCheck -check-prefix=CHECK-IMPL-OF-ERR %s<br class="">> > -// CHECK-IMPL-OF-ERR: conflicting module names specified: '-fmodule-name=Bar' and '-fmodule-implementation-of Foo'<br class="">> > -<br class="">> > // RUN: rm -rf %t<br class="">> > // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \<br class="">> > -// RUN:     -fmodule-implementation-of category_right -fsyntax-only<br class="">> > +// RUN:     -fmodule-name=category_right -fsyntax-only<br class="">> ><br class="">> > // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \<br class="">> > -// RUN:     -fmodule-implementation-of category_right -dM -E -o - 2>&1 | FileCheck %s<br class="">> > +// RUN:     -fmodule-name=category_right -dM -E -o - 2>&1 | FileCheck %s<br class="">> > // CHECK-NOT: __building_module<br class="">> ><br class="">> > // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \<br class="">> > -// RUN:     -fmodule-implementation-of category_left -verify<br class="">> > +// RUN:     -fmodule-name=category_left -verify<br class="">> ><br class="">> > // RUN: %clang_cc1 -x objective-c-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \<br class="">> > -// RUN:     -fmodule-implementation-of category_right -emit-pch -o %t.pch<br class="">> > +// RUN:     -fmodule-name=category_right -emit-pch -o %t.pch<br class="">> > // RUN: %clang_cc1 -x objective-c-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \<br class="">> > -// RUN:     -DWITH_PREFIX -fmodules-ignore-macro=WITH_PREFIX -include-pch %t.pch -fmodule-implementation-of category_right<br class="">> > +// RUN:     -DWITH_PREFIX -fmodules-ignore-macro=WITH_PREFIX -include-pch %t.pch -fmodule-name=category_right<br class="">> ><br class="">> > #ifndef WITH_PREFIX<br class="">> ><br class="">> ><br class="">> > Modified: cfe/trunk/test/Modules/import-self.m<br class="">> > URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/import-self.m?rev=261372&r1=261371&r2=261372&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/import-self.m?rev=261372&r1=261371&r2=261372&view=diff</a><br class="">> > ==============================================================================<br class="">> > --- cfe/trunk/test/Modules/import-self.m (original)<br class="">> > +++ cfe/trunk/test/Modules/import-self.m Fri Feb 19 16:25:36 2016<br class="">> > @@ -6,6 +6,6 @@<br class="">> > // RUN: not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t \<br class="">> > // RUN:                -I %S/Inputs/submodules -fmodule-name=import_self %s \<br class="">> > // RUN:     2>&1 |  FileCheck -check-prefix=CHECK-fmodule-name %s<br class="">> > -// CHECK-fmodule-name: import of module 'import_self.b' appears within same top-level module 'import_self'<br class="">> > +// CHECK-fmodule-name: @import of module 'import_self.b' in implementation of 'import_self'<br class="">> ><br class="">> > @import import_self.b;<br class="">> ><br class="">> ><br class="">> > _______________________________________________<br class="">> > cfe-commits mailing list<br class="">> ><span class="Apple-converted-space"> </span><a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class="">> ><span class="Apple-converted-space"> </span><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="">><br class="">> _______________________________________________<br class="">> cfe-commits mailing list<br class="">><span class="Apple-converted-space"> </span><a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class="">><span class="Apple-converted-space"> </span><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class=""></p><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">cfe-commits mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:cfe-commits@lists.llvm.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">cfe-commits@lists.llvm.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a></div></blockquote></div><br class=""></body></html>