1 1.2 rillig /* $NetBSD: c23.c,v 1.2 2023/07/13 20:30:21 rillig Exp $ */ 2 1.1 rillig # 3 "c23.c" 3 1.1 rillig 4 1.1 rillig // Tests for the option -Ac23, which allows features from C23 and all earlier 5 1.1 rillig // ISO standards, but none of the GNU extensions. 6 1.1 rillig // 7 1.1 rillig // See also: 8 1.1 rillig // msg_353.c 9 1.1 rillig 10 1.1 rillig /* lint1-flags: -Ac23 -w -X 351 */ 11 1.1 rillig 12 1.1 rillig int 13 1.1 rillig c23(void) 14 1.1 rillig { 15 1.1 rillig struct s { 16 1.1 rillig int member; 17 1.1 rillig } s; 18 1.1 rillig 19 1.2 rillig // Empty initializer braces were introduced in C23. 20 1.1 rillig s = (struct s){}; 21 1.1 rillig s = (struct s){s.member}; 22 1.1 rillig return s.member; 23 1.1 rillig } 24 1.2 rillig 25 1.2 rillig // The keyword 'thread_local' was introduced in C23. 26 1.2 rillig thread_local int globally_visible; 27 1.2 rillig 28 1.2 rillig // Thread-local functions don't make sense; they are syntactically allowed, 29 1.2 rillig // though. 30 1.2 rillig thread_local void 31 1.2 rillig thread_local_function(void) 32 1.2 rillig { 33 1.2 rillig } 34 1.2 rillig 35 1.2 rillig void 36 1.2 rillig function(void) 37 1.2 rillig { 38 1.2 rillig // Not sure whether it makes sense to have a function-scoped 39 1.2 rillig // thread-local variable. Don't warn for now, let the compilers handle 40 1.2 rillig // this case. 41 1.2 rillig thread_local int function_scoped_thread_local; 42 1.2 rillig } 43