diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/flatten.c | 19 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/flatten.cpp | 10 | ||||
| -rw-r--r-- | clang/test/SemaCXX/attr-flatten.cpp | 34 |
3 files changed, 63 insertions, 0 deletions
diff --git a/clang/test/CodeGen/flatten.c b/clang/test/CodeGen/flatten.c new file mode 100644 index 00000000000..d766d543e01 --- /dev/null +++ b/clang/test/CodeGen/flatten.c @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -triple=x86_64-linux-gnu %s -emit-llvm -o - | FileCheck %s + +void f(void) {} + +__attribute__((noinline)) void ni(void) {} + +__attribute__((flatten)) +// CHECK: define void @g() +void g(void) { + // CHECK-NOT: call {{.*}} @f + f(); + // CHECK: call {{.*}} @ni + ni(); +} + +void h(void) { + // CHECK: call {{.*}} @f + f(); +} diff --git a/clang/test/CodeGenCXX/flatten.cpp b/clang/test/CodeGenCXX/flatten.cpp new file mode 100644 index 00000000000..9e0f67f7898 --- /dev/null +++ b/clang/test/CodeGenCXX/flatten.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -triple=x86_64-linux-gnu -std=c++11 %s -emit-llvm -o - | FileCheck %s + +void f(void) {} + +[[gnu::flatten]] +// CHECK: define void @_Z1gv() +void g(void) { + // CHECK-NOT: call {{.*}} @_Z1fv + f(); +} diff --git a/clang/test/SemaCXX/attr-flatten.cpp b/clang/test/SemaCXX/attr-flatten.cpp new file mode 100644 index 00000000000..afcba72b642 --- /dev/null +++ b/clang/test/SemaCXX/attr-flatten.cpp @@ -0,0 +1,34 @@ +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s + +int i __attribute__((flatten)); // expected-error {{'flatten' attribute only applies to functions}} + +void f1() __attribute__((flatten)); +void f2() __attribute__((flatten(1))); // expected-error {{'flatten' attribute takes no arguments}} + +template <typename T> +void tf1() __attribute__((flatten)); + +int f3(int __attribute__((flatten)), int); // expected-error{{'flatten' attribute only applies to functions}} + +struct A { + int f __attribute__((flatten)); // expected-error{{'flatten' attribute only applies to functions}} + void mf1() __attribute__((flatten)); + static void mf2() __attribute__((flatten)); +}; + +int ci [[gnu::flatten]]; // expected-error {{'flatten' attribute only applies to functions}} + +[[gnu::flatten]] void cf1(); +[[gnu::flatten(1)]] void cf2(); // expected-error {{'flatten' attribute takes no arguments}} + +template <typename T> +[[gnu::flatten]] +void ctf1(); + +int cf3(int c[[gnu::flatten]], int); // expected-error{{'flatten' attribute only applies to functions}} + +struct CA { + int f [[gnu::flatten]]; // expected-error{{'flatten' attribute only applies to functions}} + [[gnu::flatten]] void mf1(); + [[gnu::flatten]] static void mf2(); +}; |

