Module Name:    src
Committed By:   rillig
Date:           Sat Aug 28 12:59:26 UTC 2021

Modified Files:
        src/usr.bin/xlint/common: lint.h
        src/usr.bin/xlint/lint1: decl.c externs1.h mem1.c tree.c
        src/usr.bin/xlint/lint2: mem2.c

Log Message:
lint: use 'unsigned int' for bit-size of types

Lint does not need to support any types larger than 256 MB since they
don't occur in practice.  Practically, such large types have never been
supported at all since the function type_size_in_bits used int for the
internal calculations, resulting in overflows.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/usr.bin/xlint/common/lint.h
cvs rdiff -u -r1.225 -r1.226 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.133 -r1.134 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.49 -r1.50 src/usr.bin/xlint/lint1/mem1.c
cvs rdiff -u -r1.354 -r1.355 src/usr.bin/xlint/lint1/tree.c
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/xlint/lint2/mem2.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/xlint/common/lint.h
diff -u src/usr.bin/xlint/common/lint.h:1.29 src/usr.bin/xlint/common/lint.h:1.30
--- src/usr.bin/xlint/common/lint.h:1.29	Sun Aug 22 15:06:49 2021
+++ src/usr.bin/xlint/common/lint.h	Sat Aug 28 12:59:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lint.h,v 1.29 2021/08/22 15:06:49 rillig Exp $	*/
+/*	$NetBSD: lint.h,v 1.30 2021/08/28 12:59:25 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -92,9 +92,9 @@ typedef enum {
  * size of types, name and classification
  */
 typedef	struct {
-	size_t	tt_size_in_bits;
-	size_t	tt_portable_size_in_bits; /* different from tt_size_in_bits
-					 * if pflag is set */
+	unsigned int tt_size_in_bits;
+	unsigned int tt_portable_size_in_bits; /* different from
+					 * tt_size_in_bits if pflag is set */
 	tspec_t	tt_signed_counterpart;
 	tspec_t	tt_unsigned_counterpart;
 	bool	tt_is_integer : 1;	/* integer type */

Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.225 src/usr.bin/xlint/lint1/decl.c:1.226
--- src/usr.bin/xlint/lint1/decl.c:1.225	Sat Aug 28 12:41:03 2021
+++ src/usr.bin/xlint/lint1/decl.c	Sat Aug 28 12:59:25 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.225 2021/08/28 12:41:03 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.226 2021/08/28 12:59:25 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: decl.c,v 1.225 2021/08/28 12:41:03 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.226 2021/08/28 12:59:25 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -581,7 +581,7 @@ setpackedsize(type_t *tp)
 				if (mem == NULL)
 					break;
 			}
-			size_t x = (size_t)type_size_in_bits(mem->s_type);
+			unsigned int x = type_size_in_bits(mem->s_type);
 			if (tp->t_tspec == STRUCT)
 				sp->sou_size_in_bits += x;
 			else if (x > sp->sou_size_in_bits)
