brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 0c92ff5 Raw
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