1 /* Test C2x noreturn attribute: invalid contexts. */
2 /* { dg-do compile } */
3 /* { dg-options "-std=c2x -pedantic-errors" } */
4
5 [[noreturn]]; /* { dg-error "ignored" } */
6
7 int [[noreturn]] var; /* { dg-error "ignored" } */
8
9 int array_with_dep_type[2] [[noreturn]]; /* { dg-error "ignored" } */
10
11 void fn_with_dep_type () [[noreturn]]; /* { dg-error "ignored" } */
12
13 int z = sizeof (int [[__noreturn__]]); /* { dg-error "ignored" } */
14
15 [[noreturn]] int x1; /* { dg-error "can only be applied to functions" } */
16 int x2 [[__noreturn__]]; /* { dg-error "can only be applied to functions" } */
17
18 [[_Noreturn]] void (*fp) (); /* { dg-error "can only be applied to functions" } */
19
20 void
21 f (void)
22 {
23 int a;
24 [[_Noreturn]]; /* { dg-error "ignored" } */
25 [[___Noreturn__]] a = 1; /* { dg-error "ignored" } */
26 }
27
28 int
29 g ([[noreturn]] int x, int y) /* { dg-error "can only be applied to functions" } */
30 {
31 [[noreturn]] typedef float F; /* { dg-error "can only be applied to functions" } */
32 [[noreturn]] int a; /* { dg-error "can only be applied to functions" } */
33 int b [[__noreturn__]]; /* { dg-error "can only be applied to functions" } */
34 int c [[noreturn]]; /* { dg-error "can only be applied to functions" } */
35 [[__noreturn__]] label1: ; /* { dg-error "can only be applied to functions" } */
36 c = y;
37 [[noreturn]] label2: ; /* { dg-error "can only be applied to functions" } */
38 return y;
39 }
40
41 struct [[_Noreturn]] s { double d; }; /* { dg-error "can only be applied to functions" } */
42
43 struct s2
44 {
45 [[___Noreturn__]] int a; /* { dg-error "can only be applied to functions" } */
46 int b [[noreturn]]; /* { dg-error "can only be applied to functions" } */
47 } x;
48
49 enum e { E1 [[noreturn]] }; /* { dg-error "can only be applied to functions" } */
50
51 union [[_Noreturn]] u { int x; }; /* { dg-error "can only be applied to functions" } */
52
53 enum [[noreturn]] eu { E2 }; /* { dg-error "can only be applied to functions" } */
54
55 void fx ([[noreturn]] int p); /* { dg-error "can only be applied" } */
56
57 union u2
58 {
59 [[noreturn]] int a; /* { dg-error "can only be applied to functions" } */
60 int b [[noreturn]]; /* { dg-error "can only be applied to functions" } */
61 } y;
62
63 void
64 g2 (int x)
65 {
66 switch (x)
67 {
68 [[noreturn]] case 1: ; /* { dg-error "can only be applied to functions" } */
69 [[__noreturn__]] case 2: ; /* { dg-error "can only be applied to functions" } */
70 [[noreturn]] default: ; /* { dg-error "can only be applied to functions" } */
71 }
72 }