@@ -1227,7 +1227,7 @@ declarator_1_struct_union(sym_t *dsym)
 	if (dsym->s_bitfield) {
 		align(alignment_in_bits(tp), tp->t_flen);
 		dsym->s_value.v_quad =
-		    (dcs->d_offset / size_in_bits(t)) * size_in_bits(t);
+		    dcs->d_offset - dcs->d_offset % size_in_bits(t);
 		tp->t_foffs = dcs->d_offset - (int)dsym->s_value.v_quad;
 		dcs->d_offset += tp->t_flen;
 	} else {
@@ -1852,7 +1852,7 @@ complete_tag_struct_or_union(type_t *tp,
 					break;
 			}
 			sp->sou_size_in_bits +=
-			    (u_int)type_size_in_bits(mem->s_type);
+			    type_size_in_bits(mem->s_type);
 		}
 		if (mem->s_name != unnamed)
 			n++;

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.133 src/usr.bin/xlint/lint1/externs1.h:1.134
--- src/usr.bin/xlint/lint1/externs1.h:1.133	Sat Aug 28 12:41:03 2021
+++ src/usr.bin/xlint/lint1/externs1.h	Sat Aug 28 12:59:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.133 2021/08/28 12:41:03 rillig Exp $	*/
+/*	$NetBSD: externs1.h,v 1.134 2021/08/28 12:59:25 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -262,7 +262,7 @@ extern	void	check_expr_misc(const tnode_
 		    bool, bool, bool);
 extern	bool	constant_addr(const tnode_t *, const sym_t **, ptrdiff_t *);
 extern	strg_t	*cat_strings(strg_t *, strg_t *);
-extern  int64_t type_size_in_bits(const type_t *);
+extern  unsigned int type_size_in_bits(const type_t *);
 
 /*
  * func.c

Index: src/usr.bin/xlint/lint1/mem1.c
diff -u src/usr.bin/xlint/lint1/mem1.c:1.49 src/usr.bin/xlint/lint1/mem1.c:1.50
--- src/usr.bin/xlint/lint1/mem1.c:1.49	Tue Aug 10 17:57:16 2021
+++ src/usr.bin/xlint/lint1/mem1.c	Sat Aug 28 12:59:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mem1.c,v 1.49 2021/08/10 17:57:16 rillig Exp $	*/
+/*	$NetBSD: mem1.c,v 1.50 2021/08/28 12:59:25 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: mem1.c,v 1.49 2021/08/10 17:57:16 rillig Exp $");
+__RCSID("$NetBSD: mem1.c,v 1.50 2021/08/28 12:59:25 rillig Exp $");
 #endif
 
 #include <sys/types.h>
@@ -285,11 +285,8 @@ xfreeblk(memory_block **fmbp)
 void
 initmem(void)
 {
-	int	pgsz;
-
-	pgsz = getpagesize();
-	mblklen = ((MBLKSIZ + pgsz - 1) / pgsz) * pgsz;
 
+	mblklen = MBLKSIZ - MBLKSIZ % (unsigned int)getpagesize();
 	mblks = xcalloc(nmblks = ML_INC, sizeof(*mblks));
 }
 

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.354 src/usr.bin/xlint/lint1/tree.c:1.355
--- src/usr.bin/xlint/lint1/tree.c:1.354	Sat Aug 28 12:29:40 2021
+++ src/usr.bin/xlint/lint1/tree.c	Sat Aug 28 12:59:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.354 2021/08/28 12:29:40 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.355 2021/08/28 12:59:25 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: tree.c,v 1.354 2021/08/28 12:29:40 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.355 2021/08/28 12:59:25 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -3296,7 +3296,7 @@ fold_float(tnode_t *tn)
 tnode_t *
 build_sizeof(const type_t *tp)
 {
-	int64_t size_in_bytes = type_size_in_bits(tp) / CHAR_SIZE;
+	unsigned int size_in_bytes = type_size_in_bits(tp) / CHAR_SIZE;
 	tnode_t *tn = build_integer_constant(SIZEOF_TSPEC, size_in_bytes);
 	tn->tn_system_dependent = true;
 	return tn;
@@ -3314,16 +3314,16 @@ build_offsetof(const type_t *tp, const s
 		error(111, "offsetof");
 
 	// XXX: wrong size, no checking for sym fixme
-	int64_t offset_in_bytes = type_size_in_bits(tp) / CHAR_SIZE;
+	unsigned int offset_in_bytes = type_size_in_bits(tp) / CHAR_SIZE;
 	tnode_t *tn = build_integer_constant(SIZEOF_TSPEC, offset_in_bytes);
 	tn->tn_system_dependent = true;
 	return tn;
 }
 
-int64_t
+unsigned int
 type_size_in_bits(const type_t *tp)
 {
-	int	elem, elsz;
+	unsigned int elem, elsz;
 	bool	flex;
 
 	elem = 1;
@@ -3378,7 +3378,7 @@ type_size_in_bits(const type_t *tp)
 		break;
 	}
 
-	return (int64_t)elem * elsz;
+	return elem * elsz;
 }
 
 tnode_t *

Index: src/usr.bin/xlint/lint2/mem2.c
diff -u src/usr.bin/xlint/lint2/mem2.c:1.12 src/usr.bin/xlint/lint2/mem2.c:1.13
--- src/usr.bin/xlint/lint2/mem2.c:1.12	Sun Aug  1 17:59:47 2021
+++ src/usr.bin/xlint/lint2/mem2.c	Sat Aug 28 12:59:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mem2.c,v 1.12 2021/08/01 17:59:47 rillig Exp $	*/
+/*	$NetBSD: mem2.c,v 1.13 2021/08/28 12:59:25 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: mem2.c,v 1.12 2021/08/01 17:59:47 rillig Exp $");
+__RCSID("$NetBSD: mem2.c,v 1.13 2021/08/28 12:59:25 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -59,11 +59,8 @@ static void	*mbuf;
 void
 initmem(void)
 {
-	int	pgsz;
-
-	pgsz = getpagesize();
-	mblklen = ((MBLKSIZ + pgsz - 1) / pgsz) * pgsz;
 
+	mblklen = MBLKSIZ - MBLKSIZ % (unsigned int)getpagesize();
 	nxtfree = mblklen;
 }
 

Reply via email to