Module Name:    src
Committed By:   rillig
Date:           Sun Jul  3 14:35:55 UTC 2022

Modified Files:
        src/tests/usr.bin/xlint/lint1: msg_132.c
        src/usr.bin/xlint/common: tyname.c
        src/usr.bin/xlint/lint1: decl.c

Log Message:
lint: include the width of bit-fields in the type name


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/tests/usr.bin/xlint/lint1/msg_132.c
cvs rdiff -u -r1.52 -r1.53 src/usr.bin/xlint/common/tyname.c
cvs rdiff -u -r1.293 -r1.294 src/usr.bin/xlint/lint1/decl.c

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/msg_132.c
diff -u src/tests/usr.bin/xlint/lint1/msg_132.c:1.20 src/tests/usr.bin/xlint/lint1/msg_132.c:1.21
--- src/tests/usr.bin/xlint/lint1/msg_132.c:1.20	Sat Jul  2 09:48:18 2022
+++ src/tests/usr.bin/xlint/lint1/msg_132.c	Sun Jul  3 14:35:54 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_132.c,v 1.20 2022/07/02 09:48:18 rillig Exp $	*/
+/*	$NetBSD: msg_132.c,v 1.21 2022/07/03 14:35:54 rillig Exp $	*/
 # 3 "msg_132.c"
 
 // Test for message: conversion from '%s' to '%s' may lose accuracy [132]
@@ -233,13 +233,13 @@ struct bit_fields {
 unsigned char
 test_bit_fields(struct bit_fields s, unsigned long long m)
 {
-	/* expect+1: warning: conversion from 'unsigned long long' to 'unsigned int' may lose accuracy [132] */
+	/* expect+1: warning: conversion from 'unsigned long long:32' to 'unsigned int:3' may lose accuracy [132] */
 	s.bits_3 = s.bits_32 & m;
 
 	s.bits_5 = s.bits_3 & m;
 	s.bits_32 = s.bits_5 & m;
 
-	/* expect+1: warning: conversion from 'unsigned long long' to 'unsigned char' may lose accuracy [132] */
+	/* expect+1: warning: conversion from 'unsigned long long:32' to 'unsigned char' may lose accuracy [132] */
 	return s.bits_32 & m;
 }
 

Index: src/usr.bin/xlint/common/tyname.c
diff -u src/usr.bin/xlint/common/tyname.c:1.52 src/usr.bin/xlint/common/tyname.c:1.53
--- src/usr.bin/xlint/common/tyname.c:1.52	Tue Jun 21 22:10:30 2022
+++ src/usr.bin/xlint/common/tyname.c	Sun Jul  3 14:35:54 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: tyname.c,v 1.52 2022/06/21 22:10:30 rillig Exp $	*/
+/*	$NetBSD: tyname.c,v 1.53 2022/07/03 14:35:54 rillig Exp $	*/
 
 /*-
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: tyname.c,v 1.52 2022/06/21 22:10:30 rillig Exp $");
+__RCSID("$NetBSD: tyname.c,v 1.53 2022/07/03 14:35:54 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -269,6 +269,13 @@ type_name(const type_t *tp)
 #endif
 	buf_add(&buf, tspec_name(t));
 
+#ifdef IS_LINT1
+	if (tp->t_bitfield) {
+		buf_add(&buf, ":");
+		buf_add_int(&buf, (int)tp->t_flen);
+	}
+#endif
+
 	switch (t) {
 	case PTR:
 		buf_add(&buf, " to ");

Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.293 src/usr.bin/xlint/lint1/decl.c:1.294
--- src/usr.bin/xlint/lint1/decl.c:1.293	Wed Jun 22 19:23:17 2022
+++ src/usr.bin/xlint/lint1/decl.c	Sun Jul  3 14:35:54 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.293 2022/06/22 19:23:17 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.294 2022/07/03 14:35:54 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.293 2022/06/22 19:23:17 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.294 2022/07/03 14:35:54 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -1052,11 +1052,15 @@ check_bit_field_type(sym_t *dsym, type_t
 		if (!bitfieldtype_ok) {
 			/* TODO: Make this an error in C99 mode as well. */
 			if (!allow_trad && !allow_c99) {
+				type_t *btp = block_dup_type(tp);
+				btp->t_bitfield = false;
 				/* bit-field type '%s' invalid in ANSI C */
-				warning(273, type_name(tp));
+				warning(273, type_name(btp));
 			} else if (pflag) {
+				type_t *btp = block_dup_type(tp);
+				btp->t_bitfield = false;
 				/* nonportable bit-field type '%s' */
-				warning(34, type_name(tp));
+				warning(34, type_name(btp));
 			}
 		}
 	} else if (t == INT && dcs->d_sign_mod == NOTSPEC) {
@@ -1067,8 +1071,10 @@ check_bit_field_type(sym_t *dsym, type_t
 	} else if (!(t == INT || t == UINT || t == BOOL ||
 		     (is_integer(t) && (bitfieldtype_ok || allow_gcc)))) {
 
+		type_t *btp = block_dup_type(tp);
+		btp->t_bitfield = false;
 		/* illegal bit-field type '%s' */
-		warning(35, type_name(tp));
+		warning(35, type_name(btp));
 
 		unsigned int sz = tp->t_flen;
 		dsym->s_type = tp = block_dup_type(gettyp(t = INT));

Reply via email to