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;