Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/xlint/lint1 lint: extract check_init_expr from init_...
details: https://anonhg.NetBSD.org/src/rev/0ec76d6e451a
branches: trunk
changeset: 981877:0ec76d6e451a
user: rillig <rillig%NetBSD.org@localhost>
date: Thu Mar 25 00:35:16 2021 +0000
description:
lint: extract check_init_expr from init_using_expr
No functional change.
diffstat:
usr.bin/xlint/lint1/init.c | 91 ++++++++++++++++++++++++---------------------
1 files changed, 49 insertions(+), 42 deletions(-)
diffs (122 lines):
diff -r 6b5a57534045 -r 0ec76d6e451a usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c Wed Mar 24 18:19:31 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c Thu Mar 25 00:35:16 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.115 2021/03/23 22:58:08 rillig Exp $ */
+/* $NetBSD: init.c,v 1.116 2021/03/25 00:35:16 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.115 2021/03/23 22:58:08 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.116 2021/03/25 00:35:16 rillig Exp $");
#endif
#include <stdlib.h>
@@ -990,12 +990,55 @@
return true;
}
+static void
+check_init_expr(tnode_t *tn, scl_t sclass)
+{
+ tnode_t *ln;
+ tspec_t lt, rt;
+ struct mbl *tmem;
+
+ /* Create a temporary node for the left side. */
+ ln = tgetblk(sizeof (tnode_t));
+ ln->tn_op = NAME;
+ ln->tn_type = tduptyp(initstk->i_type);
+ ln->tn_type->t_const = false;
+ ln->tn_lvalue = true;
+ ln->tn_sym = initsym; /* better than nothing */
+
+ tn = cconv(tn);
+
+ lt = ln->tn_type->t_tspec;
+ rt = tn->tn_type->t_tspec;
+
+ lint_assert(is_scalar(lt)); /* at least before C99 */
+
+ debug_step("typeok '%s', '%s'",
+ type_name(ln->tn_type), type_name(tn->tn_type));
+ if (!typeok(INIT, 0, ln, tn))
+ return;
+
+ /*
+ * Store the tree memory. This is necessary because otherwise
+ * expr() would free it.
+ */
+ tmem = tsave();
+ expr(tn, true, false, true, false);
+ trestor(tmem);
+
+ check_bit_field_init(ln, lt, rt);
+
+ /*
+ * XXX: Is it correct to do this conversion _after_ the typeok above?
+ */
+ if (lt != rt || (initstk->i_type->t_bitfield && tn->tn_op == CON))
+ tn = convert(INIT, 0, initstk->i_type, tn);
+
+ check_non_constant_initializer(tn, sclass);
+}
+
void
init_using_expr(tnode_t *tn)
{
- tspec_t lt, rt;
- tnode_t *ln;
- struct mbl *tmem;
scl_t sclass;
debug_enter();
@@ -1034,43 +1077,7 @@
initstk->i_remaining--;
debug_step("%d elements remaining", initstk->i_remaining);
- /* Create a temporary node for the left side. */
- ln = tgetblk(sizeof (tnode_t));
- ln->tn_op = NAME;
- ln->tn_type = tduptyp(initstk->i_type);
- ln->tn_type->t_const = false;
- ln->tn_lvalue = true;
- ln->tn_sym = initsym; /* better than nothing */
-
- tn = cconv(tn);
-
- lt = ln->tn_type->t_tspec;
- rt = tn->tn_type->t_tspec;
-
- lint_assert(is_scalar(lt)); /* at least before C99 */
-
- debug_step("typeok '%s', '%s'",
- type_name(ln->tn_type), type_name(tn->tn_type));
- if (!typeok(INIT, 0, ln, tn))
- goto done_initstack;
-
- /*
- * Store the tree memory. This is necessary because otherwise
- * expr() would free it.
- */
- tmem = tsave();
- expr(tn, true, false, true, false);
- trestor(tmem);
-
- check_bit_field_init(ln, lt, rt);
-
- /*
- * XXX: Is it correct to do this conversion _after_ the typeok above?
- */
- if (lt != rt || (initstk->i_type->t_bitfield && tn->tn_op == CON))
- tn = convert(INIT, 0, initstk->i_type, tn);
-
- check_non_constant_initializer(tn, sclass);
+ check_init_expr(tn, sclass);
done_initstack:
debug_initstack();
Home |
Main Index |
Thread Index |
Old Index