1 | // RUN: %clang_cc1 -verify -fsyntax-only %s |
2 | |
3 | static void (*fp0)(void) __attribute__((noreturn)); |
4 | |
5 | void fatal(); |
6 | |
7 | static void __attribute__((noreturn)) f0(void) { |
8 | fatal(); |
9 | } // expected-warning {{function declared 'noreturn' should not return}} |
10 | |
11 | // On K&R |
12 | int f1() __attribute__((noreturn)); |
13 | |
14 | int g0 __attribute__((noreturn)); // expected-warning {{'noreturn' only applies to function types; type here is 'int'}} |
15 | |
16 | int f2() __attribute__((noreturn(1, 2))); // expected-error {{'noreturn' attribute takes no arguments}} |
17 | |
18 | void f3() __attribute__((noreturn)); |
19 | void f3() { |
20 | return; // expected-warning {{function 'f3' declared 'noreturn' should not return}} |
21 | } |
22 | |
23 | #pragma clang diagnostic error "-Winvalid-noreturn" |
24 | |
25 | void f4() __attribute__((noreturn)); |
26 | void f4() { |
27 | return; // expected-error {{function 'f4' declared 'noreturn' should not return}} |
28 | } |
29 | |
30 | // PR4685 |
31 | extern void f5 (unsigned long) __attribute__ ((__noreturn__)); |
32 | |
33 | void |
34 | f5 (unsigned long size) |
35 | { |
36 | |
37 | } |
38 | |
39 | // PR2461 |
40 | __attribute__((noreturn)) void f(__attribute__((noreturn)) void (*x)(void)) { |
41 | x(); |
42 | } |
43 | |
44 | typedef void (*Fun)(void) __attribute__ ((noreturn(2))); // expected-error {{'noreturn' attribute takes no arguments}} |
45 | |