xref: /llvm-project/clang/test/Parser/c11-noreturn.c (revision d8352abd3a4f411828dbe46c7dfd3e935ab4dd4a)
1 // RUN: %clang_cc1 -std=c11 -fsyntax-only -verify %s
2 // RUN: not %clang_cc1 -std=c99 -pedantic -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-EXT %s
3 
4 _Noreturn int f(void);
5 int _Noreturn f(void); // expected-note {{previous}}
6 int f _Noreturn(); // expected-error {{expected ';'}} expected-error 2{{}}
7 int f(void) _Noreturn; // expected-error {{'_Noreturn' keyword must precede function declarator}}
8 
9 _Noreturn char c1; // expected-error {{'_Noreturn' can only appear on functions}}
10 char _Noreturn c2; // expected-error {{'_Noreturn' can only appear on functions}}
11 
12 typedef _Noreturn int g(void); // expected-error {{'_Noreturn' can only appear on functions}}
13 
14 _Noreturn int; // expected-error {{'_Noreturn' can only appear on functions}} expected-warning {{does not declare anything}}
15 _Noreturn struct S; // expected-error {{'_Noreturn' can only appear on functions}}
16 _Noreturn enum E { e }; // expected-error {{'_Noreturn' can only appear on functions}}
17 
18 struct GH56800 {
19   _Noreturn int f1; // expected-error {{type name does not allow function specifier to be specified}}
20 };
21 
22 _Noreturn int AlsoBad; // expected-error {{'_Noreturn' can only appear on functions}}
func(_Noreturn int ThisToo)23 void func(_Noreturn int ThisToo) { // expected-error {{'_Noreturn' can only appear on functions}}
24   for (_Noreturn int i = 0; i < 10; ++i) // expected-error {{'_Noreturn' can only appear on functions}}
25     ;
26 }
27 
28 
29 // CHECK-EXT: '_Noreturn' is a C11 extension
30