libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / c23-attr-noreturn-2.c
blobc6e01800270ded4ec89942b32db9e2deb2a8eb06
1 /* Test C23 noreturn attribute: invalid contexts. */
2 /* { dg-do compile } */
3 /* { dg-options "-std=c23 -pedantic-errors" } */
5 [[noreturn]]; /* { dg-error "ignored" } */
7 int [[noreturn]] var; /* { dg-error "ignored" } */
9 int array_with_dep_type[2] [[noreturn]]; /* { dg-error "ignored" } */
11 void fn_with_dep_type () [[noreturn]]; /* { dg-error "ignored" } */
13 int z = sizeof (int [[__noreturn__]]); /* { dg-error "ignored" } */
15 [[noreturn]] int x1; /* { dg-error "can only be applied to functions" } */
16 int x2 [[__noreturn__]]; /* { dg-error "can only be applied to functions" } */
18 [[_Noreturn]] void (*fp) (); /* { dg-error "can only be applied to functions" } */
20 void
21 f (void)
23 int a;
24 [[_Noreturn]]; /* { dg-error "ignored" } */
25 [[___Noreturn__]] a = 1; /* { dg-error "ignored" } */
28 int
29 g ([[noreturn]] int x, int y) /* { dg-error "can only be applied to functions" } */
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;
41 struct [[_Noreturn]] s { double d; }; /* { dg-error "can only be applied to functions" } */
43 struct s2
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;
49 enum e { E1 [[noreturn]] }; /* { dg-error "can only be applied to functions" } */
51 union [[_Noreturn]] u { int x; }; /* { dg-error "can only be applied to functions" } */
53 enum [[noreturn]] eu { E2 }; /* { dg-error "can only be applied to functions" } */
55 void fx ([[noreturn]] int p); /* { dg-error "can only be applied" } */
57 union u2
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;
63 void
64 g2 (int x)
66 switch (x)
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" } */