diff --git a/lib/IRGen/GenDecl.cpp b/lib/IRGen/GenDecl.cpp index c03f39a145432..7500e3d349b2c 100644 --- a/lib/IRGen/GenDecl.cpp +++ b/lib/IRGen/GenDecl.cpp @@ -1594,9 +1594,6 @@ llvm::Function *irgen::createFunction(IRGenModule &IGM, llvm::Function *fn = llvm::Function::Create(signature.getType(), linkInfo.getLinkage(), name); - // TODO(compnerd) apply COMDAT to definitions - fn->setVisibility(linkInfo.getVisibility()); - fn->setDLLStorageClass(linkInfo.getDLLStorage()); fn->setCallingConv(signature.getCallingConv()); if (insertBefore) { @@ -1605,6 +1602,9 @@ llvm::Function *irgen::createFunction(IRGenModule &IGM, IGM.Module.getFunctionList().push_back(fn); } + ApplyIRLinkage({linkInfo.getLinkage(), linkInfo.getVisibility(), linkInfo.getDLLStorage()}) + .to(fn); + llvm::AttrBuilder initialAttrs; IGM.constructInitialFnAttributes(initialAttrs, FuncOptMode); // Merge initialAttrs with attrs.