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 &current_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);
 }

Reply via email to