summaryrefslogtreecommitdiff
path: root/test/CodeGenCXX/target-features-error.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGenCXX/target-features-error.cpp')
-rw-r--r--test/CodeGenCXX/target-features-error.cpp46
1 files changed, 45 insertions, 1 deletions
diff --git a/test/CodeGenCXX/target-features-error.cpp b/test/CodeGenCXX/target-features-error.cpp
index 44179deaf3..28fe4d0e72 100644
--- a/test/CodeGenCXX/target-features-error.cpp
+++ b/test/CodeGenCXX/target-features-error.cpp
@@ -1,4 +1,6 @@
-// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o -
+// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -DTEST1
+// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -DTEST2
+// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -DTEST3
struct S {
__attribute__((always_inline, target("avx512f")))
@@ -9,9 +11,51 @@ struct S {
void operator()(){ }
};
+__attribute__((always_inline, target("avx512f")))
+void free_func(){}
+
+#ifdef TEST1
void usage(S & s) {
s.foo(); // expected-error {{'foo' requires target feature 'avx512f'}}
(void)(int)s; // expected-error {{'operator int' requires target feature 'avx512f'}}
s(); // expected-error {{'operator()' requires target feature 'avx512f'}}
+ free_func(); // expected-error{{'free_func' requires target feature 'avx512f'}}
+
+}
+#endif
+
+#ifdef TEST2
+__attribute__((target("avx512f")))
+void usage(S & s) {
+ s.foo();
+ (void)(int)s;
+ s();
+
+ [&s] {
+ s.foo(); // expected-error {{'foo' requires target feature 'avx512f'}}
+ (void)(int) s; // expected-error {{'operator int' requires target feature 'avx512f'}}
+ s(); // expected-error {{'operator()' requires target feature 'avx512f'}}
+ free_func(); // expected-error{{'free_func' requires target feature 'avx512f'}}
+ }();
+}
+#endif
+
+#ifdef TEST3
+void usage(S & s) {
+
+ [&s] () __attribute__((target("avx512f"))) {
+ s.foo();
+ (void)(int) s;
+ s();
+ free_func();
+ }();
+
+ [&s] {
+ s.foo(); // expected-error {{'foo' requires target feature 'avx512f'}}
+ (void)(int) s; // expected-error {{'operator int' requires target feature 'avx512f'}}
+ s(); // expected-error {{'operator()' requires target feature 'avx512f'}}
+ free_func(); // expected-error{{'free_func' requires target feature 'avx512f'}}
+ }();
}
+#endif