Home | History | Annotate | Line # | Download | only in lint1
c23.c revision 1.2
      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