From 46aafc16e8b6d5ab9700780a9b03568bef31f708 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Wed, 12 Oct 2016 20:12:19 +0000 Subject: [PATCH] LTO: Use the correct mangler function in LTOCodeGenerator::applyScopeRestrictions(). We need to use the overload of Mangler::getNameWithPrefix that takes a GlobalValue in order to mangle in the stdcall stack byte count for Windows targets. Differential Revision: https://reviews.llvm.org/D25529 llvm-svn: 284040 --- llvm/lib/LTO/LTOCodeGenerator.cpp | 4 ++-- llvm/test/LTO/X86/stdcall.ll | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 llvm/test/LTO/X86/stdcall.ll diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index 81fb58a4..a07707cd 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -410,6 +410,7 @@ void LTOCodeGenerator::applyScopeRestrictions() { // Declare a callback for the internalize pass that will ask for every // candidate GlobalValue if it can be internalized or not. + Mangler Mang; SmallString<64> MangledName; auto mustPreserveGV = [&](const GlobalValue &GV) -> bool { // Unnamed globals can't be mangled, but they can't be preserved either. @@ -421,8 +422,7 @@ void LTOCodeGenerator::applyScopeRestrictions() { // underscore. MangledName.clear(); MangledName.reserve(GV.getName().size() + 1); - Mangler::getNameWithPrefix(MangledName, GV.getName(), - MergedModule->getDataLayout()); + Mang.getNameWithPrefix(MangledName, &GV, /*CannotUsePrivateLabel=*/false); return MustPreserveSymbols.count(MangledName); }; diff --git a/llvm/test/LTO/X86/stdcall.ll b/llvm/test/LTO/X86/stdcall.ll new file mode 100644 index 0000000..f7800d0 --- /dev/null +++ b/llvm/test/LTO/X86/stdcall.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s > %t +; RUN: llvm-lto -exported-symbol=_DllMain@12 -filetype=asm -o - %t | FileCheck %s + +target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" +target triple = "i386-pc-windows-msvc19.0.23918" + +; CHECK: .globl _DllMain@12 +define x86_stdcallcc i32 @DllMain(i8* %module, i32 %reason, i8* %reserved) { + ret i32 1 +} -- 2.7.4