Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/tests/usr.bin/xlint/lint1 tests/lint: fix analysis from prev...
details: https://anonhg.NetBSD.org/src/rev/327e3e78ff63
branches: trunk
changeset: 982583:327e3e78ff63
user: rillig <rillig%NetBSD.org@localhost>
date: Sat Apr 17 20:57:18 2021 +0000
description:
tests/lint: fix analysis from previous commit, add another example
This is not a GCC feature, it's required by C99 already.
diffstat:
tests/usr.bin/xlint/lint1/gcc_init_compound_literal.c | 45 +++++++++++++---
tests/usr.bin/xlint/lint1/gcc_init_compound_literal.exp | 2 +-
2 files changed, 37 insertions(+), 10 deletions(-)
diffs (69 lines):
diff -r 48044c7f9c57 -r 327e3e78ff63 tests/usr.bin/xlint/lint1/gcc_init_compound_literal.c
--- a/tests/usr.bin/xlint/lint1/gcc_init_compound_literal.c Sat Apr 17 20:42:57 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/gcc_init_compound_literal.c Sat Apr 17 20:57:18 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: gcc_init_compound_literal.c,v 1.1 2021/04/17 20:36:17 rillig Exp $ */
+/* $NetBSD: gcc_init_compound_literal.c,v 1.2 2021/04/17 20:57:18 rillig Exp $ */
# 3 "gcc_init_compound_literal.c"
/*
@@ -7,14 +7,11 @@
* All the expressions in an initializer for an object that has static
* storage duration shall be constant expressions or string literals.
*
- * The term "constant expression" is defined in C99 6.6 and is quite
- * restricted, except for a single paragraph, 6.6p10:
- *
- * An implementation may accept other forms of constant expressions.
- *
- * GCC additionally allows compound expressions, and these can even use the
- * array-to-pointer conversion from C99 6.3.2.1, which allows to initialize a
- * pointer object with a pointer to a direct-value statically allocated array.
+ * The term "constant expression" is defined in C99 6.6, where 6.6p9 allows
+ * "constant expressions" in initializers to also be an "address constant".
+ * Using these address constants, it is possible to reference an unnamed
+ * object created by a compound literal (C99 6.5.2.5), using either an
+ * explicit '&' or the implicit array-to-pointer conversion from C99 6.3.2.1.
*/
// Seen in sys/crypto/aes/aes_ccm.c.
@@ -28,3 +25,33 @@
// 1, 2, 3, 4
// },
};
+
+struct node {
+ int num;
+ struct node *left;
+ struct node *right;
+};
+
+/*
+ * Initial tree for representing the decisions in the classic number guessing
+ * game often used in teaching the basics of programming.
+ */
+/* TODO: activate after fixing the assertion failure
+static const struct node guess = {
+ 50,
+ &(struct node){
+ 25,
+ &(struct node){
+ 12,
+ (void *)0,
+ (void *)0,
+ },
+ &(struct node){
+ 37,
+ (void *)0,
+ (void *)0,
+ },
+ },
+ (void *)0
+};
+*/
diff -r 48044c7f9c57 -r 327e3e78ff63 tests/usr.bin/xlint/lint1/gcc_init_compound_literal.exp
--- a/tests/usr.bin/xlint/lint1/gcc_init_compound_literal.exp Sat Apr 17 20:42:57 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/gcc_init_compound_literal.exp Sat Apr 17 20:57:18 2021 +0000
@@ -1,1 +1,1 @@
-gcc_init_compound_literal.c(25): error: too many struct/union initializers [172]
+gcc_init_compound_literal.c(22): error: too many struct/union initializers [172]
Home |
Main Index |
Thread Index |
Old Index