diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 38f457ada69a8ccef98ffa0165ae5292d39f24c4..04a08a92d87be2b668afe73679ec396ad784d8e7 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -723,7 +723,7 @@ void CodeGenModule::EmitLLVMUsed() { /// it depends on, using a postorder walk. static void addLinkOptionsPostorder(llvm::LLVMContext &Context, Module *Mod, - SmallVectorImpl<llvm::MDNode *> &Metadata, + SmallVectorImpl<llvm::Value *> &Metadata, llvm::SmallPtrSet<Module *, 16> &Visited) { // Import this module's parent. if (Mod->Parent && Visited.insert(Mod->Parent)) { @@ -810,7 +810,7 @@ void CodeGenModule::EmitModuleLinkOptions() { // Add link options for all of the imported modules in reverse topological // order. - SmallVector<llvm::MDNode *, 16> MetadataArgs; + SmallVector<llvm::Value *, 16> MetadataArgs; Visited.clear(); for (llvm::SetVector<clang::Module *>::iterator M = LinkModules.begin(), MEnd = LinkModules.end(); @@ -818,15 +818,11 @@ void CodeGenModule::EmitModuleLinkOptions() { if (Visited.insert(*M)) addLinkOptionsPostorder(getLLVMContext(), *M, MetadataArgs, Visited); } + std::reverse(MetadataArgs.begin(), MetadataArgs.end()); - // Get/create metadata for the link options. - llvm::NamedMDNode *Metadata - = getModule().getOrInsertNamedMetadata("llvm.module.linkoptions"); - - // Add link options in topological order. - for (unsigned I = MetadataArgs.size(); I > 0; --I) { - Metadata->addOperand(MetadataArgs[I-1]); - } + // Add the linker options metadata flag. + getModule().addModuleFlag(llvm::Module::AppendUnique, "Linker Options", + llvm::MDNode::get(getLLVMContext(), MetadataArgs)); } void CodeGenModule::EmitDeferred() { diff --git a/test/Modules/autolink.m b/test/Modules/autolink.m index 8dce12b21bddb3534a9112889e6bbb8532d15be3..079e5af2ae8d78c3585bf9495ff7aacd4ee91201 100644 --- a/test/Modules/autolink.m +++ b/test/Modules/autolink.m @@ -28,7 +28,9 @@ int use_no_umbrella() { return no_umbrella_A; } -// CHECK: !llvm.module.linkoptions = !{![[AUTOLINK_FRAMEWORK:[0-9]+]], ![[AUTOLINK:[0-9]+]], ![[DEPENDSONMODULE:[0-9]+]], ![[MODULE:[0-9]+]], ![[NOUMBRELLA:[0-9]+]]} +// CHECK: !llvm.module.flags = !{!0, !1, !2, !3, !4} +// CHECK: !4 = metadata !{i32 6, metadata !"Linker Options", metadata ![[AUTOLINK_OPTIONS:[0-9]+]]} +// CHECK: ![[AUTOLINK_OPTIONS]] = metadata !{metadata ![[AUTOLINK_FRAMEWORK:[0-9]+]], metadata ![[AUTOLINK:[0-9]+]], metadata ![[DEPENDSONMODULE:[0-9]+]], metadata ![[MODULE:[0-9]+]], metadata ![[NOUMBRELLA:[0-9]+]]} // CHECK: ![[AUTOLINK_FRAMEWORK]] = metadata !{metadata !"-framework", metadata !"autolink_framework"} // CHECK: ![[AUTOLINK]] = metadata !{metadata !"-lautolink"} // CHECK: ![[DEPENDSONMODULE]] = metadata !{metadata !"-framework", metadata !"DependsOnModule"}