90 lines · cpp
1// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s2 3class C {4 public:5 void simple_method() {}6 7 void __cdecl cdecl_method() {}8 9 void vararg_method(const char *fmt, ...) {}10 11 static void static_method() {}12 13 int a;14};15 16void call_simple_method() {17 C instance;18 19 instance.simple_method();20// Make sure that the call uses the right calling convention:21// CHECK: call x86_thiscallcc void @"?simple_method@C@@QAEXXZ"22// CHECK: ret23 24// Make sure that the definition uses the right calling convention:25// CHECK: define linkonce_odr dso_local x86_thiscallcc void @"?simple_method@C@@QAEXXZ"26// CHECK: ret27}28 29void call_cdecl_method() {30 C instance;31 instance.cdecl_method();32// Make sure that the call uses the right calling convention:33// CHECK: call void @"?cdecl_method@C@@QAAXXZ"34// CHECK: ret35 36// Make sure that the definition uses the right calling convention:37// CHECK: define linkonce_odr dso_local void @"?cdecl_method@C@@QAAXXZ"38// CHECK: ret39}40 41void call_vararg_method() {42 C instance;43 instance.vararg_method("Hello");44// Make sure that the call uses the right calling convention:45// CHECK: call void (ptr, ptr, ...) @"?vararg_method@C@@QAAXPBDZZ"46// CHECK: ret47 48// Make sure that the definition uses the right calling convention:49// CHECK: define linkonce_odr dso_local void @"?vararg_method@C@@QAAXPBDZZ"50}51 52void call_static_method() {53 C::static_method();54// Make sure that the call uses the right calling convention:55// CHECK: call void @"?static_method@C@@SAXXZ"56// CHECK: ret57 58// Make sure that the definition uses the right calling convention:59// CHECK: define linkonce_odr dso_local void @"?static_method@C@@SAXXZ"60}61 62class Base {63 public:64 Base() {}65 ~Base() {}66};67 68class Child: public Base { };69 70void constructors() {71 Child c;72// Make sure that the Base constructor call noundef in the Child constructor uses73// the right calling convention:74// CHECK: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??0Child@@QAE@XZ"75// CHECK: %{{[.0-9A-Z_a-z]+}} = call x86_thiscallcc noundef ptr @"??0Base@@QAE@XZ"76// CHECK: ret77 78// Make sure that the Base destructor call noundef in the Child denstructor uses79// the right calling convention:80// CHECK: define linkonce_odr dso_local x86_thiscallcc void @"??1Child@@QAE@XZ"81// CHECK: call x86_thiscallcc void @"??1Base@@QAE@XZ"82// CHECK: ret83 84// Make sure that the Base constructor definition uses the right CC:85// CHECK: define linkonce_odr dso_local x86_thiscallcc noundef ptr @"??0Base@@QAE@XZ"86 87// Make sure that the Base destructor definition uses the right CC:88// CHECK: define linkonce_odr dso_local x86_thiscallcc void @"??1Base@@QAE@XZ"89}90