From f5f62908994de1da3633bbeedb316d1e7353ff02 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Fri, 14 Dec 2018 23:42:59 +0000 Subject: Mangle calling conventions into function pointer types where GCC does Summary: GCC 5.1 began mangling these Windows calling conventions into function types, since they can be used for overloading. They've always been mangled in the MS ABI, but they are new to the Itanium mangler. Note that the calling convention doesn't appear as part of the main declaration, it only appears on function parameter types and other types. Fixes PR39860 Reviewers: rjmccall, efriedma Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D55672 llvm-svn: 349212 --- clang/test/CodeGenCXX/mangle-win64-ccs.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 clang/test/CodeGenCXX/mangle-win64-ccs.cpp (limited to 'clang/test/CodeGenCXX/mangle-win64-ccs.cpp') diff --git a/clang/test/CodeGenCXX/mangle-win64-ccs.cpp b/clang/test/CodeGenCXX/mangle-win64-ccs.cpp new file mode 100644 index 00000000000..10c0430117c --- /dev/null +++ b/clang/test/CodeGenCXX/mangle-win64-ccs.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -triple x86_64-windows-gnu -o - -emit-llvm %s | FileCheck %s -check-prefix CHECK-WIN +// RUN: %clang_cc1 -triple x86_64-linux-gnu -o - -emit-llvm %s | FileCheck %s -check-prefix CHECK-LIN + +typedef __PTRDIFF_TYPE__ ptrdiff_t; +template ptrdiff_t func_as_int(FTy *fp) { return ptrdiff_t(fp); } + +int f_plain(int); +int __attribute__((sysv_abi)) f_sysvabi(int); +int __attribute__((ms_abi)) f_msabi(int); +ptrdiff_t useThem() { + ptrdiff_t rv = 0; + rv += func_as_int(f_plain); + rv += func_as_int(f_sysvabi); + rv += func_as_int(f_msabi); + return rv; +} + +// CHECK-WIN: define dso_local i64 @_Z7useThemv() +// CHECK-WIN: call i64 @_Z11func_as_intIFiiEExPT_(i32 (i32)* @_Z7f_plaini) +// CHECK-WIN: call i64 @_Z11func_as_intIU8sysv_abiFiiEExPT_(i32 (i32)* @_Z9f_sysvabii) +// CHECK-WIN: call i64 @_Z11func_as_intIFiiEExPT_(i32 (i32)* @_Z7f_msabii) + +// CHECK-LIN: define i64 @_Z7useThemv() +// CHECK-LIN: call i64 @_Z11func_as_intIFiiEElPT_(i32 (i32)* @_Z7f_plaini) +// CHECK-LIN: call i64 @_Z11func_as_intIFiiEElPT_(i32 (i32)* @_Z9f_sysvabii) +// CHECK-LIN: call i64 @_Z11func_as_intIU6ms_abiFiiEElPT_(i32 (i32)* @_Z7f_msabii) -- cgit v1.2.3