Module Name: src
Committed By: rillig
Date: Sat Mar 9 13:20:55 UTC 2024
Modified Files:
src/usr.bin/xlint/common: tyname.c
src/usr.bin/xlint/lint1: debug.c decl.c emit1.c func.c init.c lint1.h
tree.c
Log Message:
lint: inline accessor macros for type_t
To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 src/usr.bin/xlint/common/tyname.c
cvs rdiff -u -r1.71 -r1.72 src/usr.bin/xlint/lint1/debug.c
cvs rdiff -u -r1.395 -r1.396 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.90 -r1.91 src/usr.bin/xlint/lint1/emit1.c
cvs rdiff -u -r1.182 -r1.183 src/usr.bin/xlint/lint1/func.c
cvs rdiff -u -r1.261 -r1.262 src/usr.bin/xlint/lint1/init.c
cvs rdiff -u -r1.219 -r1.220 src/usr.bin/xlint/lint1/lint1.h
cvs rdiff -u -r1.610 -r1.611 src/usr.bin/xlint/lint1/tree.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/tyname.c
diff -u src/usr.bin/xlint/common/tyname.c:1.61 src/usr.bin/xlint/common/tyname.c:1.62
--- src/usr.bin/xlint/common/tyname.c:1.61 Fri Feb 2 16:25:58 2024
+++ src/usr.bin/xlint/common/tyname.c Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tyname.c,v 1.61 2024/02/02 16:25:58 rillig Exp $ */
+/* $NetBSD: tyname.c,v 1.62 2024/03/09 13:20:55 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.61 2024/02/02 16:25:58 rillig Exp $");
+__RCSID("$NetBSD: tyname.c,v 1.62 2024/03/09 13:20:55 rillig Exp $");
#endif
#include <assert.h>
@@ -165,7 +165,7 @@ type_name_of_function(buffer *buf, const
buf_add(buf, "(");
if (tp->t_proto) {
#if IS_LINT1
- const sym_t *param = tp->t_params;
+ const sym_t *param = tp->u.params;
if (param == NULL)
buf_add(buf, "void");
for (; param != NULL; param = param->s_next) {
@@ -197,12 +197,12 @@ type_name_of_struct_or_union(buffer *buf
{
buf_add(buf, " ");
#if IS_LINT1
- if (tp->t_sou->sou_tag->s_name == unnamed &&
- tp->t_sou->sou_first_typedef != NULL) {
+ if (tp->u.sou->sou_tag->s_name == unnamed &&
+ tp->u.sou->sou_first_typedef != NULL) {
buf_add(buf, "typedef ");
- buf_add(buf, tp->t_sou->sou_first_typedef->s_name);
+ buf_add(buf, tp->u.sou->sou_first_typedef->s_name);
} else {
- buf_add(buf, tp->t_sou->sou_tag->s_name);
+ buf_add(buf, tp->u.sou->sou_tag->s_name);
}
#else
buf_add(buf, tp->t_isuniqpos ? "*anonymous*" : tp->t_tag->h_name);
@@ -214,12 +214,12 @@ type_name_of_enum(buffer *buf, const typ
{
buf_add(buf, " ");
#if IS_LINT1
- if (tp->t_enum->en_tag->s_name == unnamed &&
- tp->t_enum->en_first_typedef != NULL) {
+ if (tp->u.enumer->en_tag->s_name == unnamed &&
+ tp->u.enumer->en_first_typedef != NULL) {
buf_add(buf, "typedef ");
- buf_add(buf, tp->t_enum->en_first_typedef->s_name);
+ buf_add(buf, tp->u.enumer->en_first_typedef->s_name);
} else {
- buf_add(buf, tp->t_enum->en_tag->s_name);
+ buf_add(buf, tp->u.enumer->en_tag->s_name);
}
#else
buf_add(buf, tp->t_isuniqpos ? "*anonymous*" : tp->t_tag->h_name);
@@ -234,7 +234,7 @@ type_name_of_array(buffer *buf, const ty
if (tp->t_incomplete_array)
buf_add(buf, "unknown_size");
else
- buf_add_int(buf, tp->t_dim);
+ buf_add_int(buf, tp->u.dimension);
#else
buf_add_int(buf, tp->t_dim);
#endif
@@ -263,7 +263,7 @@ type_name(const type_t *tp)
buf_add(&buf, "volatile ");
#if IS_LINT1
- if (is_struct_or_union(t) && tp->t_sou->sou_incomplete)
+ if (is_struct_or_union(t) && tp->u.sou->sou_incomplete)
buf_add(&buf, "incomplete ");
#endif
buf_add(&buf, tspec_name(t));
Index: src/usr.bin/xlint/lint1/debug.c
diff -u src/usr.bin/xlint/lint1/debug.c:1.71 src/usr.bin/xlint/lint1/debug.c:1.72
--- src/usr.bin/xlint/lint1/debug.c:1.71 Mon Feb 5 23:11:22 2024
+++ src/usr.bin/xlint/lint1/debug.c Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: debug.c,v 1.71 2024/02/05 23:11:22 rillig Exp $ */
+/* $NetBSD: debug.c,v 1.72 2024/03/09 13:20:55 rillig Exp $ */
/*-
* Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: debug.c,v 1.71 2024/02/05 23:11:22 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.72 2024/03/09 13:20:55 rillig Exp $");
#endif
#include <stdlib.h>
@@ -156,10 +156,10 @@ debug_type_details(const type_t *tp)
if (is_struct_or_union(tp->t_tspec)) {
debug_indent_inc();
debug_step("size %u bits, align %u bits, %s",
- tp->t_sou->sou_size_in_bits, tp->t_sou->sou_align_in_bits,
- tp->t_sou->sou_incomplete ? "incomplete" : "complete");
+ tp->u.sou->sou_size_in_bits, tp->u.sou->sou_align_in_bits,
+ tp->u.sou->sou_incomplete ? "incomplete" : "complete");
- for (const sym_t *mem = tp->t_sou->sou_first_member;
+ for (const sym_t *mem = tp->u.sou->sou_first_member;
mem != NULL; mem = mem->s_next) {
debug_sym("", mem, "\n");
debug_type_details(mem->s_type);
@@ -168,7 +168,7 @@ debug_type_details(const type_t *tp)
}
if (tp->t_is_enum) {
debug_indent_inc();
- for (const sym_t *en = tp->t_enum->en_first_enumerator;
+ for (const sym_t *en = tp->u.enumer->en_first_enumerator;
en != NULL; en = en->s_next) {
debug_sym("", en, "\n");
}
Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.395 src/usr.bin/xlint/lint1/decl.c:1.396
--- src/usr.bin/xlint/lint1/decl.c:1.395 Sat Mar 9 10:41:11 2024
+++ src/usr.bin/xlint/lint1/decl.c Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.395 2024/03/09 10:41:11 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.396 2024/03/09 13:20:55 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.395 2024/03/09 10:41:11 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.396 2024/03/09 13:20:55 rillig Exp $");
#endif
#include <sys/param.h>
@@ -146,8 +146,8 @@ expr_unqualified_type(const type_t *tp)
* In case of a struct or union type, the members should lose their
* qualifiers as well, but that would require a deep copy of the struct
* or union type. This in turn would defeat the type comparison in
- * types_compatible, which simply tests whether tp1->t_sou ==
- * tp2->t_sou.
+ * types_compatible, which simply tests whether tp1->u.sou ==
+ * tp2->u.sou.
*/
debug_step("%s '%s'", __func__, type_name(ntp));
@@ -168,9 +168,9 @@ is_incomplete(const type_t *tp)
if (t == ARRAY)
return tp->t_incomplete_array;
if (is_struct_or_union(t))
- return tp->t_sou->sou_incomplete;
+ return tp->u.sou->sou_incomplete;
if (t == ENUM)
- return tp->t_enum->en_incomplete;
+ return tp->u.enumer->en_incomplete;
return false;
}
@@ -406,10 +406,10 @@ set_first_typedef(type_t *tp, sym_t *sym
{
tspec_t t = tp->t_tspec;
- if (is_struct_or_union(t) && tp->t_sou->sou_first_typedef == NULL)
- tp->t_sou->sou_first_typedef = sym;
- if (t == ENUM && tp->t_enum->en_first_typedef == NULL)
- tp->t_enum->en_first_typedef = sym;
+ if (is_struct_or_union(t) && tp->u.sou->sou_first_typedef == NULL)
+ tp->u.sou->sou_first_typedef = sym;
+ if (t == ENUM && tp->u.enumer->en_first_typedef == NULL)
+ tp->u.enumer->en_first_typedef = sym;
}
static unsigned int
@@ -441,7 +441,7 @@ pack_struct_or_union(type_t *tp)
unsigned int bits = 0;
bool named = false;
- for (const sym_t *mem = tp->t_sou->sou_first_member;
+ for (const sym_t *mem = tp->u.sou->sou_first_member;
mem != NULL; mem = mem->s_next) {
// TODO: Maybe update mem->u.s_member.sm_offset_in_bits.
if (mem->s_type->t_bitfield) {
@@ -455,7 +455,7 @@ pack_struct_or_union(type_t *tp)
else if (mem_bits > bits)
bits = mem_bits;
}
- tp->t_sou->sou_size_in_bits = bits;
+ tp->u.sou->sou_size_in_bits = bits;
debug_dcs();
}
@@ -748,7 +748,7 @@ length_in_bits(const type_t *tp, const c
unsigned int elem = 1;
while (tp->t_tspec == ARRAY) {
- elem *= tp->t_dim;
+ elem *= tp->u.dimension;
tp = tp->t_subt;
}
@@ -756,7 +756,7 @@ length_in_bits(const type_t *tp, const c
if (is_incomplete(tp) && name != NULL)
/* '%s' has incomplete type '%s' */
error(31, name, type_name(tp));
- return (int)(elem * tp->t_sou->sou_size_in_bits);
+ return (int)(elem * tp->u.sou->sou_size_in_bits);
}
if (tp->t_tspec == ENUM && is_incomplete(tp) && name != NULL)
@@ -790,7 +790,7 @@ alignment_in_bits(const type_t *tp)
tspec_t t = tp->t_tspec;
unsigned int a;
if (is_struct_or_union(t))
- a = tp->t_sou->sou_align_in_bits;
+ a = tp->u.sou->sou_align_in_bits;
else {
lint_assert(t != FUNC);
if ((a = size_in_bits(t)) == 0)
@@ -870,7 +870,7 @@ check_type(sym_t *sym)
*tpp = gettyp(INT);
return;
}
- if (t == ARRAY && tp->t_dim == 0) {
+ if (t == ARRAY && tp->u.dimension == 0) {
/* null dimension */
error(17);
return;
@@ -1050,7 +1050,7 @@ declare_unnamed_member(void)
mem->s_scl = dcs->d_kind == DLK_STRUCT ? STRUCT_MEMBER : UNION_MEMBER;
mem->s_block_level = -1;
mem->s_type = dcs->d_type;
- mem->u.s_member.sm_containing_type = dcs->d_tag_type->t_sou;
+ mem->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
dcs_add_member(mem);
suppress_bitfieldtype = false;
@@ -1094,7 +1094,7 @@ declare_member(sym_t *dsym)
* type the bit-field is packed in (it's ok)
*/
int sz = length_in_bits(dsym->s_type, dsym->s_name);
- if (sz == 0 && t == ARRAY && dsym->s_type->t_dim == 0)
+ if (sz == 0 && t == ARRAY && dsym->s_type->u.dimension == 0)
/* zero-sized array '%s' in struct requires C99 or later */
c99ism(39, dsym->s_name);
@@ -1118,8 +1118,8 @@ set_bit_field_width(sym_t *dsym, int bit
dsym->s_scl = STRUCT_MEMBER;
dsym->s_type = gettyp(UINT);
dsym->s_block_level = -1;
- lint_assert(dcs->d_tag_type->t_sou != NULL);
- dsym->u.s_member.sm_containing_type = dcs->d_tag_type->t_sou;
+ lint_assert(dcs->d_tag_type->u.sou != NULL);
+ dsym->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
}
dsym->s_type = block_dup_type(dsym->s_type);
dsym->s_type->t_bitfield = true;
@@ -1209,7 +1209,7 @@ block_derive_array(type_t *stp, bool dim
{
type_t *tp = block_derive_type(stp, ARRAY);
- tp->t_dim = len;
+ tp->u.dimension = len;
#if 0
/*
@@ -1272,7 +1272,7 @@ block_derive_function(type_t *ret, bool
type_t *tp = block_derive_type(ret, FUNC);
tp->t_proto = proto;
if (proto)
- tp->t_params = params;
+ tp->u.params = params;
tp->t_vararg = vararg;
debug_step("%s: '%s'", __func__, type_name(tp));
return tp;
@@ -1431,7 +1431,7 @@ declarator_name(sym_t *sym)
switch (dcs->d_kind) {
case DLK_STRUCT:
case DLK_UNION:
- sym->u.s_member.sm_containing_type = dcs->d_tag_type->t_sou;
+ sym->u.s_member.sm_containing_type = dcs->d_tag_type->u.sou;
sym->s_def = DEF;
sc = dcs->d_kind == DLK_STRUCT ? STRUCT_MEMBER : UNION_MEMBER;
break;
@@ -1638,17 +1638,17 @@ make_tag_type(sym_t *tag, tspec_t kind,
if (tp->t_tspec == NO_TSPEC) {
tp->t_tspec = kind;
if (kind != ENUM) {
- tp->t_sou = block_zero_alloc(sizeof(*tp->t_sou),
+ tp->u.sou = block_zero_alloc(sizeof(*tp->u.sou),
"struct_or_union");
- tp->t_sou->sou_align_in_bits = CHAR_SIZE;
- tp->t_sou->sou_tag = tag;
- tp->t_sou->sou_incomplete = true;
+ tp->u.sou->sou_align_in_bits = CHAR_SIZE;
+ tp->u.sou->sou_tag = tag;
+ tp->u.sou->sou_incomplete = true;
} else {
tp->t_is_enum = true;
- tp->t_enum = block_zero_alloc(sizeof(*tp->t_enum),
- "enumeration");
- tp->t_enum->en_tag = tag;
- tp->t_enum->en_incomplete = true;
+ tp->u.enumer = block_zero_alloc(
+ sizeof(*tp->u.enumer), "enumeration");
+ tp->u.enumer->en_tag = tag;
+ tp->u.enumer->en_incomplete = true;
}
}
debug_printf("%s: '%s'", __func__, type_name(tp));
@@ -1659,7 +1659,7 @@ make_tag_type(sym_t *tag, tspec_t kind,
static bool
has_named_member(const type_t *tp)
{
- for (const sym_t *mem = tp->t_sou->sou_first_member;
+ for (const sym_t *mem = tp->u.sou->sou_first_member;
mem != NULL; mem = mem->s_next) {
if (mem->s_name != unnamed)
return true;
@@ -1680,7 +1680,7 @@ complete_struct_or_union(sym_t *first_me
dcs_align(dcs->d_sou_align_in_bits, 0);
- struct_or_union *sou = tp->t_sou;
+ struct_or_union *sou = tp->u.sou;
sou->sou_align_in_bits = dcs->d_sou_align_in_bits;
sou->sou_incomplete = false;
sou->sou_first_member = first_member;
@@ -1704,8 +1704,8 @@ complete_enum(sym_t *first_enumerator)
{
type_t *tp = dcs->d_tag_type;
- tp->t_enum->en_incomplete = false;
- tp->t_enum->en_first_enumerator = first_enumerator;
+ tp->u.enumer->en_incomplete = false;
+ tp->u.enumer->en_first_enumerator = first_enumerator;
debug_step("%s: '%s'", __func__, type_name(tp));
return tp;
}
@@ -1832,7 +1832,7 @@ check_old_style_definition(const sym_t *
{
const sym_t *old_params = rdsym->u.s_old_style_params;
- const sym_t *proto_params = dsym->s_type->t_params;
+ const sym_t *proto_params = dsym->s_type->u.params;
bool msg = false;
@@ -2137,8 +2137,8 @@ prototypes_compatible(const type_t *tp1,
if (tp1->t_vararg != tp2->t_vararg)
return false;
- const sym_t *p1 = tp1->t_params;
- const sym_t *p2 = tp2->t_params;
+ const sym_t *p1 = tp1->u.params;
+ const sym_t *p2 = tp2->u.params;
for (; p1 != NULL && p2 != NULL; p1 = p1->s_next, p2 = p2->s_next) {
if (!types_compatible(p1->s_type, p2->s_type,
@@ -2164,7 +2164,7 @@ matches_no_arg_function(const type_t *tp
if (tp->t_vararg && dowarn != NULL)
*dowarn = true;
- for (const sym_t *p = tp->t_params; p != NULL; p = p->s_next) {
+ for (const sym_t *p = tp->u.params; p != NULL; p = p->s_next) {
tspec_t t = p->s_type->t_tspec;
if (t == FLOAT ||
t == CHAR || t == SCHAR || t == UCHAR ||
@@ -2214,13 +2214,13 @@ types_compatible(const type_t *tp1, cons
return false;
if (is_struct_or_union(t))
- return tp1->t_sou == tp2->t_sou;
+ return tp1->u.sou == tp2->u.sou;
if (t == ENUM && eflag)
- return tp1->t_enum == tp2->t_enum;
+ return tp1->u.enumer == tp2->u.enumer;
- if (t == ARRAY && tp1->t_dim != tp2->t_dim) {
- if (tp1->t_dim != 0 && tp2->t_dim != 0)
+ if (t == ARRAY && tp1->u.dimension != tp2->u.dimension) {
+ if (tp1->u.dimension != 0 && tp2->u.dimension != 0)
return false;
}
@@ -2267,16 +2267,16 @@ complete_type(sym_t *dsym, sym_t *ssym)
lint_assert(src != NULL);
lint_assert(dst->t_tspec == src->t_tspec);
if (dst->t_tspec == ARRAY) {
- if (dst->t_dim == 0 && src->t_dim != 0) {
+ if (dst->u.dimension == 0 && src->u.dimension != 0) {
*dstp = dst = block_dup_type(dst);
- dst->t_dim = src->t_dim;
+ dst->u.dimension = src->u.dimension;
dst->t_incomplete_array = false;
}
} else if (dst->t_tspec == FUNC) {
if (!dst->t_proto && src->t_proto) {
*dstp = dst = block_dup_type(dst);
dst->t_proto = true;
- dst->t_params = src->t_params;
+ dst->u.params = src->u.params;
}
}
dstp = &dst->t_subt;
@@ -2472,7 +2472,7 @@ void
check_func_old_style_parameters(void)
{
sym_t *old_params = funcsym->u.s_old_style_params;
- sym_t *proto_params = funcsym->s_type->t_params;
+ sym_t *proto_params = funcsym->s_type->u.params;
for (sym_t *arg = old_params; arg != NULL; arg = arg->s_next) {
if (arg->s_defparam) {
@@ -2795,7 +2795,7 @@ check_size(const sym_t *dsym)
dsym->s_type->t_tspec != FUNC &&
length_in_bits(dsym->s_type, dsym->s_name) == 0 &&
dsym->s_type->t_tspec == ARRAY &&
- dsym->s_type->t_dim == 0) {
+ dsym->s_type->u.dimension == 0) {
if (!allow_c90)
/* empty array declaration for '%s' */
warning(190, dsym->s_name);
@@ -3017,7 +3017,7 @@ check_global_variable_size(const sym_t *
curr_pos = cpos;
if (len_in_bits == 0 &&
- sym->s_type->t_tspec == ARRAY && sym->s_type->t_dim == 0) {
+ sym->s_type->t_tspec == ARRAY && sym->s_type->u.dimension == 0) {
/* TODO: C99 6.7.5.2p1 defines this as an error as well. */
if (!allow_c90 ||
(sym->s_scl == EXTERN && (allow_trad || allow_c99))) {
Index: src/usr.bin/xlint/lint1/emit1.c
diff -u src/usr.bin/xlint/lint1/emit1.c:1.90 src/usr.bin/xlint/lint1/emit1.c:1.91
--- src/usr.bin/xlint/lint1/emit1.c:1.90 Sun Mar 3 16:09:01 2024
+++ src/usr.bin/xlint/lint1/emit1.c Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: emit1.c,v 1.90 2024/03/03 16:09:01 rillig Exp $ */
+/* $NetBSD: emit1.c,v 1.91 2024/03/09 13:20:55 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: emit1.c,v 1.90 2024/03/03 16:09:01 rillig Exp $");
+__RCSID("$NetBSD: emit1.c,v 1.91 2024/03/09 13:20:55 rillig Exp $");
#endif
#include <stdlib.h>
@@ -113,20 +113,22 @@ outtype(const type_t *tp)
outchar(tt[ts]);
if (ts == ARRAY) {
- outint(tp->t_dim);
+ outint(tp->u.dimension);
} else if (ts == ENUM) {
- outtt(tp->t_enum->en_tag, tp->t_enum->en_first_typedef);
+ outtt(tp->u.enumer->en_tag,
+ tp->u.enumer->en_first_typedef);
} else if (is_struct_or_union(ts)) {
- outtt(tp->t_sou->sou_tag, tp->t_sou->sou_first_typedef);
+ outtt(tp->u.sou->sou_tag,
+ tp->u.sou->sou_first_typedef);
} else if (ts == FUNC && tp->t_proto) {
na = 0;
- for (const sym_t *param = tp->t_params;
+ for (const sym_t *param = tp->u.params;
param != NULL; param = param->s_next)
na++;
if (tp->t_vararg)
na++;
outint(na);
- for (const sym_t *param = tp->t_params;
+ for (const sym_t *param = tp->u.params;
param != NULL; param = param->s_next)
outtype(param->s_type);
if (tp->t_vararg)
Index: src/usr.bin/xlint/lint1/func.c
diff -u src/usr.bin/xlint/lint1/func.c:1.182 src/usr.bin/xlint/lint1/func.c:1.183
--- src/usr.bin/xlint/lint1/func.c:1.182 Sat Mar 9 10:54:12 2024
+++ src/usr.bin/xlint/lint1/func.c Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: func.c,v 1.182 2024/03/09 10:54:12 rillig Exp $ */
+/* $NetBSD: func.c,v 1.183 2024/03/09 13:20:55 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: func.c,v 1.182 2024/03/09 10:54:12 rillig Exp $");
+__RCSID("$NetBSD: func.c,v 1.183 2024/03/09 13:20:55 rillig Exp $");
#endif
#include <stdlib.h>
@@ -253,7 +253,7 @@ begin_function(sym_t *fsym)
* is already removed from the list of parameters.)
*/
int n = 1;
- for (const sym_t *param = fsym->s_type->t_params;
+ for (const sym_t *param = fsym->s_type->u.params;
param != NULL; param = param->s_next) {
if (param->s_scl == ABSTRACT) {
lint_assert(param->s_name == unnamed);
@@ -421,7 +421,7 @@ check_case_label_enum(const tnode_t *tn,
if (!(tn->tn_type->t_is_enum || cs->c_switch_type->t_is_enum))
return;
if (tn->tn_type->t_is_enum && cs->c_switch_type->t_is_enum &&
- tn->tn_type->t_enum == cs->c_switch_type->t_enum)
+ tn->tn_type->u.enumer == cs->c_switch_type->u.enumer)
return;
#if 0 /* not yet ready, see msg_130.c */
@@ -639,7 +639,7 @@ stmt_switch_expr(tnode_t *tn)
if (tn != NULL) {
tp->t_tspec = tn->tn_type->t_tspec;
if ((tp->t_is_enum = tn->tn_type->t_is_enum) != false)
- tp->t_enum = tn->tn_type->t_enum;
+ tp->u.enumer = tn->tn_type->u.enumer;
} else {
tp->t_tspec = INT;
}
@@ -673,8 +673,8 @@ stmt_switch_expr_stmt(void)
* number of enumerators.
*/
nenum = nclab = 0;
- lint_assert(cstmt->c_switch_type->t_enum != NULL);
- for (esym = cstmt->c_switch_type->t_enum->en_first_enumerator;
+ lint_assert(cstmt->c_switch_type->u.enumer != NULL);
+ for (esym = cstmt->c_switch_type->u.enumer->en_first_enumerator;
esym != NULL; esym = esym->s_next) {
nenum++;
}
Index: src/usr.bin/xlint/lint1/init.c
diff -u src/usr.bin/xlint/lint1/init.c:1.261 src/usr.bin/xlint/lint1/init.c:1.262
--- src/usr.bin/xlint/lint1/init.c:1.261 Sun Mar 3 16:09:01 2024
+++ src/usr.bin/xlint/lint1/init.c Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.261 2024/03/03 16:09:01 rillig Exp $ */
+/* $NetBSD: init.c,v 1.262 2024/03/09 13:20:55 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: init.c,v 1.261 2024/03/03 16:09:01 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.262 2024/03/09 13:20:55 rillig Exp $");
#endif
#include <stdlib.h>
@@ -195,7 +195,7 @@ first_named_member(const type_t *tp)
{
lint_assert(is_struct_or_union(tp->t_tspec));
- return skip_unnamed(tp->t_sou->sou_first_member);
+ return skip_unnamed(tp->u.sou->sou_first_member);
}
/*
@@ -207,7 +207,7 @@ update_type_of_array_of_unknown_size(sym
{
type_t *tp = block_dup_type(sym->s_type);
- tp->t_dim = (int)size;
+ tp->u.dimension = (int)size;
tp->t_incomplete_array = false;
sym->s_type = tp;
debug_step("completed array type is '%s'", type_name(sym->s_type));
@@ -327,7 +327,8 @@ designator_type(const designator *dr, co
"designator '.member' is only for struct/union");
}
if (!tp->t_incomplete_array)
- lint_assert(dr->dr_subscript < (size_t)tp->t_dim);
+ lint_assert(
+ dr->dr_subscript < (size_t)tp->u.dimension);
return tp->t_subt;
default:
if (dr->dr_kind != DK_SCALAR)
@@ -533,7 +534,7 @@ brace_level_advance(brace_level *bl, siz
dr->dr_subscript > *max_subscript)
*max_subscript = dr->dr_subscript;
if (!tp->t_incomplete_array &&
- dr->dr_subscript >= (size_t)tp->t_dim)
+ dr->dr_subscript >= (size_t)tp->u.dimension)
dr->dr_done = true;
break;
default:
@@ -555,7 +556,7 @@ warn_too_many_initializers(designator_ki
lint_assert(tp->t_tspec == ARRAY);
lint_assert(!tp->t_incomplete_array);
/* too many array initializers, expected %d */
- error(173, tp->t_dim);
+ error(173, tp->u.dimension);
} else
/* too many initializers */
error(174);
@@ -717,7 +718,7 @@ initialization_lbrace(initialization *in
/* initialization of union is illegal in traditional C */
warning(238);
- if (is_struct_or_union(tp->t_tspec) && tp->t_sou->sou_incomplete) {
+ if (is_struct_or_union(tp->t_tspec) && tp->u.sou->sou_incomplete) {
/* initialization of incomplete type '%s' */
error(175, type_name(tp));
in->in_err = true;
@@ -804,7 +805,7 @@ initialization_add_designator_member(ini
return;
proceed:;
- const sym_t *member = find_member(tp->t_sou, name);
+ const sym_t *member = find_member(tp->u.sou, name);
if (member == NULL) {
/* type '%s' does not have member '%s' */
error(101, type_name(tp), name);
@@ -833,9 +834,9 @@ initialization_add_designator_subscript(
return;
}
- if (!tp->t_incomplete_array && subscript >= (size_t)tp->t_dim) {
+ if (!tp->t_incomplete_array && subscript >= (size_t)tp->u.dimension) {
/* array subscript cannot be > %d: %ld */
- error(168, tp->t_dim - 1, (long)subscript);
+ error(168, tp->u.dimension - 1, (long)subscript);
subscript = 0; /* suppress further errors */
}
@@ -891,9 +892,10 @@ initialization_init_array_from_string(in
continue;
}
- if (!tp->t_incomplete_array && (size_t)tp->t_dim < len)
+ if (!tp->t_incomplete_array && (size_t)tp->u.dimension < len)
/* string literal too long (%lu) for target array (%lu) */
- warning(187, (unsigned long)len, (unsigned long)tp->t_dim);
+ warning(187, (unsigned long)len,
+ (unsigned long)tp->u.dimension);
brace_level *bl = in->in_brace_level;
if (bl != NULL && bl->bl_designation.dn_len == 0)
Index: src/usr.bin/xlint/lint1/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.219 src/usr.bin/xlint/lint1/lint1.h:1.220
--- src/usr.bin/xlint/lint1/lint1.h:1.219 Sat Mar 9 11:05:05 2024
+++ src/usr.bin/xlint/lint1/lint1.h Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.219 2024/03/09 11:05:05 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.220 2024/03/09 13:20:55 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -129,7 +129,7 @@ struct lint1_type {
bool t_incomplete_array:1;
bool t_const:1;
bool t_volatile:1;
- bool t_proto:1; /* function prototype (t_params valid) */
+ bool t_proto:1; /* function prototype (u.params valid) */
bool t_vararg:1; /* prototype with '...' */
bool t_typedef:1; /* type defined with typedef */
bool t_typeof:1; /* type defined with GCC's __typeof__ */
@@ -137,16 +137,16 @@ struct lint1_type {
/*
* 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.
+ * converted from an enum type. In both cases, u.enumer is valid.
*/
bool t_is_enum:1;
bool t_packed:1;
union {
- int _t_dim; /* dimension (if ARRAY) */
- struct_or_union *_t_sou;
- enumeration *_t_enum;
- sym_t *_t_params; /* parameters (if t_proto) */
- } t_u;
+ int dimension; /* if ARRAY */
+ struct_or_union *sou;
+ enumeration *enumer;
+ sym_t *params; /* if t_proto */
+ } u;
unsigned int t_bit_field_width:8;
unsigned int t_bit_field_offset:24;
struct lint1_type *t_subt; /*- element type (if ARRAY),
@@ -154,12 +154,6 @@ struct lint1_type {
* target type (if PTR) */
};
-#define t_dim t_u._t_dim
-#define t_sou t_u._t_sou
-#define t_enum t_u._t_enum
-#define t_params t_u._t_params
-
-
typedef enum {
SK_VCFT, /* variable, constant, function, type */
SK_MEMBER, /* member of a struct or union */
@@ -365,8 +359,8 @@ typedef struct decl_level {
bool d_asm:1; /* set if d_ctx == AUTO and asm() present */
bool d_packed:1;
bool d_used:1;
- type_t *d_tag_type; /* during a member declaration, the tag type to
- * which the member belongs */
+ type_t *d_tag_type; /* during a member or enumerator declaration,
+ * the tag type to which the member belongs */
sym_t *d_func_params; /* during a function declaration, the
* parameters, stored in the enclosing level */
pos_t d_func_def_pos; /* position of the function definition */
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.610 src/usr.bin/xlint/lint1/tree.c:1.611
--- src/usr.bin/xlint/lint1/tree.c:1.610 Sat Mar 9 10:47:16 2024
+++ src/usr.bin/xlint/lint1/tree.c Sat Mar 9 13:20:55 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.610 2024/03/09 10:47:16 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.611 2024/03/09 13:20:55 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: tree.c,v 1.610 2024/03/09 10:47:16 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.611 2024/03/09 13:20:55 rillig Exp $");
#endif
#include <float.h>
@@ -420,7 +420,7 @@ fallback_symbol(sym_t *sym)
/* C11 6.4.2.2 */
sym->s_type = block_derive_type(gettyp(CHAR), ARRAY);
sym->s_type->t_const = true;
- sym->s_type->t_dim = (int)strlen(funcsym->s_name) + 1;
+ sym->s_type->u.dimension = (int)strlen(funcsym->s_name) + 1;
return;
}
@@ -537,7 +537,7 @@ build_string(buffer *lit)
type_t *tp = expr_zero_alloc(sizeof(*tp), "type");
tp->t_tspec = ARRAY;
tp->t_subt = gettyp(lit->data != NULL ? CHAR : WCHAR_TSPEC);
- tp->t_dim = (int)(value_len + 1);
+ tp->u.dimension = (int)(value_len + 1);
tnode_t *n = expr_alloc_tnode();
n->tn_op = STRING;
@@ -982,7 +982,7 @@ subt_size_in_bytes(type_t *tp)
int elem = 1;
while (tp->t_tspec == ARRAY) {
- elem *= tp->t_dim;
+ elem *= tp->u.dimension;
tp = tp->t_subt;
}
@@ -998,7 +998,7 @@ subt_size_in_bytes(type_t *tp)
break;
case STRUCT:
case UNION:
- if ((elsz_in_bits = (int)tp->t_sou->sou_size_in_bits) == 0)
+ if ((elsz_in_bits = (int)tp->u.sou->sou_size_in_bits) == 0)
/* cannot do pointer arithmetic on operand of ... */
error(136);
break;
@@ -1055,7 +1055,7 @@ check_enum_array_index(const tnode_t *ln
return;
const type_t *rtp = rn->tn_left->tn_type;
- const sym_t *ec = rtp->t_enum->en_first_enumerator;
+ const sym_t *ec = rtp->u.enumer->en_first_enumerator;
const sym_t *max_ec = ec;
lint_assert(ec != NULL);
for (ec = ec->s_next; ec != NULL; ec = ec->s_next)
@@ -1065,7 +1065,7 @@ check_enum_array_index(const tnode_t *ln
int64_t max_enum_value = max_ec->u.s_enum_constant;
lint_assert(INT_MIN <= max_enum_value && max_enum_value <= INT_MAX);
- int max_array_index = ltp->t_dim - 1;
+ int max_array_index = ltp->u.dimension - 1;
if (max_enum_value == max_array_index)
return;
@@ -1197,7 +1197,7 @@ build_colon(bool sys, tnode_t *ln, tnode
tp = gettyp(VOID);
else if (is_struct_or_union(lt)) {
lint_assert(is_struct_or_union(rt));
- lint_assert(ln->tn_type->t_sou == rn->tn_type->t_sou);
+ lint_assert(ln->tn_type->u.sou == rn->tn_type->u.sou);
if (is_incomplete(ln->tn_type)) {
/* unknown operand size, op '%s' */
error(138, op_name(COLON));
@@ -1316,7 +1316,7 @@ build_assignment(op_t op, bool sys, tnod
if ((op == ASSIGN || op == RETURN || op == INIT) &&
(lt == STRUCT || rt == STRUCT)) {
lint_assert(lt == rt);
- lint_assert(ln->tn_type->t_sou == rn->tn_type->t_sou);
+ lint_assert(ln->tn_type->u.sou == rn->tn_type->u.sou);
if (is_incomplete(ln->tn_type)) {
if (op == RETURN)
/* cannot return incomplete type */
@@ -1857,7 +1857,7 @@ find_member(const struct_or_union *sou,
if (is_struct_or_union(mem->s_type->t_tspec)
&& mem->s_name == unnamed) {
sym_t *nested_mem =
- find_member(mem->s_type->t_sou, name);
+ find_member(mem->s_type->u.sou, name);
if (nested_mem != NULL)
return nested_mem;
}
@@ -1905,7 +1905,7 @@ struct_or_union_member(tnode_t *tn, op_t
if (op == ARROW && tn->tn_type->t_tspec == PTR
&& is_struct_or_union(tn->tn_type->t_subt->t_tspec))
tp = tn->tn_type->t_subt;
- struct_or_union *sou = tp != NULL ? tp->t_sou : NULL;
+ struct_or_union *sou = tp != NULL ? tp->u.sou : NULL;
if (sou != NULL) {
sym_t *nested_mem = find_member(sou, msym->s_name);
@@ -2416,9 +2416,9 @@ typeok_colon(const tnode_t *ln, const ty
if (lt == BOOL && rt == BOOL)
return true;
- if (lt == STRUCT && rt == STRUCT && ltp->t_sou == rtp->t_sou)
+ if (lt == STRUCT && rt == STRUCT && ltp->u.sou == rtp->u.sou)
return true;
- if (lt == UNION && rt == UNION && ltp->t_sou == rtp->t_sou)
+ if (lt == UNION && rt == UNION && ltp->u.sou == rtp->u.sou)
return true;
if (lt == PTR && is_null_pointer(rn))
@@ -2457,7 +2457,7 @@ has_constant_member(const type_t *tp)
{
lint_assert(is_struct_or_union(tp->t_tspec));
- for (sym_t *m = tp->t_sou->sou_first_member;
+ for (sym_t *m = tp->u.sou->sou_first_member;
m != NULL; m = m->s_next) {
const type_t *mtp = m->s_type;
if (mtp->t_const)
@@ -2794,7 +2794,7 @@ check_assign_types_compatible(op_t op, i
return true;
if (is_struct_or_union(lt) && is_struct_or_union(rt))
- return ltp->t_sou == rtp->t_sou;
+ return ltp->u.sou == rtp->u.sou;
if (lt == PTR && is_null_pointer(rn)) {
if (is_integer(rn->tn_type->t_tspec))
@@ -3002,7 +3002,7 @@ check_enum_type_mismatch(op_t op, int ar
{
const mod_t *mp = &modtab[op];
- if (ln->tn_type->t_enum != rn->tn_type->t_enum) {
+ if (ln->tn_type->u.enumer != rn->tn_type->u.enumer) {
switch (op) {
case INIT:
/* enum type mismatch between '%s' and '%s' in ... */
@@ -3395,8 +3395,8 @@ static bool
struct_starts_with(const type_t *struct_tp, const type_t *member_tp)
{
- return struct_tp->t_sou->sou_first_member != NULL &&
- types_compatible(struct_tp->t_sou->sou_first_member->s_type,
+ return struct_tp->u.sou->sou_first_member != NULL &&
+ types_compatible(struct_tp->u.sou->sou_first_member->s_type,
member_tp, true, false, NULL);
}
@@ -3411,7 +3411,7 @@ is_byte_array(const type_t *tp)
static bool
union_contains(const type_t *utp, const type_t *mtp)
{
- for (const sym_t *mem = utp->t_sou->sou_first_member;
+ for (const sym_t *mem = utp->u.sou->sou_first_member;
mem != NULL; mem = mem->s_next) {
if (types_compatible(mem->s_type, mtp, true, false, NULL))
return true;
@@ -3444,8 +3444,8 @@ should_warn_about_pointer_cast(const typ
/* Allow cast between pointers to sockaddr variants. */
if (nst == STRUCT && ost == STRUCT) {
- const sym_t *nmem = nstp->t_sou->sou_first_member;
- const sym_t *omem = ostp->t_sou->sou_first_member;
+ const sym_t *nmem = nstp->u.sou->sou_first_member;
+ const sym_t *omem = ostp->u.sou->sou_first_member;
while (nmem != NULL && omem != NULL &&
types_compatible(nmem->s_type, omem->s_type,
true, false, NULL))
@@ -3466,7 +3466,7 @@ should_warn_about_pointer_cast(const typ
}
if (is_struct_or_union(nst) && is_struct_or_union(ost))
- return nstp->t_sou != ostp->t_sou;
+ return nstp->u.sou != ostp->u.sou;
enum rank_kind rk1 = type_properties(nst)->tt_rank_kind;
enum rank_kind rk2 = type_properties(ost)->tt_rank_kind;
@@ -3886,7 +3886,7 @@ build_offsetof(const type_t *tp, designa
if (!is_struct_or_union(tp->t_tspec))
goto proceed; /* silent error */
const char *name = dr->dr_member->s_name;
- sym_t *mem = find_member(tp->t_sou, name);
+ sym_t *mem = find_member(tp->u.sou, name);
if (mem == NULL) {
/* type '%s' does not have member '%s' */
error(101, name, type_name(tp));
@@ -3914,7 +3914,7 @@ type_size_in_bits(const type_t *tp)
lint_assert(tp != NULL);
while (tp->t_tspec == ARRAY) {
flex = true; /* allow c99 flex arrays [] [0] */
- elem *= tp->t_dim;
+ elem *= tp->u.dimension;
tp = tp->t_subt;
}
if (elem == 0 && !flex) {
@@ -3942,7 +3942,7 @@ type_size_in_bits(const type_t *tp)
error(143);
elsz = 1;
} else
- elsz = tp->t_sou->sou_size_in_bits;
+ elsz = tp->u.sou->sou_size_in_bits;
break;
case ENUM:
if (is_incomplete(tp)) {
@@ -4000,7 +4000,7 @@ cast_to_union(tnode_t *otn, bool sys, ty
return NULL;
}
- for (const sym_t *m = ntp->t_sou->sou_first_member;
+ for (const sym_t *m = ntp->u.sou->sou_first_member;
m != NULL; m = m->s_next) {
if (types_compatible(m->s_type, otn->tn_type,
false, false, NULL)) {
@@ -4137,12 +4137,12 @@ check_function_arguments(const function_
/* get # of parameters in the prototype */
int npar = 0;
- for (const sym_t *p = ftp->t_params; p != NULL; p = p->s_next)
+ for (const sym_t *p = ftp->u.params; p != NULL; p = p->s_next)
npar++;
int narg = (int)call->args_len;
- const sym_t *param = ftp->t_params;
+ const sym_t *param = ftp->u.params;
if (ftp->t_proto && npar != narg && !(ftp->t_vararg && npar < narg)) {
/* argument mismatch: %d %s passed, %d expected */
error(150, narg, narg != 1 ? "arguments" : "argument", npar);
@@ -4368,7 +4368,7 @@ check_array_index(tnode_t *tn, bool ampe
? (int64_t)((uint64_t)rn->tn_val.u.integer / elsz)
: rn->tn_val.u.integer / elsz;
- int dim = ln->tn_left->tn_type->t_dim + (amper ? 1 : 0);
+ int dim = ln->tn_left->tn_type->u.dimension + (amper ? 1 : 0);
if (!is_uinteger(rn->tn_type->t_tspec) && con < 0)
/* array subscript cannot be negative: %ld */