Author: dblaikie Date: Tue Jan 31 15:28:19 2017 New Revision: 293692 URL: http://llvm.org/viewvc/llvm-project?rev=293692&view=rev Log: Fix modules codegen to be compatible with modules-ts
The Module::WithCodegen flag was only being set when the module was parsed from a ModuleMap. Instead set it late, in the ASTWriter to match the layer where the MODULAR_CODEGEN_DECLs list is determined (the WithCodegen flag essentially means "are this module's decls in MODULAR_CODEGEN_DECLs"). When simultaneous emission of AST file and modular object is implemented this may need to change - the Module::WithCodegen flag will need to be set earlier, and ideally the MODULAR_CODEGEN_DECLs gathering will consult this flag (that's not possible right now since Decls destined for an AST File don't have a Module - only if they're /read/ from a Module is that true - I expect that would need to change as well). Modified: cfe/trunk/lib/Lex/ModuleMap.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp cfe/trunk/test/CodeGenCXX/modules-ts.cppm Modified: cfe/trunk/lib/Lex/ModuleMap.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=293692&r1=293691&r2=293692&view=diff ============================================================================== --- cfe/trunk/lib/Lex/ModuleMap.cpp (original) +++ cfe/trunk/lib/Lex/ModuleMap.cpp Tue Jan 31 15:28:19 2017 @@ -1501,7 +1501,6 @@ void ModuleMapParser::parseModuleDecl() (!ActiveModule->Parent && ModuleName == "Darwin")) ActiveModule->NoUndeclaredIncludes = true; ActiveModule->Directory = Directory; - ActiveModule->WithCodegen = L.getLangOpts().ModularCodegen; if (!ActiveModule->Parent) { StringRef MapFileName(ModuleMapFile->getName()); Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=293692&r1=293691&r2=293692&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Tue Jan 31 15:28:19 2017 @@ -2590,7 +2590,7 @@ void ASTWriter::WriteSubmodules(Module * Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // InferExplicit... Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // InferExportWild... Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ConfigMacrosExh... - Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2)); // WithCodegen + Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // WithCodegen Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name unsigned DefinitionAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); @@ -2690,7 +2690,7 @@ void ASTWriter::WriteSubmodules(Module * Mod->InferExplicitSubmodules, Mod->InferExportWildcard, Mod->ConfigMacrosExhaustive, - Mod->WithCodegen}; + Context->getLangOpts().ModularCodegen && WritingModule}; Stream.EmitRecordWithBlob(DefinitionAbbrev, Record, Mod->Name); } Modified: cfe/trunk/test/CodeGenCXX/modules-ts.cppm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/modules-ts.cppm?rev=293692&r1=293691&r2=293692&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/modules-ts.cppm (original) +++ cfe/trunk/test/CodeGenCXX/modules-ts.cppm Tue Jan 31 15:28:19 2017 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fmodules-ts -std=c++1z -triple=x86_64-linux-gnu -emit-module-interface %s -o %t.pcm +// RUN: %clang_cc1 -fmodules-ts -std=c++1z -triple=x86_64-linux-gnu -fmodules-codegen -emit-module-interface %s -o %t.pcm // RUN: %clang_cc1 -fmodules-ts -std=c++1z -triple=x86_64-linux-gnu %t.pcm -emit-llvm -o - | FileCheck %s module FooBar; @@ -8,6 +8,9 @@ export { int f() { return 0; } } +// CHECK-LABEL: define weak_odr void @_Z2f2v( +inline void f2() { } + // FIXME: Emit global variables and their initializers with this TU. // Emit an initialization function that other TUs can call, with guard variable. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits