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");