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