Module Name: src
Committed By: rillig
Date: Mon Feb 6 20:50:34 UTC 2023
Modified Files:
src/usr.bin/xlint/lint1: init.c
Log Message:
lint: condense code for handling initializations
Remove the assertion for a non-null initialization, as each code path
immediately dereferences it.
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.238 -r1.239 src/usr.bin/xlint/lint1/init.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/lint1/init.c
diff -u src/usr.bin/xlint/lint1/init.c:1.238 src/usr.bin/xlint/lint1/init.c:1.239
--- src/usr.bin/xlint/lint1/init.c:1.238 Fri Jan 13 19:41:50 2023
+++ src/usr.bin/xlint/lint1/init.c Mon Feb 6 20:50:34 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.238 2023/01/13 19:41:50 rillig Exp $ */
+/* $NetBSD: init.c,v 1.239 2023/02/06 20:50:34 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.238 2023/01/13 19:41:50 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.239 2023/02/06 20:50:34 rillig Exp $");
#endif
#include <stdlib.h>
@@ -197,13 +197,12 @@ has_automatic_storage_duration(const sym
static bool
can_init_character_array(const type_t *ltp, const tnode_t *rn)
{
- tspec_t lst, rst;
if (!(ltp != NULL && ltp->t_tspec == ARRAY && rn->tn_op == STRING))
return false;
- lst = ltp->t_subt->t_tspec;
- rst = rn->tn_type->t_subt->t_tspec;
+ tspec_t lst = ltp->t_subt->t_tspec;
+ tspec_t rst = rn->tn_type->t_subt->t_tspec;
return rst == CHAR
? lst == CHAR || lst == UCHAR || lst == SCHAR
@@ -247,9 +246,8 @@ look_up_member(const type_t *tp, const c
static void
update_type_of_array_of_unknown_size(sym_t *sym, size_t size)
{
- type_t *tp;
- tp = block_dup_type(sym->s_type);
+ type_t *tp = block_dup_type(sym->s_type);
tp->t_dim = (int)size;
tp->t_incomplete_array = false;
sym->s_type = tp;
@@ -274,12 +272,12 @@ check_bit_field_init(const tnode_t *ln,
static void
check_non_constant_initializer(const tnode_t *tn, const sym_t *sym)
{
- const sym_t *unused_sym;
- ptrdiff_t unused_offs;
if (tn == NULL || tn->tn_op == CON)
return;
+ const sym_t *unused_sym;
+ ptrdiff_t unused_offs;
if (constant_addr(tn, &unused_sym, &unused_offs))
return;
@@ -306,14 +304,11 @@ check_trad_no_auto_aggregate(const sym_t
static void
check_init_expr(const type_t *ltp, sym_t *lsym, tnode_t *rn)
{
- tnode_t *ln;
- type_t *lutp;
- tspec_t lt, rt;
- lutp = expr_unqualified_type(ltp);
+ type_t *lutp = expr_unqualified_type(ltp);
/* Create a temporary node for the left side. */
- ln = expr_zero_alloc(sizeof(*ln));
+ tnode_t *ln = expr_zero_alloc(sizeof(*ln));
ln->tn_op = NAME;
ln->tn_type = lutp;
ln->tn_lvalue = true;
@@ -321,8 +316,8 @@ check_init_expr(const type_t *ltp, sym_t
rn = cconv(rn);
- lt = ln->tn_type->t_tspec;
- rt = rn->tn_type->t_tspec;
+ tspec_t lt = ln->tn_type->t_tspec;
+ tspec_t rt = rn->tn_type->t_tspec;
debug_step("typeok '%s', '%s'",
type_name(ln->tn_type), type_name(rn->tn_type));
@@ -352,6 +347,7 @@ check_init_expr(const type_t *ltp, sym_t
static const type_t *
designator_type(const designator *dr, const type_t *tp)
{
+
switch (tp->t_tspec) {
case STRUCT:
case UNION:
@@ -410,7 +406,6 @@ designator_debug(const designator *dr)
static void
designation_debug(const designation *dn)
{
- size_t i;
if (dn->dn_len == 0) {
debug_step("designation: (empty)");
@@ -419,7 +414,7 @@ designation_debug(const designation *dn)
debug_print_indent();
debug_printf("designation: ");
- for (i = 0; i < dn->dn_len; i++)
+ for (size_t i = 0; i < dn->dn_len; i++)
designator_debug(dn->dn_items + i);
debug_printf("\n");
}
@@ -439,7 +434,6 @@ static void
designation_push(designation *dn, designator_kind kind,
const sym_t *member, size_t subscript)
{
- designator *dr;
if (dn->dn_len == dn->dn_cap) {
dn->dn_cap += 4;
@@ -447,7 +441,7 @@ designation_push(designation *dn, design
dn->dn_cap * sizeof(dn->dn_items[0]));
}
- dr = &dn->dn_items[dn->dn_len++];
+ designator *dr = &dn->dn_items[dn->dn_len++];
dr->dr_kind = kind;
dr->dr_member = member;
dr->dr_subscript = subscript;
@@ -486,9 +480,8 @@ designation_descend(designation *dn, con
static const type_t *
designation_type(const designation *dn, const type_t *tp)
{
- size_t i;
- for (i = 0; i < dn->dn_len && tp != NULL; i++)
+ for (size_t i = 0; i < dn->dn_len && tp != NULL; i++)
tp = designator_type(dn->dn_items + i, tp);
return tp;
}
@@ -496,9 +489,8 @@ designation_type(const designation *dn,
static const type_t *
designation_parent_type(const designation *dn, const type_t *tp)
{
- size_t i;
- for (i = 0; i + 1 < dn->dn_len && tp != NULL; i++)
+ for (size_t i = 0; i + 1 < dn->dn_len && tp != NULL; i++)
tp = designator_type(dn->dn_items + i, tp);
return tp;
}
@@ -507,9 +499,8 @@ designation_parent_type(const designatio
static brace_level *
brace_level_new(const type_t *tp, brace_level *enclosing)
{
- brace_level *bl;
- bl = xcalloc(1, sizeof(*bl));
+ brace_level *bl = xcalloc(1, sizeof(*bl));
bl->bl_type = tp;
bl->bl_enclosing = enclosing;
@@ -558,17 +549,15 @@ brace_level_sub_type(const brace_level *
static void
brace_level_advance(brace_level *bl, size_t *max_subscript)
{
- const type_t *tp;
- designation *dn;
- designator *dr;
debug_enter();
- dn = &bl->bl_designation;
- tp = designation_parent_type(dn, bl->bl_type);
+ designation *dn = &bl->bl_designation;
+ const type_t *tp = designation_parent_type(dn, bl->bl_type);
if (bl->bl_designation.dn_len == 0)
(void)designation_descend(dn, bl->bl_type);
- dr = designation_last(dn);
+
+ designator *dr = designation_last(dn);
/* TODO: try to switch on dr->dr_kind instead */
switch (tp->t_tspec) {
case STRUCT:
@@ -659,10 +648,8 @@ brace_level_pop_final(brace_level *bl, s
static bool
brace_level_goto(brace_level *bl, const tnode_t *rn, size_t *max_subscript)
{
- const type_t *ltp;
- designation *dn;
- dn = &bl->bl_designation;
+ designation *dn = &bl->bl_designation;
if (dn->dn_len == 0 && can_init_character_array(bl->bl_type, rn))
return true;
if (dn->dn_len == 0 && !designation_descend(dn, bl->bl_type))
@@ -672,7 +659,7 @@ again:
if (!brace_level_pop_done(bl, max_subscript))
return false;
- ltp = brace_level_sub_type(bl);
+ const type_t *ltp = brace_level_sub_type(bl);
if (types_compatible(ltp, rn->tn_type, true, false, NULL))
return true;
@@ -691,9 +678,8 @@ again:
static initialization *
initialization_new(sym_t *sym, initialization *enclosing)
{
- initialization *in;
- in = xcalloc(1, sizeof(*in));
+ initialization *in = xcalloc(1, sizeof(*in));
in->in_sym = sym;
in->in_enclosing = enclosing;
@@ -718,8 +704,6 @@ initialization_free(initialization *in)
static void
initialization_debug(const initialization *in)
{
- size_t i;
- const brace_level *bl;
if (in->in_err)
debug_step("initialization error");
@@ -728,7 +712,8 @@ initialization_debug(const initializatio
return;
}
- i = 0;
+ const brace_level *bl;
+ size_t i = 0;
for (bl = in->in_brace_level; bl != NULL; bl = bl->bl_enclosing) {
debug_print_indent();
debug_printf("brace level %zu: ", i);
@@ -747,12 +732,11 @@ initialization_debug(const initializatio
static const type_t *
initialization_sub_type(initialization *in)
{
- const type_t *tp;
if (in->in_brace_level == NULL)
return in->in_sym->s_type;
- tp = brace_level_sub_type(in->in_brace_level);
+ const type_t *tp = brace_level_sub_type(in->in_brace_level);
if (tp == NULL)
in->in_err = true;
return tp;
@@ -761,19 +745,17 @@ initialization_sub_type(initialization *
static void
initialization_lbrace(initialization *in)
{
- const type_t *tp;
- brace_level *outer_bl;
if (in->in_err)
return;
debug_enter();
- tp = initialization_sub_type(in);
+ const type_t *tp = initialization_sub_type(in);
if (tp == NULL)
goto done;
- outer_bl = in->in_brace_level;
+ brace_level *outer_bl = in->in_brace_level;
if (!allow_c90 && outer_bl == NULL)
check_trad_no_auto_aggregate(in->in_sym);
@@ -811,7 +793,6 @@ done:
static void
initialization_rbrace(initialization *in)
{
- brace_level *inner_bl, *outer_bl;
debug_enter();
@@ -834,8 +815,8 @@ initialization_rbrace(initialization *in
if (in->in_err)
goto done;
- inner_bl = in->in_brace_level;
- outer_bl = inner_bl->bl_enclosing;
+ brace_level *inner_bl = in->in_brace_level;
+ brace_level *outer_bl = inner_bl->bl_enclosing;
in->in_brace_level = outer_bl;
brace_level_free(inner_bl);
@@ -850,17 +831,14 @@ done:
static void
initialization_add_designator_member(initialization *in, const char *name)
{
- brace_level *bl;
- const type_t *tp;
- const sym_t *member;
if (in->in_err)
return;
- bl = in->in_brace_level;
+ brace_level *bl = in->in_brace_level;
lint_assert(bl != NULL);
- tp = brace_level_sub_type(bl);
+ const type_t *tp = brace_level_sub_type(bl);
if (is_struct_or_union(tp->t_tspec))
goto proceed;
else if (tp->t_tspec == ARRAY) {
@@ -875,8 +853,8 @@ initialization_add_designator_member(ini
return;
}
-proceed:
- member = look_up_member(tp, name);
+proceed:;
+ const sym_t *member = look_up_member(tp, name);
if (member == NULL) {
/* type '%s' does not have member '%s' */
error(101, type_name(tp), name);
@@ -891,16 +869,14 @@ proceed:
static void
initialization_add_designator_subscript(initialization *in, size_t subscript)
{
- brace_level *bl;
- const type_t *tp;
if (in->in_err)
return;
- bl = in->in_brace_level;
+ brace_level *bl = in->in_brace_level;
lint_assert(bl != NULL);
- tp = brace_level_sub_type(bl);
+ const type_t *tp = brace_level_sub_type(bl);
if (tp->t_tspec != ARRAY) {
/* syntax error '%s' */
error(249, "designator '[...]' is only for arrays");
@@ -927,7 +903,6 @@ initialization_add_designator_subscript(
static bool
initialization_expr_using_op(initialization *in, tnode_t *rn)
{
- tnode_t *ln, *tn;
if (!has_automatic_storage_duration(in->in_sym))
return false;
@@ -938,10 +913,10 @@ initialization_expr_using_op(initializat
debug_step("handing over to INIT");
- ln = build_name(in->in_sym, false);
+ tnode_t *ln = build_name(in->in_sym, false);
ln->tn_type = expr_unqualified_type(ln->tn_type);
- tn = build_binary(ln, INIT, false /* XXX */, rn);
+ tnode_t *tn = build_binary(ln, INIT, false /* XXX */, rn);
expr(tn, false, false, false, false);
return true;
@@ -951,25 +926,22 @@ initialization_expr_using_op(initializat
static bool
initialization_init_array_from_string(initialization *in, tnode_t *tn)
{
- brace_level *bl;
- const type_t *tp;
- size_t len;
if (tn->tn_op != STRING)
return false;
- tp = initialization_sub_type(in);
+ const type_t *tp = initialization_sub_type(in);
if (!can_init_character_array(tp, tn))
return false;
- len = tn->tn_string->st_len;
+ size_t len = tn->tn_string->st_len;
if (!tp->t_incomplete_array && (size_t)tp->t_dim < len) {
/* string literal too long (%lu) for target array (%lu) */
warning(187, (unsigned long)len, (unsigned long)tp->t_dim);
}
- bl = in->in_brace_level;
+ brace_level *bl = in->in_brace_level;
if (bl != NULL && bl->bl_designation.dn_len == 0)
(void)designation_descend(&bl->bl_designation, bl->bl_type);
if (bl != NULL)
@@ -988,15 +960,13 @@ initialization_init_array_from_string(in
static void
initialization_expr(initialization *in, tnode_t *tn)
{
- brace_level *bl;
- const type_t *tp;
if (in->in_err || tn == NULL)
return;
debug_enter();
- bl = in->in_brace_level;
+ brace_level *bl = in->in_brace_level;
if (bl != NULL && !brace_level_goto(bl, tn, &in->in_max_subscript)) {
in->in_err = true;
goto done;
@@ -1008,7 +978,7 @@ initialization_expr(initialization *in,
if (in->in_err)
goto done;
- tp = initialization_sub_type(in);
+ const type_t *tp = initialization_sub_type(in);
if (tp == NULL)
goto done;
@@ -1033,19 +1003,11 @@ done:
static initialization *init;
-static initialization *
-current_init(void)
-{
-
- lint_assert(init != NULL);
- return init;
-}
-
sym_t **
current_initsym(void)
{
- return ¤t_init()->in_sym;
+ return &init->in_sym;
}
void
@@ -1061,9 +1023,8 @@ begin_initialization(sym_t *sym)
void
end_initialization(void)
{
- initialization *in;
- in = init;
+ initialization *in = init;
init = in->in_enclosing;
initialization_free(in);
@@ -1074,14 +1035,12 @@ end_initialization(void)
void
begin_designation(void)
{
- initialization *in;
- brace_level *bl;
- in = current_init();
+ initialization *in = init;
if (in->in_err)
return;
- bl = in->in_brace_level;
+ brace_level *bl = in->in_brace_level;
lint_assert(bl != NULL);
bl->bl_designation.dn_len = 0;
designation_debug(&bl->bl_designation);
@@ -1091,33 +1050,33 @@ void
add_designator_member(sbuf_t *sb)
{
- initialization_add_designator_member(current_init(), sb->sb_name);
+ initialization_add_designator_member(init, sb->sb_name);
}
void
add_designator_subscript(range_t range)
{
- initialization_add_designator_subscript(current_init(), range.hi);
+ initialization_add_designator_subscript(init, range.hi);
}
void
init_lbrace(void)
{
- initialization_lbrace(current_init());
+ initialization_lbrace(init);
}
void
init_expr(tnode_t *tn)
{
- initialization_expr(current_init(), tn);
+ initialization_expr(init, tn);
}
void
init_rbrace(void)
{
- initialization_rbrace(current_init());
+ initialization_rbrace(init);
}