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));