diff options
| author | John McCall <rjmccall@apple.com> | 2012-08-25 02:00:03 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2012-08-25 02:00:03 +0000 |
| commit | a5f46fbcf9d321300c6b53b03c882a55f05522fd (patch) | |
| tree | 2e1e99d6b4beb3f94714cbdd3886dba1b9b421e2 /clang/test/CodeGenCXX/microsoft-abi-default-cc.cpp | |
| parent | 3351dc397ba46f24c79ae3655fa62b85dd84ec86 (diff) | |
| download | bcm5719-llvm-a5f46fbcf9d321300c6b53b03c882a55f05522fd.tar.gz bcm5719-llvm-a5f46fbcf9d321300c6b53b03c882a55f05522fd.zip | |
Fix the CC-matching logic for instance methods in the MS ABI.
Patch by Timur Iskhodzhanov!
llvm-svn: 162639
Diffstat (limited to 'clang/test/CodeGenCXX/microsoft-abi-default-cc.cpp')
| -rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-default-cc.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-abi-default-cc.cpp b/clang/test/CodeGenCXX/microsoft-abi-default-cc.cpp new file mode 100644 index 00000000000..d0d25ce5efb --- /dev/null +++ b/clang/test/CodeGenCXX/microsoft-abi-default-cc.cpp @@ -0,0 +1,47 @@ +// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck -check-prefix GCABI %s +// RUN: %clang_cc1 -emit-llvm %s -o - -DMS_ABI -cxx-abi microsoft -triple=i386-pc-win32 | FileCheck -check-prefix MSABI %s + +#ifdef MS_ABI +# define METHOD_CC __thiscall +#else +# define METHOD_CC __attribute__ ((cdecl)) +#endif + +// Test that it's OK to have multiple function declarations with the default CC +// both mentioned explicitly and implied. +void foo(); +void __cdecl foo(); +void __cdecl foo() {} +// GCABI: define void @_Z3foov() +// MSABI: define void @"\01?foo@@YAXXZ" + +void __cdecl bar(); +void bar(); +void bar() {} +// GCABI: define void @_Z3barv() +// MSABI: define void @"\01?bar@@YAXXZ" + +// Test that it's OK to mark either the method declaration or method definition +// with a default CC explicitly. +class A { +public: + void baz(); + void METHOD_CC qux(); + + void static_baz(); + void __cdecl static_qux(); +}; + +void METHOD_CC A::baz() {} +// GCABI: define void @_ZN1A3bazEv +// MSABI: define x86_thiscallcc void @"\01?baz@A@@QAEXXZ" +void A::qux() {} +// GCABI: define void @_ZN1A3quxEv +// MSABI: define x86_thiscallcc void @"\01?qux@A@@QAEXXZ" + +void __cdecl static_baz() {} +// GCABI: define void @_Z10static_bazv +// MSABI: define void @"\01?static_baz@@YAXXZ" +void static_qux() {} +// GCABI: define void @_Z10static_quxv +// MSABI: define void @"\01?static_qux@@YAXXZ" |

