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 */

Reply via email to