Module Name: src
Committed By: rillig
Date: Sun Apr 24 19:21:01 UTC 2022
Modified Files:
src/tests/usr.bin/xlint/lint1: decl.c decl.exp emit.c emit.exp
msg_007.c msg_007.exp msg_030.c msg_030.exp msg_072.c msg_072.exp
src/usr.bin/xlint/lint1: cgram.y
Log Message:
lint: error out on missing type in declarations
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/tests/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.9 -r1.10 src/tests/usr.bin/xlint/lint1/decl.exp
cvs rdiff -u -r1.10 -r1.11 src/tests/usr.bin/xlint/lint1/emit.c
cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/emit.exp
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/msg_007.c \
src/tests/usr.bin/xlint/lint1/msg_007.exp \
src/tests/usr.bin/xlint/lint1/msg_030.c \
src/tests/usr.bin/xlint/lint1/msg_030.exp
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/msg_072.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_072.exp
cvs rdiff -u -r1.400 -r1.401 src/usr.bin/xlint/lint1/cgram.y
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/usr.bin/xlint/lint1/decl.c
diff -u src/tests/usr.bin/xlint/lint1/decl.c:1.13 src/tests/usr.bin/xlint/lint1/decl.c:1.14
--- src/tests/usr.bin/xlint/lint1/decl.c:1.13 Sun Apr 3 10:05:23 2022
+++ src/tests/usr.bin/xlint/lint1/decl.c Sun Apr 24 19:21:01 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.13 2022/04/03 10:05:23 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.14 2022/04/24 19:21:01 rillig Exp $ */
# 3 "decl.c"
/*
@@ -104,7 +104,7 @@ int
declaration_without_type_specifier(void)
{
const i = 3;
-
+ /* expect-1: error: old style declaration; add 'int' [1] */
return i;
}
Index: src/tests/usr.bin/xlint/lint1/decl.exp
diff -u src/tests/usr.bin/xlint/lint1/decl.exp:1.9 src/tests/usr.bin/xlint/lint1/decl.exp:1.10
--- src/tests/usr.bin/xlint/lint1/decl.exp:1.9 Sun Apr 3 10:05:23 2022
+++ src/tests/usr.bin/xlint/lint1/decl.exp Sun Apr 24 19:21:01 2022
@@ -9,6 +9,7 @@ decl.c(68): warning: converting 'pointer
decl.c(70): warning: illegal combination of pointer (pointer to double) and integer (char), arg #1 [154]
decl.c(72): warning: converting 'pointer to pointer to char' to incompatible 'pointer to double' for argument 1 [153]
decl.c(80): error: syntax error '"' [249]
+decl.c(106): error: old style declaration; add 'int' [1]
decl.c(163): error: syntax error 'int' [249]
decl.c(166): error: syntax error 'int' [249]
decl.c(180): error: syntax error 'goto' [249]
Index: src/tests/usr.bin/xlint/lint1/emit.c
diff -u src/tests/usr.bin/xlint/lint1/emit.c:1.10 src/tests/usr.bin/xlint/lint1/emit.c:1.11
--- src/tests/usr.bin/xlint/lint1/emit.c:1.10 Sat Jan 15 14:22:03 2022
+++ src/tests/usr.bin/xlint/lint1/emit.c Sun Apr 24 19:21:01 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: emit.c,v 1.10 2022/01/15 14:22:03 rillig Exp $ */
+/* $NetBSD: emit.c,v 1.11 2022/04/24 19:21:01 rillig Exp $ */
# 3 "emit.c"
/*
@@ -121,7 +121,7 @@ extern const volatile int extern_const_v
extern void return_void_unknown_parameters();
extern /* implicit int */ return_implicit_int_unknown_parameters();
-
+/* expect-1: error: old style declaration; add 'int' [1] */
/* For function declarations, the keyword 'extern' is optional. */
extern void extern_return_void_no_parameters(void);
/* implicit extern */ void return_void_no_parameters(void);
Index: src/tests/usr.bin/xlint/lint1/emit.exp
diff -u src/tests/usr.bin/xlint/lint1/emit.exp:1.2 src/tests/usr.bin/xlint/lint1/emit.exp:1.3
--- src/tests/usr.bin/xlint/lint1/emit.exp:1.2 Sat Jan 15 14:22:03 2022
+++ src/tests/usr.bin/xlint/lint1/emit.exp Sun Apr 24 19:21:01 2022
@@ -1,3 +1,4 @@
+emit.c(123): error: old style declaration; add 'int' [1]
emit.c(108): warning: static variable static_int unused [226]
emit.c(129): warning: static function static_return_void_no_parameters declared but not defined [290]
emit.c(149): warning: static function static_function declared but not defined [290]
Index: src/tests/usr.bin/xlint/lint1/msg_007.c
diff -u src/tests/usr.bin/xlint/lint1/msg_007.c:1.3 src/tests/usr.bin/xlint/lint1/msg_007.c:1.4
--- src/tests/usr.bin/xlint/lint1/msg_007.c:1.3 Sun Jan 31 11:12:07 2021
+++ src/tests/usr.bin/xlint/lint1/msg_007.c Sun Apr 24 19:21:01 2022
@@ -1,7 +1,10 @@
-/* $NetBSD: msg_007.c,v 1.3 2021/01/31 11:12:07 rillig Exp $ */
+/* $NetBSD: msg_007.c,v 1.4 2022/04/24 19:21:01 rillig Exp $ */
# 3 "msg_007.c"
// Test for message: only one storage class allowed [7]
-extern static void example(void); /* expect: 7 */
+/* expect+1: error: only one storage class allowed [7] */
+extern static void example(void);
+
+/* expect+1: error: old style declaration; add 'int' [1] */
extern extern_function(void);
Index: src/tests/usr.bin/xlint/lint1/msg_007.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_007.exp:1.3 src/tests/usr.bin/xlint/lint1/msg_007.exp:1.4
--- src/tests/usr.bin/xlint/lint1/msg_007.exp:1.3 Sun Mar 21 20:44:59 2021
+++ src/tests/usr.bin/xlint/lint1/msg_007.exp Sun Apr 24 19:21:01 2022
@@ -1 +1,2 @@
-msg_007.c(6): error: only one storage class allowed [7]
+msg_007.c(7): error: only one storage class allowed [7]
+msg_007.c(10): error: old style declaration; add 'int' [1]
Index: src/tests/usr.bin/xlint/lint1/msg_030.c
diff -u src/tests/usr.bin/xlint/lint1/msg_030.c:1.3 src/tests/usr.bin/xlint/lint1/msg_030.c:1.4
--- src/tests/usr.bin/xlint/lint1/msg_030.c:1.3 Tue Apr 5 23:09:19 2022
+++ src/tests/usr.bin/xlint/lint1/msg_030.c Sun Apr 24 19:21:01 2022
@@ -1,18 +1,21 @@
-/* $NetBSD: msg_030.c,v 1.3 2022/04/05 23:09:19 rillig Exp $ */
+/* $NetBSD: msg_030.c,v 1.4 2022/04/24 19:21:01 rillig Exp $ */
# 3 "msg_030.c"
/* Test for message: redeclaration of %s; ANSI C requires static [30] */
/* lint1-flags: -sw */
+/* expect+1: error: old style declaration; add 'int' [1] */
static a;
/* expect+1: warning: redeclaration of a; ANSI C requires static [30] */
int a;
+/* expect+1: error: old style declaration; add 'int' [1] */
static b;
/* expect+1: warning: redeclaration of b; ANSI C requires static [30] */
int b = 1;
+/* expect+1: error: old style declaration; add 'int' [1] */
static c = 1;
/* expect+1: warning: redeclaration of c; ANSI C requires static [30] */
int c;
Index: src/tests/usr.bin/xlint/lint1/msg_030.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_030.exp:1.3 src/tests/usr.bin/xlint/lint1/msg_030.exp:1.4
--- src/tests/usr.bin/xlint/lint1/msg_030.exp:1.3 Tue Apr 5 23:09:19 2022
+++ src/tests/usr.bin/xlint/lint1/msg_030.exp Sun Apr 24 19:21:01 2022
@@ -1,3 +1,6 @@
-msg_030.c(10): warning: redeclaration of a; ANSI C requires static [30]
-msg_030.c(14): warning: redeclaration of b; ANSI C requires static [30]
-msg_030.c(18): warning: redeclaration of c; ANSI C requires static [30]
+msg_030.c(9): error: old style declaration; add 'int' [1]
+msg_030.c(11): warning: redeclaration of a; ANSI C requires static [30]
+msg_030.c(14): error: old style declaration; add 'int' [1]
+msg_030.c(16): warning: redeclaration of b; ANSI C requires static [30]
+msg_030.c(19): error: old style declaration; add 'int' [1]
+msg_030.c(21): warning: redeclaration of c; ANSI C requires static [30]
Index: src/tests/usr.bin/xlint/lint1/msg_072.c
diff -u src/tests/usr.bin/xlint/lint1/msg_072.c:1.5 src/tests/usr.bin/xlint/lint1/msg_072.c:1.6
--- src/tests/usr.bin/xlint/lint1/msg_072.c:1.5 Wed Jul 14 20:39:13 2021
+++ src/tests/usr.bin/xlint/lint1/msg_072.c Sun Apr 24 19:21:01 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: msg_072.c,v 1.5 2021/07/14 20:39:13 rillig Exp $ */
+/* $NetBSD: msg_072.c,v 1.6 2022/04/24 19:21:01 rillig Exp $ */
# 3 "msg_072.c"
// Test for message: typedef declares no type name [72]
@@ -26,4 +26,10 @@ cover_cgram_declaration(void)
/* expect+1: warning: empty declaration [2] */
int;
+
+ /* expect+1: error: syntax error 'missing base type for typedef' [249] */
+ typedef not_a_type;
+
+ /* expect+1: error: old style declaration; add 'int' [1] */
+ static missing_type;
}
Index: src/tests/usr.bin/xlint/lint1/msg_072.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_072.exp:1.4 src/tests/usr.bin/xlint/lint1/msg_072.exp:1.5
--- src/tests/usr.bin/xlint/lint1/msg_072.exp:1.4 Wed Jul 14 20:39:13 2021
+++ src/tests/usr.bin/xlint/lint1/msg_072.exp Sun Apr 24 19:21:01 2022
@@ -4,3 +4,5 @@ msg_072.c(19): warning: typedef declares
msg_072.c(22): warning: empty declaration [2]
msg_072.c(25): warning: typedef declares no type name [72]
msg_072.c(28): warning: empty declaration [2]
+msg_072.c(31): error: syntax error 'missing base type for typedef' [249]
+msg_072.c(34): error: old style declaration; add 'int' [1]
Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.400 src/usr.bin/xlint/lint1/cgram.y:1.401
--- src/usr.bin/xlint/lint1/cgram.y:1.400 Sun Apr 24 17:32:22 2022
+++ src/usr.bin/xlint/lint1/cgram.y Sun Apr 24 19:21:01 2022
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.400 2022/04/24 17:32:22 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.401 2022/04/24 19:21:01 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: cgram.y,v 1.400 2022/04/24 17:32:22 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.401 2022/04/24 19:21:01 rillig Exp $");
#endif
#include <limits.h>
@@ -745,8 +745,15 @@ declaration: /* C99 6.7 */
warning(2);
}
}
- | begin_type_declmods end_type notype_init_declarators T_SEMI
- /* ^^ There is no check for the missing type-specifier. */
+ | begin_type_declmods end_type notype_init_declarators T_SEMI {
+ if (dcs->d_scl == TYPEDEF) {
+ /* syntax error '%s' */
+ error(249, "missing base type for typedef");
+ } else {
+ /* old style declaration; add 'int' */
+ error(1);
+ }
+ }
| begin_type_declaration_specifiers end_type T_SEMI {
if (dcs->d_scl == TYPEDEF) {
/* typedef declares no type name */