The previous version of this used CurFuncDecl in CodeGenFunction, however this doesn't include lambdas. However, CurCodeDecl DOES. Switch the check to use CurCodeDecl so that the actual function being emitted gets checked, preventing an error in ISEL. llvm-svn: 370261
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
// 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")))
|
|
void foo(){}
|
|
__attribute__((always_inline, target("avx512f")))
|
|
operator int(){ return 0; }
|
|
__attribute__((always_inline, target("avx512f")))
|
|
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
|