teak-llvm/clang/test/CodeGenCXX/mangle-win64-ccs.cpp
Reid Kleckner f5f6290899 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
2018-12-14 23:42:59 +00:00

27 lines
1.1 KiB
C++

// 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 <typename FTy> 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)