brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.5 KiB · 616fcac Raw
338 lines · cpp
1// RUN: %clang_cc1 -triple %ms_abi_triple -ast-print %s -std=gnu++11 | FileCheck %s2 3// CHECK: r;4// CHECK-NEXT: (r->method());5struct MyClass6{7    void method() {}8};9 10struct Reference11{12    MyClass* object;13    MyClass* operator ->() { return object; }14};15 16void test1() {17    Reference r;18    (r->method());19}20 21// CHECK: if (int a = 1)22// CHECK:  while (int a = 1)23// CHECK:  switch (int a = 1)24// CHECK:  for (; int a = 1;)25 26void test2()27{28    if (int a = 1) { }29    while (int a = 1) { }30    switch (int a = 1) { }31    for(; int a = 1; ) { }32}33 34// CHECK: new (1) int;35void *operator new (typeof(sizeof(1)), int, int = 2);36void test3() {37  new (1) int;38}39 40// CHECK: new X;41struct X {42  void *operator new (typeof(sizeof(1)), int = 2);43};44void test4() { new X; }45 46// CHECK: for (int i = 2097, j = 42; false;)47void test5() {48  for (int i = 2097, j = 42; false;) {}49}50 51// CHECK: test6fn((int &)y);52void test6fn(int& x);53void test6() {54    unsigned int y = 0;55    test6fn((int&)y);56}57 58// CHECK: S s(1, 2);59 60template <class S> void test7()61{62    S s( 1,2 );63}64 65 66// CHECK: t.~T();67 68template <typename T> void test8(T t) { t.~T(); }69 70 71// CHECK:      enum E72// CHECK-NEXT:  A,73// CHECK-NEXT:  B,74// CHECK-NEXT:  C75// CHECK-NEXT:  };76// CHECK-NEXT: {{^[ ]+}}E a = A;77 78struct test979{80    void f()81    {82        enum E { A, B, C };83        E a = A;84    }85};86 87namespace test10 {88  namespace M {89    template<typename T>90    struct X {91      enum { value };92    };93  }94}95 96typedef int INT;97 98// CHECK: test1199// CHECK-NEXT: return test10::M::X<INT>::value;100int test11() {101  return test10::M::X<INT>::value;102}103 104 105struct DefaultArgClass106{107  DefaultArgClass(int a = 1) {}108  DefaultArgClass(int a, int b, int c = 1) {}109};110 111struct NoArgClass112{113  NoArgClass() {}114};115 116struct VirualDestrClass117{118  VirualDestrClass(int arg);119  virtual ~VirualDestrClass();120};121 122struct ConstrWithCleanupsClass123{124  ConstrWithCleanupsClass(const VirualDestrClass& cplx = VirualDestrClass(42));125};126 127// CHECK: test12128// CHECK-NEXT: DefaultArgClass useDefaultArg;129// CHECK-NEXT: DefaultArgClass overrideDefaultArg(1);130// CHECK-NEXT: DefaultArgClass(1, 2);131// CHECK-NEXT: DefaultArgClass(1, 2, 3);132// CHECK-NEXT: NoArgClass noArg;133// CHECK-NEXT: ConstrWithCleanupsClass cwcNoArg;134// CHECK-NEXT: ConstrWithCleanupsClass cwcOverrideArg(48);135// CHECK-NEXT: ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));136void test12() {137  DefaultArgClass useDefaultArg;138  DefaultArgClass overrideDefaultArg(1);139  DefaultArgClass tempWithDefaultArg = DefaultArgClass(1, 2);140  DefaultArgClass tempWithExplictArg = DefaultArgClass(1, 2, 3);141  NoArgClass noArg;142  ConstrWithCleanupsClass cwcNoArg;143  ConstrWithCleanupsClass cwcOverrideArg(48);144  ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));145}146 147// CHECK: void test13() {148// CHECK:   _Atomic(int) i;149// CHECK:   __c11_atomic_init(&i, 0);150// CHECK:   __c11_atomic_load(&i, 0);151// CHECK: }152void test13() {153  _Atomic(int) i;154  __c11_atomic_init(&i, 0);155  __c11_atomic_load(&i, 0);156}157 158 159// CHECK: void test14() {160// CHECK:     struct X {161// CHECK:         union {162// CHECK:             int x;163// CHECK:         } x;164// CHECK:     };165// CHECK: }166void test14() {167  struct X { union { int x; } x; };168}169 170 171// CHECK: float test15() {172// CHECK:     return __builtin_asinf(1.F);173// CHECK: }174// CHECK-NOT: extern "C"175float test15() {176  return __builtin_asinf(1.0F);177}178 179// CHECK: void test_atomic_loads(int *ptr, int *ret, int memorder) {180// CHECK:   __atomic_load_n(ptr, memorder);181// CHECK:   __atomic_load(ptr, ret, memorder);182// CHECK: }183void test_atomic_loads(int *ptr, int *ret, int memorder) {184  __atomic_load_n(ptr, memorder);185  __atomic_load(ptr, ret, memorder);186}187 188// CHECK: void test_atomic_stores(int *ptr, int val, int memorder) {189// CHECK:   __atomic_store_n(ptr, val, memorder);190// CHECK:   __atomic_store(ptr, &val, memorder);191// CHECK: }192void test_atomic_stores(int *ptr, int val, int memorder) {193  __atomic_store_n(ptr, val, memorder);194  __atomic_store(ptr, &val, memorder);195}196 197// CHECK: void test_atomic_exchanges(int *ptr, int val, int *ret, int memorder) {198// CHECK:   __atomic_exchange_n(ptr, val, memorder);199// CHECK:   __atomic_exchange(ptr, &val, ret, memorder);200// CHECK: }201void test_atomic_exchanges(int *ptr, int val, int *ret, int memorder) {202  __atomic_exchange_n(ptr, val, memorder);203  __atomic_exchange(ptr, &val, ret, memorder);204}205 206// CHECK: void test_atomic_cmpxchgs(int *ptr, int *expected, int desired, bool weak, int success_memorder, int failure_memorder) {207// CHECK:   __atomic_compare_exchange_n(ptr, expected, desired, weak, success_memorder, failure_memorder);208// CHECK:   __atomic_compare_exchange(ptr, expected, &desired, weak, success_memorder, failure_memorder);209// CHECK: }210void test_atomic_cmpxchgs(int *ptr, int *expected, int desired, bool weak, int success_memorder, int failure_memorder) {211  __atomic_compare_exchange_n(ptr, expected, desired, weak, success_memorder, failure_memorder);212  __atomic_compare_exchange(ptr, expected, &desired, weak, success_memorder, failure_memorder);213}214 215// CHECK: void test_atomic_fetch_ops(int *ptr, int val, int memorder) {216// CHECK:   __atomic_add_fetch(ptr, val, memorder);217// CHECK:   __atomic_sub_fetch(ptr, val, memorder);218// CHECK:   __atomic_and_fetch(ptr, val, memorder);219// CHECK:   __atomic_xor_fetch(ptr, val, memorder);220// CHECK:   __atomic_or_fetch(ptr, val, memorder);221// CHECK:   __atomic_nand_fetch(ptr, val, memorder);222// CHECK:   __atomic_fetch_add(ptr, val, memorder);223// CHECK:   __atomic_fetch_sub(ptr, val, memorder);224// CHECK:   __atomic_fetch_and(ptr, val, memorder);225// CHECK:   __atomic_fetch_xor(ptr, val, memorder);226// CHECK:   __atomic_fetch_or(ptr, val, memorder);227// CHECK:   __atomic_fetch_nand(ptr, val, memorder);228// CHECK: }229void test_atomic_fetch_ops(int *ptr, int val, int memorder) {230  __atomic_add_fetch(ptr, val, memorder);231  __atomic_sub_fetch(ptr, val, memorder);232  __atomic_and_fetch(ptr, val, memorder);233  __atomic_xor_fetch(ptr, val, memorder);234  __atomic_or_fetch(ptr, val, memorder);235  __atomic_nand_fetch(ptr, val, memorder);236  __atomic_fetch_add(ptr, val, memorder);237  __atomic_fetch_sub(ptr, val, memorder);238  __atomic_fetch_and(ptr, val, memorder);239  __atomic_fetch_xor(ptr, val, memorder);240  __atomic_fetch_or(ptr, val, memorder);241  __atomic_fetch_nand(ptr, val, memorder);242}243 244// CHECK: void test_atomic_setclear(void *ptr, int memorder) {245// CHECK:   __atomic_test_and_set(ptr, memorder);246// CHECK:   __atomic_clear(ptr, memorder);247// CHECK: }248void test_atomic_setclear(void *ptr, int memorder) {249  __atomic_test_and_set(ptr, memorder);250  __atomic_clear(ptr, memorder);251}252 253// CHECK: void test_atomic_fences(int memorder) {254// CHECK:   __atomic_thread_fence(memorder);255// CHECK:   __atomic_signal_fence(memorder);256// CHECK: }257void test_atomic_fences(int memorder) {258  __atomic_thread_fence(memorder);259  __atomic_signal_fence(memorder);260}261 262// CHECK: void test_atomic_lockfree(unsigned long size, void *ptr) {263// CHECK:   __atomic_always_lock_free(size, ptr);264// CHECK:   __atomic_is_lock_free(size, ptr);265// CHECK: }266void test_atomic_lockfree(unsigned long size, void *ptr) {267  __atomic_always_lock_free(size, ptr);268  __atomic_is_lock_free(size, ptr);269}270 271namespace PR18776 {272struct A {273  operator void *();274  explicit operator bool();275  A operator&(A);276};277 278// CHECK: struct A279// CHECK-NEXT: {{^[ ]*operator}} void *();280// CHECK-NEXT: {{^[ ]*explicit}} operator bool();281 282void bar(void *);283 284void foo() {285  A a, b;286  bar(a & b);287// CHECK: bar(a & b);288  if (a & b)289// CHECK: if (a & b)290    return;291}292};293 294namespace {295void test(int i) {296  switch (i) {297    case 1:298      // CHECK: {{\[\[clang::fallthrough\]\]}}299      [[clang::fallthrough]];300    case 2:301      break;302  }303}304}305 306namespace {307// CHECK: struct {{\[\[gnu::visibility\(\"hidden\"\)\]\]}} S;308struct [[gnu::visibility("hidden")]] S;309}310 311// CHECK:      struct CXXFunctionalCastExprPrint {312// CHECK-NEXT: } fce = CXXFunctionalCastExprPrint{};313struct CXXFunctionalCastExprPrint {} fce = CXXFunctionalCastExprPrint{};314 315// CHECK:      struct CXXTemporaryObjectExprPrint {316// CHECK-NEXT:   CXXTemporaryObjectExprPrint();317// CHECK-NEXT: } toe = CXXTemporaryObjectExprPrint{};318struct CXXTemporaryObjectExprPrint { CXXTemporaryObjectExprPrint(); } toe = CXXTemporaryObjectExprPrint{};319 320namespace PR24872 {321// CHECK: template <typename T> struct Foo : T {322// CHECK: using T::operator-;323template <typename T> struct Foo : T {324  using T::operator-;325};326}327 328namespace dont_crash_on_auto_vars {329struct T { enum E {X = 12ll }; };330struct S {331  struct  { int I; } ADecl;332  static const auto Y = T::X;333};334//CHECK: static const auto Y = T::X;335constexpr auto var = T::X;336//CHECK: constexpr auto var = T::X;337}338