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: extend documentation about handlin...
details: https://anonhg.NetBSD.org/src/rev/4ec4a0c90994
branches: trunk
changeset: 961410:4ec4a0c90994
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Apr 18 09:53:03 2021 +0000
description:
lint: extend documentation about handling initializations
diffstat:
usr.bin/xlint/lint1/init.c | 28 +++++++++++++++++++++++-----
usr.bin/xlint/lint1/tree.c | 7 +++++--
2 files changed, 28 insertions(+), 7 deletions(-)
diffs (119 lines):
diff -r 146270849b6a -r 4ec4a0c90994 usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c Sun Apr 18 09:50:00 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c Sun Apr 18 09:53:03 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.197 2021/04/18 09:50:00 rillig Exp $ */
+/* $NetBSD: init.c,v 1.198 2021/04/18 09:53:03 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.197 2021/04/18 09:50:00 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.198 2021/04/18 09:53:03 rillig Exp $");
#endif
#include <stdlib.h>
@@ -68,7 +68,7 @@
* array_flat or spelled out like in array_nested. This is unusual in
* practice and therefore only supported very basically.
*
- * During initialization, the grammar parser calls these functions:
+ * During an initialization, the grammar parser calls these functions:
*
* begin_initialization
* init_lbrace for each '{'
@@ -79,7 +79,8 @@
* end_initialization
*
* Each '{' begins a new brace level, each '}' ends the current brace level.
- * Each brace level has an associated "current object".
+ * Each brace level has an associated "current object", which is the starting
+ * point for resolving the optional designations such as '.member[3]'.
*
* See also:
* C99 6.7.8 "Initialization"
@@ -131,6 +132,12 @@
struct brace_level *bl_enclosing;
};
+/*
+ * An ongoing initialization.
+ *
+ * In most cases there is only ever a single initialization going on. See
+ * pointer_to_compound_literal in msg_171.c for an exception.
+ */
struct initialization {
/* The symbol that is to be initialized. */
sym_t *in_sym;
@@ -210,7 +217,7 @@
#define debug_indent() do { } while (false)
#define debug_enter() do { } while (false)
-#define debug_step0(msg) do { } while (false)
+#define debug_step0(fmt) do { } while (false)
#define debug_step1(fmt, arg0) do { } while (false)
#define debug_step2(fmt, arg1, arg2) do { } while (false)
#define debug_leave() do { } while (false)
@@ -316,6 +323,10 @@
return sym_type(member);
}
+/*
+ * C99 6.7.8p22 says that the type of an array of unknown size becomes known
+ * at the end of its initializer list.
+ */
static void
update_type_of_array_of_unknown_size(sym_t *sym, size_t size)
{
@@ -514,6 +525,8 @@
/*
* Starting at the type of the current object, resolve the type of the
* sub-object by following each designator in the list.
+ *
+ * C99 6.7.8p18
*/
static const type_t *
designation_look_up(const struct designation *dn, const type_t *tp)
@@ -815,6 +828,11 @@
in->in_brace_level->bl_enclosing == NULL)
update_type_of_array_of_unknown_size(in->in_sym,
in->in_brace_level->bl_subscript);
+ /*
+ * XXX: bl_subscript is not entirely correct.
+ * It should rather be max(actually used subscript) + 1.
+ * int arr[] = { [100] = 100, [0] = 0 };
+ */
}
static void
diff -r 146270849b6a -r 4ec4a0c90994 usr.bin/xlint/lint1/tree.c
--- a/usr.bin/xlint/lint1/tree.c Sun Apr 18 09:50:00 2021 +0000
+++ b/usr.bin/xlint/lint1/tree.c Sun Apr 18 09:53:03 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.277 2021/04/17 16:58:04 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.278 2021/04/18 09:53:03 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: tree.c,v 1.277 2021/04/17 16:58:04 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.278 2021/04/18 09:53:03 rillig Exp $");
#endif
#include <float.h>
@@ -4054,6 +4054,9 @@
* The expression can consist of PLUS, MINUS, ADDR, NAME, STRING and
* CON. Type conversions are allowed if they do not change binary
* representation (including width).
+ *
+ * C99 6.6 "Constant expressions"
+ * C99 6.7.8p4 restricts initializers for static storage duration
*/
bool
constant_addr(const tnode_t *tn, const sym_t **symp, ptrdiff_t *offsp)
Home |
Main Index |
Thread Index |
Old Index