brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 1cf5bb1 Raw
110 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -fms-extensions -o - | FileCheck %s2 3class A {4public:5  [[clang::nomerge]] A();6  [[clang::nomerge]] virtual ~A();7  [[clang::nomerge]] void f();8  [[clang::nomerge]] virtual void g();9  [[clang::nomerge]] static void f1();10};11 12class B : public A {13public:14  void g() override;15};16 17bool bar();18[[clang::nomerge]] void f(bool, bool);19[[clang::nomerge]] void (*fptr)(void);20 21void foo(int i, A *ap, B *bp) {22  [[clang::nomerge]] bar();23  [[clang::nomerge]] (i = 4, bar());24  [[clang::nomerge]] (void)(bar());25  f(bar(), bar());26  fptr();27  [[clang::nomerge]] [] { bar(); bar(); }(); // nomerge only applies to the anonymous function call28  [[clang::nomerge]] for (bar(); bar(); bar()) {}29  [[clang::nomerge]] { asm("nop"); }30  bar();31 32  ap->g();33  bp->g();34 35  A a;36  a.f();37  a.g();38  A::f1();39 40  B b;41  b.g();42 43  A *newA = new B();44  delete newA;45  [[clang::nomerge]] __builtin_trap();46  [[clang::nomerge]] __debugbreak();47  [[clang::nomerge]] __builtin_verbose_trap("check null", "Argument must not be null.");48}49 50int g(int i);51 52void something() {53  g(1);54}55 56[[clang::nomerge]] int g(int i);57 58void something_else() {59  g(1);60}61 62int g(int i) { return i; }63 64void something_else_again() {65  g(1);66}67 68// CHECK: call noundef{{.*}} i1 @_Z3barv() #[[ATTR0:[0-9]+]]69// CHECK: call noundef{{.*}} i1 @_Z3barv() #[[ATTR0]]70// CHECK: call noundef{{.*}} i1 @_Z3barv() #[[ATTR0]]71// CHECK: call noundef{{.*}} i1 @_Z3barv(){{$}}72// CHECK: call noundef{{.*}} i1 @_Z3barv(){{$}}73// CHECK: call void @_Z1fbb({{.*}}) #[[ATTR0]]74// CHECK: %[[FPTR:.*]] = load ptr, ptr @fptr75// CHECK-NEXT: call void %[[FPTR]]() #[[ATTR0]]76// CHECK: call void @"_ZZ3fooiP1AP1BENK3$_0clEv"{{.*}} #[[ATTR0]]77// CHECK: call noundef{{.*}} i1 @_Z3barv() #[[ATTR0]]78// CHECK-LABEL: for.cond:79// CHECK: call noundef{{.*}} i1 @_Z3barv() #[[ATTR0]]80// CHECK-LABEL: for.inc:81// CHECK: call noundef{{.*}} i1 @_Z3barv() #[[ATTR0]]82// CHECK: call void asm sideeffect "nop"{{.*}} #[[ATTR1:[0-9]+]]83// CHECK: call noundef{{.*}} i1 @_Z3barv(){{$}}84// CHECK: load ptr, ptr85// CHECK: load ptr, ptr86// CHECK: %[[AG:.*]] = load ptr, ptr87// CHECK-NEXT: call void %[[AG]](ptr {{.*}}) #[[ATTR0]]88// CHECK: load ptr, ptr89// CHECK: load ptr, ptr90// CHECK: %[[BG:.*]] = load ptr, ptr91// CHECK-NEXT: call void %[[BG]](ptr noundef{{.*}}92// CHECK: call void @_ZN1AC1Ev({{.*}}) #[[ATTR0]]93// CHECK: call void @_ZN1A1fEv({{.*}}) #[[ATTR0]]94// CHECK: call void @_ZN1A1gEv({{.*}}) #[[ATTR0]]95// CHECK: call void @_ZN1A2f1Ev() #[[ATTR0]]96// CHECK: call void @_ZN1BC1Ev({{.*}}){{$}}97// CHECK: call void @_ZN1B1gEv({{.*}}){{$}}98// CHECK: call void @_ZN1BC1Ev({{.*}}){{$}}99// CHECK: load ptr, ptr100// CHECK: load ptr, ptr101// CHECK: %[[AG:.*]] = load ptr, ptr102// CHECK-NEXT: call void %[[AG]](ptr {{.*}}) #[[ATTR1]]103// CHECK: call void @llvm.trap() #[[ATTR0]]104// CHECK: call void @llvm.debugtrap() #[[ATTR0]]105// CHECK: call void @llvm.trap() #[[ATTR0]]106// CHECK: call void  @_ZN1AD1Ev(ptr {{.*}}) #[[ATTR1]]107 108// CHECK-DAG: attributes #[[ATTR0]] = {{{.*}}nomerge{{.*}}}109// CHECK-DAG: attributes #[[ATTR1]] = {{{.*}}nomerge{{.*}}}110