c11.c revision 1.3
11.3Srillig/*	$NetBSD: c11.c,v 1.3 2023/07/13 20:30:21 rillig Exp $	*/
21.1Srillig# 3 "c11.c"
31.1Srillig
41.1Srillig/*
51.1Srillig * Test the language level C11, which adds _Generic expressions, _Noreturn
61.1Srillig * functions, anonymous struct/union members, and several more.
71.1Srillig */
81.1Srillig
91.1Srillig/* lint1-flags: -Ac11 -w -X 236 -X 351 */
101.1Srillig
111.1Srillig_Noreturn void exit(int);
121.1Srilligvoid _Noreturn exit(int);
131.1Srillig
141.1Srillig_Noreturn void
151.1Srillignoreturn_before_type(void)
161.1Srillig{
171.1Srillig	exit(0);
181.1Srillig}
191.1Srillig
201.1Srilligvoid _Noreturn
211.1Srillignoreturn_after_type(void)
221.1Srillig{
231.1Srillig	exit(0);
241.1Srillig}
251.1Srillig
261.1Srilligstatic _Noreturn void
271.1Srillignoreturn_after_storage_class(void)
281.1Srillig{
291.1Srillig	exit(0);
301.1Srillig}
311.1Srillig
321.1Srillig_Noreturn static void
331.1Srillignoreturn_before_storage_class(void)
341.1Srillig{
351.1Srillig	exit(0);
361.1Srillig}
371.1Srillig
381.1Srillig/* C11 6.7.4p5: A function specifier may appear more than once. */
391.1Srillig_Noreturn _Noreturn _Noreturn void
401.1Srilligthree_times(void)
411.1Srillig{
421.1Srillig	exit(0);
431.1Srillig}
441.2Srillig
451.3Srillig// In C11 mode, 'thread_local' is not yet known, but '_Thread_local' is.
461.3Srillig/* expect+2: error: old-style declaration; add 'int' [1] */
471.3Srillig/* expect+1: error: syntax error 'int' [249] */
481.3Srilligthread_local int thread_local_variable_c23;
491.3Srillig_Thread_local int thread_local_variable_c11;
501.3Srillig
511.2Srillig/* The '_Noreturn' must not appear after the declarator. */
521.2Srilligvoid _Noreturn exit(int) _Noreturn;
531.2Srillig/* expect-1: error: formal parameter #1 lacks name [59] */
541.2Srillig/* expect-2: warning: empty declaration [2] */
551.2Srillig/* expect+2: error: syntax error '' [249] */
561.2Srillig/* expect+1: error: cannot recover from previous errors [224] */
57