Module Name: src Committed By: rillig Date: Sat Jan 21 13:07:22 UTC 2023
Modified Files: src/distrib/sets/lists/tests: mi src/tests/usr.bin/xlint/lint1: Makefile c11_atomic.c c99_atomic.c src/usr.bin/xlint/lint1: cgram.y debug.c decl.c err.c lex.c lint1.h Added Files: src/tests/usr.bin/xlint/lint1: msg_350.c Log Message: lint: add support for the C11 type qualifier '_Atomic' That keyword can be used as a type specifier as well, support for that will be added later. To generate a diff of this commit: cvs rdiff -u -r1.1245 -r1.1246 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.132 -r1.133 src/tests/usr.bin/xlint/lint1/Makefile cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/xlint/lint1/c11_atomic.c \ src/tests/usr.bin/xlint/lint1/c99_atomic.c cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/msg_350.c cvs rdiff -u -r1.429 -r1.430 src/usr.bin/xlint/lint1/cgram.y cvs rdiff -u -r1.24 -r1.25 src/usr.bin/xlint/lint1/debug.c cvs rdiff -u -r1.303 -r1.304 src/usr.bin/xlint/lint1/decl.c cvs rdiff -u -r1.185 -r1.186 src/usr.bin/xlint/lint1/err.c cvs rdiff -u -r1.140 -r1.141 src/usr.bin/xlint/lint1/lex.c cvs rdiff -u -r1.160 -r1.161 src/usr.bin/xlint/lint1/lint1.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.1245 src/distrib/sets/lists/tests/mi:1.1246 --- src/distrib/sets/lists/tests/mi:1.1245 Sat Jan 21 11:57:03 2023 +++ src/distrib/sets/lists/tests/mi Sat Jan 21 13:07:21 2023 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1245 2023/01/21 11:57:03 rillig Exp $ +# $NetBSD: mi,v 1.1246 2023/01/21 13:07:21 rillig Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -7336,6 +7336,7 @@ ./usr/tests/usr.bin/xlint/lint1/msg_348.exp tests-obsolete obsolete,atf ./usr/tests/usr.bin/xlint/lint1/msg_349.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/msg_349.exp tests-obsolete obsolete,atf +./usr/tests/usr.bin/xlint/lint1/msg_350.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/op_colon.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/op_colon.exp tests-obsolete obsolete,atf ./usr/tests/usr.bin/xlint/lint1/op_shl_lp64.c tests-usr.bin-tests compattestfile,atf Index: src/tests/usr.bin/xlint/lint1/Makefile diff -u src/tests/usr.bin/xlint/lint1/Makefile:1.132 src/tests/usr.bin/xlint/lint1/Makefile:1.133 --- src/tests/usr.bin/xlint/lint1/Makefile:1.132 Sat Jan 21 11:57:03 2023 +++ src/tests/usr.bin/xlint/lint1/Makefile Sat Jan 21 13:07:22 2023 @@ -1,7 +1,7 @@ -# $NetBSD: Makefile,v 1.132 2023/01/21 11:57:03 rillig Exp $ +# $NetBSD: Makefile,v 1.133 2023/01/21 13:07:22 rillig Exp $ NOMAN= # defined -MAX_MESSAGE= 349 # see lint1/err.c +MAX_MESSAGE= 350 # see lint1/err.c .include <bsd.own.mk> Index: src/tests/usr.bin/xlint/lint1/c11_atomic.c diff -u src/tests/usr.bin/xlint/lint1/c11_atomic.c:1.1 src/tests/usr.bin/xlint/lint1/c11_atomic.c:1.2 --- src/tests/usr.bin/xlint/lint1/c11_atomic.c:1.1 Sat Jan 21 11:57:03 2023 +++ src/tests/usr.bin/xlint/lint1/c11_atomic.c Sat Jan 21 13:07:22 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: c11_atomic.c,v 1.1 2023/01/21 11:57:03 rillig Exp $ */ +/* $NetBSD: c11_atomic.c,v 1.2 2023/01/21 13:07:22 rillig Exp $ */ # 3 "c11_atomic.c" /* @@ -12,16 +12,11 @@ /* lint1-extra-flags: -Ac11 */ -/* FIXME: The error messages are misleading. */ - /* C11 6.7.3 "Type qualifiers" */ -/* expect+2: error: old-style declaration; add 'int' [1] */ -/* expect+1: error: syntax error 'int' [249] */ typedef _Atomic int atomic_int; typedef _Atomic struct { int field; } atomic_struct; -/* expect-1: error: illegal type combination [4] */ /* TODO: C11 6.7.2.4 "Atomic type specifiers" */ Index: src/tests/usr.bin/xlint/lint1/c99_atomic.c diff -u src/tests/usr.bin/xlint/lint1/c99_atomic.c:1.1 src/tests/usr.bin/xlint/lint1/c99_atomic.c:1.2 --- src/tests/usr.bin/xlint/lint1/c99_atomic.c:1.1 Sat Jan 21 11:57:03 2023 +++ src/tests/usr.bin/xlint/lint1/c99_atomic.c Sat Jan 21 13:07:22 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: c99_atomic.c,v 1.1 2023/01/21 11:57:03 rillig Exp $ */ +/* $NetBSD: c99_atomic.c,v 1.2 2023/01/21 13:07:22 rillig Exp $ */ # 3 "c99_atomic.c" /* @@ -6,13 +6,10 @@ * mode, the parser recognizes the keyword but flags it. */ -/* FIXME: The error messages are misleading. */ - -/* expect+2: error: old-style declaration; add 'int' [1] */ -/* expect+1: error: syntax error 'int' [249] */ +/* expect+1: error: '_Atomic' requires C11 or later [350] */ typedef _Atomic int atomic_int; +/* expect+1: error: '_Atomic' requires C11 or later [350] */ typedef _Atomic struct { int field; } atomic_struct; -/* expect-1: error: illegal type combination [4] */ Index: src/usr.bin/xlint/lint1/cgram.y diff -u src/usr.bin/xlint/lint1/cgram.y:1.429 src/usr.bin/xlint/lint1/cgram.y:1.430 --- src/usr.bin/xlint/lint1/cgram.y:1.429 Sat Jan 21 12:50:52 2023 +++ src/usr.bin/xlint/lint1/cgram.y Sat Jan 21 13:07:22 2023 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.429 2023/01/21 12:50:52 rillig Exp $ */ +/* $NetBSD: cgram.y,v 1.430 2023/01/21 13:07:22 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: cgram.y,v 1.429 2023/01/21 12:50:52 rillig Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.430 2023/01/21 13:07:22 rillig Exp $"); #endif #include <limits.h> @@ -206,7 +206,7 @@ is_either(const char *s, const char *a, */ %token <y_tspec> T_TYPE -/* qualifiers (const, volatile, restrict, _Thread_local) */ +/* qualifiers (const, volatile, restrict, _Thread_local, _Atomic) */ %token <y_tqual> T_QUAL /* struct or union */ @@ -1099,7 +1099,13 @@ enumerator: /* C99 6.7.2.2 */ ; type_qualifier: /* C99 6.7.3 */ - T_QUAL + T_QUAL { + /* TODO: First fix c11ism, then use it here. */ + if ($1 == ATOMIC && !allow_c11) + /* '_Atomic' requires C11 or later */ + error(350); + $$ = $1; + } ; pointer: /* C99 6.7.5 */ Index: src/usr.bin/xlint/lint1/debug.c diff -u src/usr.bin/xlint/lint1/debug.c:1.24 src/usr.bin/xlint/lint1/debug.c:1.25 --- src/usr.bin/xlint/lint1/debug.c:1.24 Sun Jan 8 14:05:02 2023 +++ src/usr.bin/xlint/lint1/debug.c Sat Jan 21 13:07:22 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: debug.c,v 1.24 2023/01/08 14:05:02 rillig Exp $ */ +/* $NetBSD: debug.c,v 1.25 2023/01/21 13:07:22 rillig Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: debug.c,v 1.24 2023/01/08 14:05:02 rillig Exp $"); +__RCSID("$NetBSD: debug.c,v 1.25 2023/01/21 13:07:22 rillig Exp $"); #endif #include <stdlib.h> @@ -284,6 +284,7 @@ tqual_name(tqual_t qual) "volatile", "restrict", "_Thread_local", + "_Atomic", }; return name[qual]; Index: src/usr.bin/xlint/lint1/decl.c diff -u src/usr.bin/xlint/lint1/decl.c:1.303 src/usr.bin/xlint/lint1/decl.c:1.304 --- src/usr.bin/xlint/lint1/decl.c:1.303 Sat Jan 14 10:33:34 2023 +++ src/usr.bin/xlint/lint1/decl.c Sat Jan 21 13:07:22 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: decl.c,v 1.303 2023/01/14 10:33:34 rillig Exp $ */ +/* $NetBSD: decl.c,v 1.304 2023/01/21 13:07:22 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: decl.c,v 1.303 2023/01/14 10:33:34 rillig Exp $"); +__RCSID("$NetBSD: decl.c,v 1.304 2023/01/21 13:07:22 rillig Exp $"); #endif #include <sys/param.h> @@ -560,7 +560,7 @@ dcs_add_qualifier(tqual_t q) } dcs->d_volatile = true; } else { - lint_assert(q == RESTRICT || q == THREAD); + lint_assert(q == RESTRICT || q == THREAD || q == ATOMIC); /* Silently ignore these qualifiers. */ } } Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.185 src/usr.bin/xlint/lint1/err.c:1.186 --- src/usr.bin/xlint/lint1/err.c:1.185 Sun Jan 8 17:54:03 2023 +++ src/usr.bin/xlint/lint1/err.c Sat Jan 21 13:07:22 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.185 2023/01/08 17:54:03 rillig Exp $ */ +/* $NetBSD: err.c,v 1.186 2023/01/21 13:07:22 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: err.c,v 1.185 2023/01/08 17:54:03 rillig Exp $"); +__RCSID("$NetBSD: err.c,v 1.186 2023/01/21 13:07:22 rillig Exp $"); #endif #include <limits.h> @@ -405,6 +405,7 @@ static const char *const msgs[] = { "redeclaration of '%s' with type '%s', expected '%s'", /* 347 */ "maximum value %d of '%s' does not match maximum array index %d", /* 348 */ "non type argument to alignof is a GCC extension", /* 349 */ + "'_Atomic' requires C11 or later", /* 350 */ }; static bool is_suppressed[sizeof(msgs) / sizeof(msgs[0])]; Index: src/usr.bin/xlint/lint1/lex.c diff -u src/usr.bin/xlint/lint1/lex.c:1.140 src/usr.bin/xlint/lint1/lex.c:1.141 --- src/usr.bin/xlint/lint1/lex.c:1.140 Sat Jan 21 10:18:15 2023 +++ src/usr.bin/xlint/lint1/lex.c Sat Jan 21 13:07:22 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lex.c,v 1.140 2023/01/21 10:18:15 rillig Exp $ */ +/* $NetBSD: lex.c,v 1.141 2023/01/21 13:07:22 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: lex.c,v 1.140 2023/01/21 10:18:15 rillig Exp $"); +__RCSID("$NetBSD: lex.c,v 1.141 2023/01/21 13:07:22 rillig Exp $"); #endif #include <ctype.h> @@ -112,6 +112,7 @@ static const struct keyword { kwdef_keyword( "_Alignas", T_ALIGNAS), kwdef_keyword( "_Alignof", T_ALIGNOF), kwdef_token( "alignof", T_ALIGNOF, 78,0,6), + kwdef_tqual( "_Atomic", ATOMIC, 11,0,1), kwdef_token( "asm", T_ASM, 78,1,7), kwdef_token( "attribute", T_ATTRIBUTE, 78,1,6), kwdef_sclass( "auto", AUTO, 78,0,1), @@ -157,6 +158,7 @@ static const struct keyword { kwdef_keyword( "switch", T_SWITCH), kwdef_token( "__symbolrename", T_SYMBOLRENAME, 78,0,1), kwdef_tqual( "__thread", THREAD, 78,1,1), + /* XXX: _Thread_local is a storage-class-specifier, not tqual. */ kwdef_tqual( "_Thread_local", THREAD, 11,0,1), kwdef_sclass( "typedef", TYPEDEF, 78,0,1), kwdef_token( "typeof", T_TYPEOF, 78,1,7), Index: src/usr.bin/xlint/lint1/lint1.h diff -u src/usr.bin/xlint/lint1/lint1.h:1.160 src/usr.bin/xlint/lint1/lint1.h:1.161 --- src/usr.bin/xlint/lint1/lint1.h:1.160 Sat Jan 14 10:33:34 2023 +++ src/usr.bin/xlint/lint1/lint1.h Sat Jan 21 13:07:22 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lint1.h,v 1.160 2023/01/14 10:33:34 rillig Exp $ */ +/* $NetBSD: lint1.h,v 1.161 2023/01/21 13:07:22 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -92,7 +92,11 @@ typedef struct strg { * qualifiers (only for lex/yacc interface) */ typedef enum { - CONST, VOLATILE, RESTRICT, THREAD + CONST, + VOLATILE, + RESTRICT, + THREAD, /* XXX: storage-class-qualifier */ + ATOMIC, } tqual_t; /* An integer or floating-point value. */ Added files: Index: src/tests/usr.bin/xlint/lint1/msg_350.c diff -u /dev/null src/tests/usr.bin/xlint/lint1/msg_350.c:1.1 --- /dev/null Sat Jan 21 13:07:22 2023 +++ src/tests/usr.bin/xlint/lint1/msg_350.c Sat Jan 21 13:07:22 2023 @@ -0,0 +1,12 @@ +/* $NetBSD: msg_350.c,v 1.1 2023/01/21 13:07:22 rillig Exp $ */ +# 3 "msg_350.c" + +// Test for message 350: '_Atomic' requires C11 or later [350] + +/* expect+1: error: '_Atomic' requires C11 or later [350] */ +typedef _Atomic int atomic_int; + +/* expect+1: error: '_Atomic' requires C11 or later [350] */ +typedef _Atomic struct { + int field; +} atomic_struct;