Author: mren Date: Tue Jan 10 18:48:19 2017 New Revision: 291628 URL: http://llvm.org/viewvc/llvm-project?rev=291628&view=rev Log: Module: Do not create Implicit ImportDecl for module X if we are building an implemenation of module X.
This fixes a regression caused by r280409. rdar://problem/29930553 Added: cfe/trunk/test/Modules/Inputs/module-impl-with-link/ cfe/trunk/test/Modules/Inputs/module-impl-with-link/foo.h cfe/trunk/test/Modules/Inputs/module-impl-with-link/module.modulemap cfe/trunk/test/Modules/module-impl-with-link.c Modified: cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/Sema/SemaDecl.cpp Modified: cfe/trunk/include/clang/Sema/Sema.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=291628&r1=291627&r2=291628&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/Sema.h (original) +++ cfe/trunk/include/clang/Sema/Sema.h Tue Jan 10 18:48:19 2017 @@ -1905,7 +1905,8 @@ public: /// \brief The parser has processed a module import translated from a /// #include or similar preprocessing directive. void ActOnModuleInclude(SourceLocation DirectiveLoc, Module *Mod); - void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod); + void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod, + bool NoImport); /// \brief The parsed has entered a submodule. void ActOnModuleBegin(SourceLocation DirectiveLoc, Module *Mod); Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=291628&r1=291627&r2=291628&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Jan 10 18:48:19 2017 @@ -15652,10 +15652,11 @@ DeclResult Sema::ActOnModuleImport(Sourc void Sema::ActOnModuleInclude(SourceLocation DirectiveLoc, Module *Mod) { checkModuleImportContext(*this, Mod, DirectiveLoc, CurContext, true); - BuildModuleInclude(DirectiveLoc, Mod); + BuildModuleInclude(DirectiveLoc, Mod, false/*NoImport*/); } -void Sema::BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod) { +void Sema::BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod, + bool NoImport) { // Determine whether we're in the #include buffer for a module. The #includes // in that buffer do not qualify as module imports; they're just an // implementation detail of us building the module. @@ -15665,7 +15666,7 @@ void Sema::BuildModuleInclude(SourceLoca TUKind == TU_Module && getSourceManager().isWrittenInMainFile(DirectiveLoc); - bool ShouldAddImport = !IsInModuleIncludes; + bool ShouldAddImport = !IsInModuleIncludes && !NoImport; // If this module import was due to an inclusion directive, create an // implicit import declaration to capture it in the AST. @@ -15713,7 +15714,11 @@ void Sema::ActOnModuleEnd(SourceLocation assert(File != getSourceManager().getMainFileID() && "end of submodule in main source file"); SourceLocation DirectiveLoc = getSourceManager().getIncludeLoc(File); - BuildModuleInclude(DirectiveLoc, Mod); + // Do not create implicit ImportDecl if we are building the implementation + // of a module. + bool NoImport = Mod->getTopLevelModuleName() == getLangOpts().CurrentModule && + !getLangOpts().isCompilingModule(); + BuildModuleInclude(DirectiveLoc, Mod, NoImport); } void Sema::createImplicitModuleImportForErrorRecovery(SourceLocation Loc, Added: cfe/trunk/test/Modules/Inputs/module-impl-with-link/foo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/module-impl-with-link/foo.h?rev=291628&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/module-impl-with-link/foo.h (added) +++ cfe/trunk/test/Modules/Inputs/module-impl-with-link/foo.h Tue Jan 10 18:48:19 2017 @@ -0,0 +1 @@ +//empty Added: cfe/trunk/test/Modules/Inputs/module-impl-with-link/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/module-impl-with-link/module.modulemap?rev=291628&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/module-impl-with-link/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/module-impl-with-link/module.modulemap Tue Jan 10 18:48:19 2017 @@ -0,0 +1,4 @@ +module Clib { + header "foo.h" + link "Clib" +} Added: cfe/trunk/test/Modules/module-impl-with-link.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/module-impl-with-link.c?rev=291628&view=auto ============================================================================== --- cfe/trunk/test/Modules/module-impl-with-link.c (added) +++ cfe/trunk/test/Modules/module-impl-with-link.c Tue Jan 10 18:48:19 2017 @@ -0,0 +1,7 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -fmodule-name=Clib %s -I %S/Inputs/module-impl-with-link -emit-llvm -o - +#include "foo.h" +// CHECK: !{{[0-9]+}} = !{i32 6, !"Linker Options", ![[LINK_OPTIONS:[0-9]+]]} +// Make sure we don't generate linker option for module Clib since this TU is +// an implementation of Clib. +// CHECK: ![[LINK_OPTIONS]] = !{} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits