brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 75cecc9 Raw
54 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-linux-gnu %s -emit-llvm -o - \2// RUN:   -Werror=unknown-attributes \3// RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-NOM4// RUN: %clang_cc1 -triple x86_64-linux-gnu %s -emit-llvm -o - \5// RUN:   -Werror=unknown-attributes -mfunction-return=keep \6// RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-KEEP7// RUN: %clang_cc1 -triple x86_64-linux-gnu %s -emit-llvm -o - \8// RUN:   -Werror=unknown-attributes -mfunction-return=thunk-extern \9// RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-EXTERN10 11int foo(void) {12  // CHECK: @"_ZZ3foovENK3$_0clEv"({{.*}}) [[NOATTR:#[0-9]+]]13  return []() {14    return 42;15  }();16}17int bar(void) {18  // CHECK: @"_ZZ3barvENK3$_0clEv"({{.*}}) [[EXTERN:#[0-9]+]]19  return []() __attribute__((function_return("thunk-extern"))) {20    return 42;21  }22  ();23}24int baz(void) {25  // CHECK: @"_ZZ3bazvENK3$_0clEv"({{.*}}) [[KEEP:#[0-9]+]]26  return []() __attribute__((function_return("keep"))) {27    return 42;28  }29  ();30}31 32class Foo {33public:34  // CHECK: @_ZN3Foo3fooEv({{.*}}) [[EXTERN]]35  __attribute__((function_return("thunk-extern"))) int foo() { return 42; }36};37 38int quux() {39  Foo my_foo;40  return my_foo.foo();41}42 43// CHECK: @extern_c() [[EXTERN]]44extern "C" __attribute__((function_return("thunk-extern"))) void extern_c() {}45extern "C" {46// CHECK: @extern_c2() [[EXTERN]]47__attribute__((function_return("thunk-extern"))) void extern_c2() {}48}49 50// CHECK-NOM-NOT:   [[NOATTR]] = {{.*}}fn_ret_thunk_extern51// CHECK-KEEP-NOT:  [[NOATTR]] = {{.*}}fn_ret_thunk_extern52// CHECK-KEEP-NOT:  [[KEEP]] = {{.*}}fn_ret_thunk_extern53// CHECK-EXTERN:    [[EXTERN]] = {{.*}}fn_ret_thunk_extern54