lint: remove message 66 about missing semicolon in struct-declarationdiff -r1.1 -r1.2 src/tests/usr.bin/xlint/lint1/decl_struct_c90.c
(rillig)
--- src/tests/usr.bin/xlint/lint1/decl_struct_c90.c 2021/07/15 19:51:29 1.1
+++ src/tests/usr.bin/xlint/lint1/decl_struct_c90.c 2021/07/15 20:05:49 1.2
@@ -1,18 +1,21 @@ | @@ -1,18 +1,21 @@ | |||
1 | /* $NetBSD: decl_struct_c90.c,v 1.1 2021/07/15 19:51:29 rillig Exp $ */ | 1 | /* $NetBSD: decl_struct_c90.c,v 1.2 2021/07/15 20:05:49 rillig Exp $ */ | |
2 | # 3 "decl_struct_c90.c" | 2 | # 3 "decl_struct_c90.c" | |
3 | 3 | |||
4 | /* | 4 | /* | |
5 | * Test declaration of struct types, in C90 without any GNU extensions. | 5 | * Test declaration of struct types, in C90 without any GNU extensions. | |
6 | */ | 6 | */ | |
7 | 7 | |||
8 | /* lint1-flags: -sw */ | 8 | /* lint1-flags: -sw */ | |
9 | 9 | |||
10 | /* | 10 | /* | |
11 | * All of K&R, C90, C99 require that a struct member declaration is | 11 | * All of K&R, C90, C99 require that a struct member declaration is | |
12 | * terminated with a semicolon. No idea why lint allows the missing | 12 | * terminated with a semicolon. | |
13 | * semicolon in non-C90 mode. | 13 | * | |
14 | * Before cgram.y 1.328 from 2021-07-15, lint allowed the missing semicolon | |||
15 | * in non-C90 mode, no idea why. | |||
14 | */ | 16 | */ | |
15 | struct missing_semicolon { | 17 | struct missing_semicolon { | |
16 | int member | 18 | int member | |
17 | }; | 19 | }; | |
18 | /* expect-1: error: syntax requires ';' after last struct/union member [66] */ | 20 | /* expect-1: error: syntax error '}' [249] */ | |
21 | /* expect+1: error: cannot recover from previous errors [224] */ |
--- src/tests/usr.bin/xlint/lint1/Attic/decl_struct_c90.exp 2021/07/15 19:51:29 1.1
+++ src/tests/usr.bin/xlint/lint1/Attic/decl_struct_c90.exp 2021/07/15 20:05:49 1.2
--- src/tests/usr.bin/xlint/lint1/decl_struct_member.c 2021/07/15 19:51:29 1.7
+++ src/tests/usr.bin/xlint/lint1/decl_struct_member.c 2021/07/15 20:05:49 1.8
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | /* $NetBSD: decl_struct_member.c,v 1.7 2021/07/15 19:51:29 rillig Exp $ */ | 1 | /* $NetBSD: decl_struct_member.c,v 1.8 2021/07/15 20:05:49 rillig Exp $ */ | |
2 | # 3 "decl_struct_member.c" | 2 | # 3 "decl_struct_member.c" | |
3 | 3 | |||
4 | struct multi_attributes { | 4 | struct multi_attributes { | |
5 | __attribute__((deprecated)) | 5 | __attribute__((deprecated)) | |
6 | __attribute__((deprecated)) | 6 | __attribute__((deprecated)) | |
7 | __attribute__((deprecated)) | 7 | __attribute__((deprecated)) | |
8 | int deprecated; | 8 | int deprecated; | |
9 | }; | 9 | }; | |
10 | 10 | |||
11 | struct cover_begin_type_noclass_declspecs { | 11 | struct cover_begin_type_noclass_declspecs { | |
12 | int m1; | 12 | int m1; | |
13 | __attribute__((deprecated)) int m2; | 13 | __attribute__((deprecated)) int m2; | |
14 | const int m3; | 14 | const int m3; | |
@@ -42,20 +42,20 @@ struct goto { | @@ -42,20 +42,20 @@ struct goto { | |||
42 | * Before cgram.y 1.228 from 2021-06-19, lint ran into an assertion failure: | 42 | * Before cgram.y 1.228 from 2021-06-19, lint ran into an assertion failure: | |
43 | * | 43 | * | |
44 | * "is_struct_or_union(dcs->d_type->t_tspec)" at cgram.y:846 | 44 | * "is_struct_or_union(dcs->d_type->t_tspec)" at cgram.y:846 | |
45 | */ | 45 | */ | |
46 | struct { | 46 | struct { | |
47 | char; /* expect: syntax error 'unnamed member' */ | 47 | char; /* expect: syntax error 'unnamed member' */ | |
48 | }; | 48 | }; | |
49 | 49 | |||
50 | /* | 50 | /* | |
51 | * Before decl.c 1.188 from 2021-06-20, lint ran into a segmentation fault. | 51 | * Before decl.c 1.188 from 2021-06-20, lint ran into a segmentation fault. | |
52 | */ | 52 | */ | |
53 | struct { | 53 | struct { | |
54 | char a(_)0 /* expect: syntax error '0' */ | 54 | char a(_)0 /* expect: syntax error '0' */ | |
55 | } /* expect: ';' after last */ | 55 | } | |
56 | /* | 56 | /* | |
57 | * FIXME: adding a semicolon here triggers another assertion: | 57 | * FIXME: adding a semicolon here triggers another assertion: | |
58 | * | 58 | * | |
59 | * assertion "t == NOTSPEC" failed in end_type at decl.c:774 | 59 | * assertion "t == NOTSPEC" failed in end_type at decl.c:774 | |
60 | */ | 60 | */ | |
61 | /* expect+1: cannot recover from previous errors */ | 61 | /* expect+1: cannot recover from previous errors */ |
--- src/tests/usr.bin/xlint/lint1/Attic/decl_struct_member.exp 2021/07/15 19:51:29 1.6
+++ src/tests/usr.bin/xlint/lint1/Attic/decl_struct_member.exp 2021/07/15 20:05:49 1.7
@@ -1,8 +1,7 @@ | @@ -1,8 +1,7 @@ | |||
1 | decl_struct_member.c(34): error: syntax error 'goto' [249] | 1 | decl_struct_member.c(34): error: syntax error 'goto' [249] | |
2 | decl_struct_member.c(36): error: illegal type combination [4] | 2 | decl_struct_member.c(36): error: illegal type combination [4] | |
3 | decl_struct_member.c(38): error: syntax error '}' [249] | 3 | decl_struct_member.c(38): error: syntax error '}' [249] | |
4 | decl_struct_member.c(38): warning: empty declaration [0] | 4 | decl_struct_member.c(38): warning: empty declaration [0] | |
5 | decl_struct_member.c(47): error: syntax error 'unnamed member' [249] | 5 | decl_struct_member.c(47): error: syntax error 'unnamed member' [249] | |
6 | decl_struct_member.c(54): error: syntax error '0' [249] | 6 | decl_struct_member.c(54): error: syntax error '0' [249] | |
7 | decl_struct_member.c(55): warning: syntax requires ';' after last struct/union member [66] | |||
8 | decl_struct_member.c(62): error: cannot recover from previous errors [224] | 7 | decl_struct_member.c(62): error: cannot recover from previous errors [224] |
--- src/tests/usr.bin/xlint/lint1/msg_066.c 2021/01/31 11:12:07 1.3
+++ src/tests/usr.bin/xlint/lint1/msg_066.c 2021/07/15 20:05:49 1.4
@@ -1,8 +1,15 @@ | @@ -1,8 +1,15 @@ | |||
1 | /* $NetBSD: msg_066.c,v 1.3 2021/01/31 11:12:07 rillig Exp $ */ | 1 | /* $NetBSD: msg_066.c,v 1.4 2021/07/15 20:05:49 rillig Exp $ */ | |
2 | # 3 "msg_066.c" | 2 | # 3 "msg_066.c" | |
3 | 3 | |||
4 | // Test for message: syntax requires ';' after last struct/union member [66] | 4 | // Test for message: syntax requires ';' after last struct/union member [66] | |
5 | 5 | |||
6 | /* | |||
7 | * This message was removed in cgram.y 1.328 from 2021-07-15 because all | |||
8 | * C standards and even K&R require a semicolon. | |||
9 | */ | |||
10 | ||||
6 | struct number { | 11 | struct number { | |
7 | int value | 12 | int value | |
8 | }; /* expect: 66 */ | 13 | }; | |
14 | /* expect-1: syntax error '}' [249] */ | |||
15 | /* expect+1: error: cannot recover from previous errors [224] */ |
--- src/tests/usr.bin/xlint/lint1/Attic/msg_066.exp 2021/01/08 21:25:03 1.2
+++ src/tests/usr.bin/xlint/lint1/Attic/msg_066.exp 2021/07/15 20:05:49 1.3
--- src/usr.bin/xlint/lint1/cgram.y 2021/07/15 18:18:15 1.327
+++ src/usr.bin/xlint/lint1/cgram.y 2021/07/15 20:05:49 1.328
@@ -1,15 +1,15 @@ | @@ -1,15 +1,15 @@ | |||
1 | %{ | 1 | %{ | |
2 | /* $NetBSD: cgram.y,v 1.327 2021/07/15 18:18:15 rillig Exp $ */ | 2 | /* $NetBSD: cgram.y,v 1.328 2021/07/15 20:05:49 rillig Exp $ */ | |
3 | 3 | |||
4 | /* | 4 | /* | |
5 | * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. | 5 | * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. | |
6 | * Copyright (c) 1994, 1995 Jochen Pohl | 6 | * Copyright (c) 1994, 1995 Jochen Pohl | |
7 | * All Rights Reserved. | 7 | * All Rights Reserved. | |
8 | * | 8 | * | |
9 | * Redistribution and use in source and binary forms, with or without | 9 | * Redistribution and use in source and binary forms, with or without | |
10 | * modification, are permitted provided that the following conditions | 10 | * modification, are permitted provided that the following conditions | |
11 | * are met: | 11 | * are met: | |
12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | |
13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | |
14 | * 2. Redistributions in binary form must reproduce the above copyright | 14 | * 2. Redistributions in binary form must reproduce the above copyright | |
15 | * notice, this list of conditions and the following disclaimer in the | 15 | * notice, this list of conditions and the following disclaimer in the | |
@@ -25,27 +25,27 @@ | @@ -25,27 +25,27 @@ | |||
25 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | 25 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
26 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | 26 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
27 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | 27 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | |
28 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | 28 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
29 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 29 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
30 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 30 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
31 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 31 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
32 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 32 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
33 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 33 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
34 | */ | 34 | */ | |
35 | 35 | |||
36 | #include <sys/cdefs.h> | 36 | #include <sys/cdefs.h> | |
37 | #if defined(__RCSID) && !defined(lint) | 37 | #if defined(__RCSID) && !defined(lint) | |
38 | __RCSID("$NetBSD: cgram.y,v 1.327 2021/07/15 18:18:15 rillig Exp $"); | 38 | __RCSID("$NetBSD: cgram.y,v 1.328 2021/07/15 20:05:49 rillig Exp $"); | |
39 | #endif | 39 | #endif | |
40 | 40 | |||
41 | #include <limits.h> | 41 | #include <limits.h> | |
42 | #include <stdlib.h> | 42 | #include <stdlib.h> | |
43 | #include <string.h> | 43 | #include <string.h> | |
44 | 44 | |||
45 | #include "lint1.h" | 45 | #include "lint1.h" | |
46 | 46 | |||
47 | extern char *yytext; | 47 | extern char *yytext; | |
48 | 48 | |||
49 | /* | 49 | /* | |
50 | * Contains the level of current declaration, used for symbol table entries. | 50 | * Contains the level of current declaration, used for symbol table entries. | |
51 | * 0 is the top-level, > 0 is inside a function body. | 51 | * 0 is the top-level, > 0 is inside a function body. | |
@@ -923,84 +923,75 @@ struct_or_union: /* C99 6.7.2.1 */ | @@ -923,84 +923,75 @@ struct_or_union: /* C99 6.7.2.1 */ | |||
923 | braced_struct_declaration_list: /* see C99 6.7.2.1 */ | 923 | braced_struct_declaration_list: /* see C99 6.7.2.1 */ | |
924 | struct_declaration_lbrace struct_declaration_list_with_rbrace { | 924 | struct_declaration_lbrace struct_declaration_list_with_rbrace { | |
925 | $$ = $2; | 925 | $$ = $2; | |
926 | } | 926 | } | |
927 | ; | 927 | ; | |
928 | 928 | |||
929 | struct_declaration_lbrace: /* see C99 6.7.2.1 */ | 929 | struct_declaration_lbrace: /* see C99 6.7.2.1 */ | |
930 | T_LBRACE { | 930 | T_LBRACE { | |
931 | symtyp = FVFT; | 931 | symtyp = FVFT; | |
932 | } | 932 | } | |
933 | ; | 933 | ; | |
934 | 934 | |||
935 | struct_declaration_list_with_rbrace: /* see C99 6.7.2.1 */ | 935 | struct_declaration_list_with_rbrace: /* see C99 6.7.2.1 */ | |
936 | struct_declaration_list T_SEMI T_RBRACE | 936 | struct_declaration_list T_RBRACE | |
937 | | struct_declaration_list T_RBRACE { | |||
938 | if (sflag) { | |||
939 | /* syntax req. ';' after last struct/union member */ | |||
940 | error(66); | |||
941 | } else { | |||
942 | /* syntax req. ';' after last struct/union member */ | |||
943 | warning(66); | |||
944 | } | |||
945 | $$ = $1; | |||
946 | } | |||
947 | | T_RBRACE { | 937 | | T_RBRACE { | |
938 | /* XXX: This is not allowed by any C standard. */ | |||
948 | $$ = NULL; | 939 | $$ = NULL; | |
949 | } | 940 | } | |
950 | ; | 941 | ; | |
951 | 942 | |||
952 | struct_declaration_list: /* C99 6.7.2.1 */ | 943 | struct_declaration_list: /* C99 6.7.2.1 */ | |
953 | struct_declaration | 944 | struct_declaration | |
954 | | struct_declaration_list T_SEMI struct_declaration { | 945 | | struct_declaration_list struct_declaration { | |
955 | $$ = lnklst($1, $3); | 946 | $$ = lnklst($1, $2); | |
956 | } | 947 | } | |
957 | ; | 948 | ; | |
958 | 949 | |||
959 | struct_declaration: /* C99 6.7.2.1 */ | 950 | struct_declaration: /* C99 6.7.2.1 */ | |
960 | begin_type_noclass_declmods end_type { | 951 | begin_type_noclass_declmods end_type { | |
961 | /* too late, i know, but getsym() compensates it */ | 952 | /* too late, i know, but getsym() compensates it */ | |
962 | symtyp = FMEMBER; | 953 | symtyp = FMEMBER; | |
963 | } notype_struct_declarators type_attribute_opt { | 954 | } notype_struct_declarators type_attribute_opt T_SEMI { | |
964 | symtyp = FVFT; | 955 | symtyp = FVFT; | |
965 | $$ = $4; | 956 | $$ = $4; | |
966 | } | 957 | } | |
967 | | begin_type_noclass_declspecs end_type { | 958 | | begin_type_noclass_declspecs end_type { | |
968 | symtyp = FMEMBER; | 959 | symtyp = FMEMBER; | |
969 | } type_struct_declarators type_attribute_opt { | 960 | } type_struct_declarators type_attribute_opt T_SEMI { | |
970 | symtyp = FVFT; | 961 | symtyp = FVFT; | |
971 | $$ = $4; | 962 | $$ = $4; | |
972 | } | 963 | } | |
973 | | begin_type_noclass_declmods end_type type_attribute_opt { | 964 | | begin_type_noclass_declmods end_type type_attribute_opt T_SEMI { | |
974 | /* syntax error '%s' */ | 965 | /* syntax error '%s' */ | |
975 | error(249, "member without type"); | 966 | error(249, "member without type"); | |
976 | $$ = NULL; | 967 | $$ = NULL; | |
977 | } | 968 | } | |
978 | | begin_type_noclass_declspecs end_type type_attribute_opt { | 969 | | begin_type_noclass_declspecs end_type type_attribute_opt T_SEMI { | |
979 | symtyp = FVFT; | 970 | symtyp = FVFT; | |
980 | if (!Sflag) | 971 | if (!Sflag) | |
981 | /* anonymous struct/union members is a C9X feature */ | 972 | /* anonymous struct/union members is a C9X feature */ | |
982 | warning(49); | 973 | warning(49); | |
983 | if (is_struct_or_union(dcs->d_type->t_tspec)) { | 974 | if (is_struct_or_union(dcs->d_type->t_tspec)) { | |
984 | $$ = dcs->d_type->t_str->sou_first_member; | 975 | $$ = dcs->d_type->t_str->sou_first_member; | |
985 | /* add all the members of the anonymous struct/union */ | 976 | /* add all the members of the anonymous struct/union */ | |
986 | anonymize($$); | 977 | anonymize($$); | |
987 | } else { | 978 | } else { | |
988 | /* syntax error '%s' */ | 979 | /* syntax error '%s' */ | |
989 | error(249, "unnamed member"); | 980 | error(249, "unnamed member"); | |
990 | $$ = NULL; | 981 | $$ = NULL; | |
991 | } | 982 | } | |
992 | } | 983 | } | |
993 | | error { | 984 | | error T_SEMI { | |
994 | symtyp = FVFT; | 985 | symtyp = FVFT; | |
995 | $$ = NULL; | 986 | $$ = NULL; | |
996 | } | 987 | } | |
997 | ; | 988 | ; | |
998 | 989 | |||
999 | notype_struct_declarators: | 990 | notype_struct_declarators: | |
1000 | notype_struct_declarator { | 991 | notype_struct_declarator { | |
1001 | $$ = declarator_1_struct_union($1); | 992 | $$ = declarator_1_struct_union($1); | |
1002 | } | 993 | } | |
1003 | | notype_struct_declarators { | 994 | | notype_struct_declarators { | |
1004 | symtyp = FMEMBER; | 995 | symtyp = FMEMBER; | |
1005 | } T_COMMA type_struct_declarator { | 996 | } T_COMMA type_struct_declarator { | |
1006 | $$ = lnklst($1, declarator_1_struct_union($4)); | 997 | $$ = lnklst($1, declarator_1_struct_union($4)); |
--- src/usr.bin/xlint/lint1/err.c 2021/07/13 22:01:34 1.129
+++ src/usr.bin/xlint/lint1/err.c 2021/07/15 20:05:49 1.130
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | /* $NetBSD: err.c,v 1.129 2021/07/13 22:01:34 rillig Exp $ */ | 1 | /* $NetBSD: err.c,v 1.130 2021/07/15 20:05:49 rillig Exp $ */ | |
2 | 2 | |||
3 | /* | 3 | /* | |
4 | * Copyright (c) 1994, 1995 Jochen Pohl | 4 | * Copyright (c) 1994, 1995 Jochen Pohl | |
5 | * All Rights Reserved. | 5 | * All Rights Reserved. | |
6 | * | 6 | * | |
7 | * Redistribution and use in source and binary forms, with or without | 7 | * Redistribution and use in source and binary forms, with or without | |
8 | * modification, are permitted provided that the following conditions | 8 | * modification, are permitted provided that the following conditions | |
9 | * are met: | 9 | * are met: | |
10 | * 1. Redistributions of source code must retain the above copyright | 10 | * 1. Redistributions of source code must retain the above copyright | |
11 | * notice, this list of conditions and the following disclaimer. | 11 | * notice, this list of conditions and the following disclaimer. | |
12 | * 2. Redistributions in binary form must reproduce the above copyright | 12 | * 2. Redistributions in binary form must reproduce the above copyright | |
13 | * notice, this list of conditions and the following disclaimer in the | 13 | * notice, this list of conditions and the following disclaimer in the | |
14 | * documentation and/or other materials provided with the distribution. | 14 | * documentation and/or other materials provided with the distribution. | |
@@ -27,27 +27,27 @@ | @@ -27,27 +27,27 @@ | |||
27 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 27 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
28 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 28 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
29 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 29 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
30 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 30 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
31 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 31 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
32 | */ | 32 | */ | |
33 | 33 | |||
34 | #if HAVE_NBTOOL_CONFIG_H | 34 | #if HAVE_NBTOOL_CONFIG_H | |
35 | #include "nbtool_config.h" | 35 | #include "nbtool_config.h" | |
36 | #endif | 36 | #endif | |
37 | 37 | |||
38 | #include <sys/cdefs.h> | 38 | #include <sys/cdefs.h> | |
39 | #if defined(__RCSID) && !defined(lint) | 39 | #if defined(__RCSID) && !defined(lint) | |
40 | __RCSID("$NetBSD: err.c,v 1.129 2021/07/13 22:01:34 rillig Exp $"); | 40 | __RCSID("$NetBSD: err.c,v 1.130 2021/07/15 20:05:49 rillig Exp $"); | |
41 | #endif | 41 | #endif | |
42 | 42 | |||
43 | #include <sys/types.h> | 43 | #include <sys/types.h> | |
44 | #include <stdarg.h> | 44 | #include <stdarg.h> | |
45 | #include <stdlib.h> | 45 | #include <stdlib.h> | |
46 | 46 | |||
47 | #include "lint1.h" | 47 | #include "lint1.h" | |
48 | 48 | |||
49 | /* number of errors found */ | 49 | /* number of errors found */ | |
50 | int nerr; | 50 | int nerr; | |
51 | 51 | |||
52 | /* number of syntax errors */ | 52 | /* number of syntax errors */ | |
53 | int sytxerr; | 53 | int sytxerr; | |
@@ -110,27 +110,27 @@ const char *const msgs[] = { | @@ -110,27 +110,27 @@ const char *const msgs[] = { | |||
110 | "declared argument %s is missing", /* 53 */ | 110 | "declared argument %s is missing", /* 53 */ | |
111 | "trailing ',' prohibited in enum declaration", /* 54 */ | 111 | "trailing ',' prohibited in enum declaration", /* 54 */ | |
112 | "integral constant expression expected", /* 55 */ | 112 | "integral constant expression expected", /* 55 */ | |
113 | "integral constant too large", /* 56 */ | 113 | "integral constant too large", /* 56 */ | |
114 | "enumeration constant hides parameter: %s", /* 57 */ | 114 | "enumeration constant hides parameter: %s", /* 57 */ | |
115 | "type does not match prototype: %s", /* 58 */ | 115 | "type does not match prototype: %s", /* 58 */ | |
116 | "formal parameter lacks name: param #%d", /* 59 */ | 116 | "formal parameter lacks name: param #%d", /* 59 */ | |
117 | "void must be sole parameter", /* 60 */ | 117 | "void must be sole parameter", /* 60 */ | |
118 | "void parameter cannot have name: %s", /* 61 */ | 118 | "void parameter cannot have name: %s", /* 61 */ | |
119 | "function prototype parameters must have types", /* 62 */ | 119 | "function prototype parameters must have types", /* 62 */ | |
120 | "prototype does not match old-style definition", /* 63 */ | 120 | "prototype does not match old-style definition", /* 63 */ | |
121 | "()-less function definition", /* 64 */ | 121 | "()-less function definition", /* 64 */ | |
122 | "%s has no named members", /* 65 */ | 122 | "%s has no named members", /* 65 */ | |
123 | "syntax requires ';' after last struct/union member", /* 66 */ | 123 | "", /* 66 */ | |
124 | "cannot return incomplete type", /* 67 */ | 124 | "cannot return incomplete type", /* 67 */ | |
125 | "typedef already qualified with '%s'", /* 68 */ | 125 | "typedef already qualified with '%s'", /* 68 */ | |
126 | "inappropriate qualifiers with 'void'", /* 69 */ | 126 | "inappropriate qualifiers with 'void'", /* 69 */ | |
127 | "%soperand of '%s' is unsigned in ANSI C", /* 70 */ | 127 | "%soperand of '%s' is unsigned in ANSI C", /* 70 */ | |
128 | "too many characters in character constant", /* 71 */ | 128 | "too many characters in character constant", /* 71 */ | |
129 | "typedef declares no type name", /* 72 */ | 129 | "typedef declares no type name", /* 72 */ | |
130 | "empty character constant", /* 73 */ | 130 | "empty character constant", /* 73 */ | |
131 | "no hex digits follow \\x", /* 74 */ | 131 | "no hex digits follow \\x", /* 74 */ | |
132 | "overflow in hex escape", /* 75 */ | 132 | "overflow in hex escape", /* 75 */ | |
133 | "character escape does not fit in character", /* 76 */ | 133 | "character escape does not fit in character", /* 76 */ | |
134 | "bad octal digit %c", /* 77 */ | 134 | "bad octal digit %c", /* 77 */ | |
135 | "nonportable character escape", /* 78 */ | 135 | "nonportable character escape", /* 78 */ | |
136 | "dubious escape \\%c", /* 79 */ | 136 | "dubious escape \\%c", /* 79 */ |