Module Name: src
Committed By: rillig
Date: Fri Jul 2 18:22:09 UTC 2021
Modified Files:
src/usr.bin/xlint/common: tyname.c
src/usr.bin/xlint/lint1: lint1.h
Log Message:
lint: document lint1_type.t_is_enum
Enum types are subject to implicit conversions, as opposed to struct,
union, pointer and function types.
To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/usr.bin/xlint/common/tyname.c
cvs rdiff -u -r1.108 -r1.109 src/usr.bin/xlint/lint1/lint1.h
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/tyname.c
diff -u src/usr.bin/xlint/common/tyname.c:1.42 src/usr.bin/xlint/common/tyname.c:1.43
--- src/usr.bin/xlint/common/tyname.c:1.42 Mon Jun 28 10:29:05 2021
+++ src/usr.bin/xlint/common/tyname.c Fri Jul 2 18:22:09 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: tyname.c,v 1.42 2021/06/28 10:29:05 rillig Exp $ */
+/* $NetBSD: tyname.c,v 1.43 2021/07/02 18:22:09 rillig Exp $ */
/*-
* Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: tyname.c,v 1.42 2021/06/28 10:29:05 rillig Exp $");
+__RCSID("$NetBSD: tyname.c,v 1.43 2021/07/02 18:22:09 rillig Exp $");
#endif
#include <limits.h>
@@ -351,10 +351,6 @@ type_name(const type_t *tp)
if (tp == NULL)
return "(null)";
- /*
- * XXX: Why is this necessary, and in which cases does this apply?
- * Shouldn't the type be an ENUM from the beginning?
- */
if ((t = tp->t_tspec) == INT && tp->t_is_enum)
t = ENUM;
Index: src/usr.bin/xlint/lint1/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.108 src/usr.bin/xlint/lint1/lint1.h:1.109
--- src/usr.bin/xlint/lint1/lint1.h:1.108 Mon Jun 28 08:52:55 2021
+++ src/usr.bin/xlint/lint1/lint1.h Fri Jul 2 18:22:09 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.108 2021/06/28 08:52:55 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.109 2021/07/02 18:22:09 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -165,7 +165,16 @@ struct lint1_type {
bool t_vararg : 1; /* prototype with '...' */
bool t_typedef : 1; /* type defined with typedef */
bool t_bitfield : 1;
- bool t_is_enum : 1; /* type is (or was) enum (t_enum valid) */
+ /*
+ * Either the type is currently an enum (having t_tspec ENUM), or
+ * it is an integer type (typically INT) that has been implicitly
+ * converted from an enum type. In both cases, t_enum is valid.
+ *
+ * The information about a former enum type is retained to allow
+ * type checks in expressions such as ((var1 & 0x0001) == var2), to
+ * detect when var1 and var2 are from incompatible enum types.
+ */
+ bool t_is_enum : 1;
bool t_packed : 1;
union {
int _t_dim; /* dimension (if ARRAY) */