llvm-project

Форк
0
/
lambda-attr.cu 
51 строка · 2.8 Кб
1
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
2
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcuda-is-device -verify %s
3

4
__attribute__((device)) void device_fn() {}
5
__attribute__((host, device)) void hd_fn() {}
6

7
__attribute__((device)) void device_attr() {
8
  ([]() __attribute__((device)) { device_fn(); })();
9
  // expected-warning@-1 {{nvcc does not allow '__device__' to appear after the parameter list in lambdas}}
10
  ([] __attribute__((device)) () { device_fn(); })();
11
  ([] __attribute__((device)) { device_fn(); })();
12

13
  ([&]() __attribute__((device)){ device_fn(); })();
14
  // expected-warning@-1 {{nvcc does not allow '__device__' to appear after the parameter list in lambdas}}
15
  ([&] __attribute__((device)) () { device_fn(); })();
16
  ([&] __attribute__((device)) { device_fn(); })();
17

18
  ([&](int) __attribute__((device)){ device_fn(); })(0);
19
  // expected-warning@-1 {{nvcc does not allow '__device__' to appear after the parameter list in lambdas}}
20
  ([&] __attribute__((device)) (int) { device_fn(); })(0);
21

22
  // test that noinline can appear anywhere.
23
  ([&] __attribute__((device)) __noinline__ () { device_fn(); })();
24
  ([&] __noinline__ __attribute__((device)) () { device_fn(); })();
25
}
26

27
__attribute__((host)) __attribute__((device)) void host_device_attrs() {
28
  ([]() __attribute__((host)) __attribute__((device)){ hd_fn(); })();
29
  // expected-warning@-1 {{nvcc does not allow '__host__' to appear after the parameter list in lambdas}}
30
  // expected-warning@-2 {{nvcc does not allow '__device__' to appear after the parameter list in lambdas}}
31
  ([] __attribute__((host)) __attribute__((device)) () { hd_fn(); })();
32
  ([] __attribute__((host)) __attribute__((device)) { hd_fn(); })();
33

34
  ([&]() __attribute__((host)) __attribute__((device)){ hd_fn(); })();
35
  // expected-warning@-1 {{nvcc does not allow '__host__' to appear after the parameter list in lambdas}}
36
  // expected-warning@-2 {{nvcc does not allow '__device__' to appear after the parameter list in lambdas}}
37
  ([&] __attribute__((host)) __attribute__((device)) () { hd_fn(); })();
38
  ([&] __attribute__((host)) __attribute__((device)) { hd_fn(); })();
39

40
  ([&](int) __attribute__((host)) __attribute__((device)){ hd_fn(); })(0);
41
  // expected-warning@-1 {{nvcc does not allow '__host__' to appear after the parameter list in lambdas}}
42
  // expected-warning@-2 {{nvcc does not allow '__device__' to appear after the parameter list in lambdas}}
43
  ([&] __attribute__((host)) __attribute__((device)) (int) { hd_fn(); })(0);
44

45
  // test that noinline can also appear anywhere.
46
  ([] __attribute__((host)) __attribute__((device)) () { hd_fn(); })();
47
  ([] __attribute__((host)) __noinline__ __attribute__((device)) () { hd_fn(); })();
48
  ([] __attribute__((host)) __attribute__((device)) __noinline__ () { hd_fn(); })();
49
}
50

51
// TODO: Add tests for __attribute__((global)) once we support global lambdas.
52

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.