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