Module Name:    src
Committed By:   rillig
Date:           Sun Mar 28 20:35:58 UTC 2021

Modified Files:
        src/usr.bin/xlint/lint1: init.c

Log Message:
lint: add assertions for aggregate initialization

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.173 -r1.174 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.173 src/usr.bin/xlint/lint1/init.c:1.174
--- src/usr.bin/xlint/lint1/init.c:1.173	Sun Mar 28 19:53:58 2021
+++ src/usr.bin/xlint/lint1/init.c	Sun Mar 28 20:35:58 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: init.c,v 1.173 2021/03/28 19:53:58 rillig Exp $	*/
+/*	$NetBSD: init.c,v 1.174 2021/03/28 20:35:58 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.173 2021/03/28 19:53:58 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.174 2021/03/28 20:35:58 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -535,6 +535,18 @@ brace_level_debug(const struct brace_lev
 #define brace_level_debug(level) do { } while (false)
 #endif
 
+static void
+brace_level_assert_struct_or_union(const struct brace_level *level)
+{
+	lint_assert(is_struct_or_union(level->bl_type->t_tspec));
+}
+
+static void
+brace_level_assert_array(const struct brace_level *level)
+{
+	lint_assert(level->bl_type->t_tspec == ARRAY);
+}
+
 static type_t *
 brace_level_subtype(struct brace_level *level)
 {
@@ -548,6 +560,8 @@ brace_level_subtype(struct brace_level *
 static void
 brace_level_set_array_dimension(struct brace_level *level, int dim)
 {
+	brace_level_assert_array(level);
+
 	debug_step("setting the array size to %d", dim);
 	level->bl_type->t_dim = dim;
 	debug_indent();
@@ -559,6 +573,7 @@ brace_level_next_member(struct brace_lev
 {
 	const sym_t *m;
 
+	brace_level_assert_struct_or_union(level);
 	do {
 		m = level->bl_next_member = level->bl_next_member->s_next;
 		/* XXX: can this assertion be made to fail? */
@@ -575,7 +590,7 @@ brace_level_look_up_member(const struct 
 	const type_t *tp = level->bl_type;
 	const sym_t *m;
 
-	lint_assert(is_struct_or_union(tp->t_tspec));
+	brace_level_assert_struct_or_union(level);
 
 	for (m = tp->t_str->sou_first_member; m != NULL; m = m->s_next) {
 		if (m->s_bitfield && m->s_name == unnamed)
@@ -613,6 +628,8 @@ brace_level_look_up_first_member_unnamed
 {
 	sym_t *m;
 
+	brace_level_assert_struct_or_union(level);
+
 	for (m = level->bl_type->t_str->sou_first_member;
 	     m != NULL; m = m->s_next) {
 		if (m->s_bitfield && m->s_name == unnamed)
@@ -632,6 +649,8 @@ brace_level_look_up_first_member_unnamed
 static bool
 brace_level_push_array(struct brace_level *level)
 {
+	brace_level_assert_array(level);
+
 	if (level->bl_enclosing->bl_seen_named_member) {
 		level->bl_brace = true;
 		debug_step("ARRAY, seen named member, needs closing brace");

Reply via email to