Module Name: src
Committed By: jmmv
Date: Sun Jul 18 10:11:01 UTC 2010
Modified Files:
src/tests/util: Makefile
Added Files:
src/tests/util/xlint: Makefile
src/tests/util/xlint/lint1: Makefile d_alignof.c d_c99_complex_num.c
d_c99_for_loops.c d_c99_func.c d_c99_recursive_init.c
d_c99_struct_init.c d_c99_union_init1.c d_c99_union_init2.c
d_c99_union_init3.c d_c9x_array_init.c d_c9x_recursive_init.c
d_cast_init.c d_cast_init2.c d_cast_lhs.c d_compound_literals1.c
d_compound_literals2.c d_constant_conv1.c d_constant_conv2.c
d_cvt_in_ternary.c d_ellipsis_in_switch.c
d_gcc_compound_statements1.c d_gcc_compound_statements2.c
d_gcc_compound_statements3.c d_gcc_func.c
d_gcc_variable_array_init.c d_incorrect_array_size.c
d_long_double_int.c d_nested_structs.c d_nolimit_init.c
d_packed_structs.c d_shift_to_narrower_type.c d_type_conv1.c
d_type_conv2.c d_type_conv3.c d_zero_sized_arrays.c
t_integration.sh
Log Message:
Convert the lint1 tests to atf.
Initial work from the GSoC 2008 project by Lukasz Strzygowski.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/tests/util/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/util/xlint/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/util/xlint/lint1/Makefile \
src/tests/util/xlint/lint1/d_alignof.c \
src/tests/util/xlint/lint1/d_c99_complex_num.c \
src/tests/util/xlint/lint1/d_c99_for_loops.c \
src/tests/util/xlint/lint1/d_c99_func.c \
src/tests/util/xlint/lint1/d_c99_recursive_init.c \
src/tests/util/xlint/lint1/d_c99_struct_init.c \
src/tests/util/xlint/lint1/d_c99_union_init1.c \
src/tests/util/xlint/lint1/d_c99_union_init2.c \
src/tests/util/xlint/lint1/d_c99_union_init3.c \
src/tests/util/xlint/lint1/d_c9x_array_init.c \
src/tests/util/xlint/lint1/d_c9x_recursive_init.c \
src/tests/util/xlint/lint1/d_cast_init.c \
src/tests/util/xlint/lint1/d_cast_init2.c \
src/tests/util/xlint/lint1/d_cast_lhs.c \
src/tests/util/xlint/lint1/d_compound_literals1.c \
src/tests/util/xlint/lint1/d_compound_literals2.c \
src/tests/util/xlint/lint1/d_constant_conv1.c \
src/tests/util/xlint/lint1/d_constant_conv2.c \
src/tests/util/xlint/lint1/d_cvt_in_ternary.c \
src/tests/util/xlint/lint1/d_ellipsis_in_switch.c \
src/tests/util/xlint/lint1/d_gcc_compound_statements1.c \
src/tests/util/xlint/lint1/d_gcc_compound_statements2.c \
src/tests/util/xlint/lint1/d_gcc_compound_statements3.c \
src/tests/util/xlint/lint1/d_gcc_func.c \
src/tests/util/xlint/lint1/d_gcc_variable_array_init.c \
src/tests/util/xlint/lint1/d_incorrect_array_size.c \
src/tests/util/xlint/lint1/d_long_double_int.c \
src/tests/util/xlint/lint1/d_nested_structs.c \
src/tests/util/xlint/lint1/d_nolimit_init.c \
src/tests/util/xlint/lint1/d_packed_structs.c \
src/tests/util/xlint/lint1/d_shift_to_narrower_type.c \
src/tests/util/xlint/lint1/d_type_conv1.c \
src/tests/util/xlint/lint1/d_type_conv2.c \
src/tests/util/xlint/lint1/d_type_conv3.c \
src/tests/util/xlint/lint1/d_zero_sized_arrays.c \
src/tests/util/xlint/lint1/t_integration.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/util/Makefile
diff -u src/tests/util/Makefile:1.8 src/tests/util/Makefile:1.9
--- src/tests/util/Makefile:1.8 Tue Jul 13 21:13:30 2010
+++ src/tests/util/Makefile Sun Jul 18 10:11:00 2010
@@ -1,10 +1,10 @@
-# $NetBSD: Makefile,v 1.8 2010/07/13 21:13:30 jmmv Exp $
+# $NetBSD: Makefile,v 1.9 2010/07/18 10:11:00 jmmv Exp $
.include <bsd.own.mk>
TESTSDIR= ${TESTSBASE}/util
-TESTS_SUBDIRS= awk bzip2 config cut df grep id m4 make mtree ps sdiff sh
+TESTS_SUBDIRS= awk bzip2 config cut df grep id m4 make mtree ps sdiff sh xlint
TESTS_SH= t_basename
TESTS_SH+= t_cp
Added files:
Index: src/tests/util/xlint/Makefile
diff -u /dev/null src/tests/util/xlint/Makefile:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/Makefile Sun Jul 18 10:11:01 2010
@@ -0,0 +1,9 @@
+# $NetBSD: Makefile,v 1.1 2010/07/18 10:11:01 jmmv Exp $
+
+.include <bsd.own.mk>
+
+TESTSDIR= ${TESTSBASE}/util/xlint
+
+TESTS_SUBDIRS= lint1
+
+.include <bsd.test.mk>
Index: src/tests/util/xlint/lint1/Makefile
diff -u /dev/null src/tests/util/xlint/lint1/Makefile:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/Makefile Sun Jul 18 10:11:01 2010
@@ -0,0 +1,48 @@
+# $NetBSD: Makefile,v 1.1 2010/07/18 10:11:01 jmmv Exp $
+
+NOMAN= # defined
+
+.include <bsd.own.mk>
+
+TESTSDIR= ${TESTSBASE}/util/xlint/lint1
+
+TESTS_SH= t_integration
+
+FILESDIR= ${TESTSDIR}
+FILES= d_c99_complex_num.c
+FILES+= d_alignof.c
+FILES+= d_c99_for_loops.c
+FILES+= d_c99_func.c
+FILES+= d_c99_recursive_init.c
+FILES+= d_c99_struct_init.c
+FILES+= d_c99_union_init1.c
+FILES+= d_c99_union_init2.c
+FILES+= d_c99_union_init3.c
+FILES+= d_c9x_array_init.c
+FILES+= d_c9x_recursive_init.c
+FILES+= d_cast_init.c
+FILES+= d_cast_init2.c
+FILES+= d_cast_lhs.c
+FILES+= d_compound_literals1.c
+FILES+= d_compound_literals2.c
+FILES+= d_constant_conv1.c
+FILES+= d_constant_conv2.c
+FILES+= d_cvt_in_ternary.c
+FILES+= d_ellipsis_in_switch.c
+FILES+= d_gcc_compound_statements1.c
+FILES+= d_gcc_compound_statements2.c
+FILES+= d_gcc_compound_statements3.c
+FILES+= d_gcc_func.c
+FILES+= d_gcc_variable_array_init.c
+FILES+= d_incorrect_array_size.c
+FILES+= d_long_double_int.c
+FILES+= d_nested_structs.c
+FILES+= d_nolimit_init.c
+FILES+= d_packed_structs.c
+FILES+= d_shift_to_narrower_type.c
+FILES+= d_type_conv1.c
+FILES+= d_type_conv2.c
+FILES+= d_type_conv3.c
+FILES+= d_zero_sized_arrays.c
+
+.include <bsd.test.mk>
Index: src/tests/util/xlint/lint1/d_alignof.c
diff -u /dev/null src/tests/util/xlint/lint1/d_alignof.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_alignof.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,6 @@
+/* __alignof__ */
+int
+main(void)
+{
+ return __alignof__(short);
+}
Index: src/tests/util/xlint/lint1/d_c99_complex_num.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_complex_num.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_complex_num.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+double cabs(double _Complex);
+
+double cabs(double _Complex foo)
+{
+ double d = __real__ foo;
+ return d + 0.1fi;
+}
Index: src/tests/util/xlint/lint1/d_c99_for_loops.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_for_loops.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_for_loops.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,10 @@
+/* c99 for loops */
+extern void foo(int);
+
+int
+main(void)
+{
+ for (int i = 0; i < 10; i++)
+ foo(i);
+ return 0;
+}
Index: src/tests/util/xlint/lint1/d_c99_func.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_func.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_func.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+/* C99 __func__ */
+
+void
+foo(const char *p) {
+ p = __func__;
+ foo(p);
+}
Index: src/tests/util/xlint/lint1/d_c99_recursive_init.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_recursive_init.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_recursive_init.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,13 @@
+/* C99 recursive struct/union initialization */
+struct top {
+ int i;
+ char c;
+ union onion {
+ short us;
+ char uc;
+ } u;
+ char *s;
+} c[] = {
+ { .s = "foo", .c = 'b', .u = { .uc = 'c' } },
+ { .i = 1, .c = 'a', .u = { .us = 2 } },
+};
Index: src/tests/util/xlint/lint1/d_c99_struct_init.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_struct_init.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_struct_init.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,10 @@
+/* C99 struct initialization */
+struct {
+ int i;
+ char *s;
+} c[] = {
+ { .i = 2, },
+ { .s = "foo" },
+ { .i = 1, .s = "bar" },
+ { .s = "foo", .i = -1 },
+};
Index: src/tests/util/xlint/lint1/d_c99_union_init1.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_union_init1.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_union_init1.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,8 @@
+/* C99 union initialization */
+union {
+ int i;
+ char *s;
+} c[] = {
+ { i: 1 },
+ { s: "foo" }
+};
Index: src/tests/util/xlint/lint1/d_c99_union_init2.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_union_init2.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_union_init2.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,8 @@
+/* C99 union initialization */
+union {
+ int i[10];
+ short s;
+} c[] = {
+ { s: 2 },
+ { i: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } },
+};
Index: src/tests/util/xlint/lint1/d_c99_union_init3.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c99_union_init3.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c99_union_init3.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,8 @@
+/* C99 union initialization */
+struct {
+ int i[10];
+ char *s;
+} c[] = {
+ { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
+ "foo" },
+};
Index: src/tests/util/xlint/lint1/d_c9x_array_init.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c9x_array_init.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c9x_array_init.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,6 @@
+/* C9X array initializers */
+int foo[256] = {
+ [2] = 1,
+ [3] = 2,
+ [4 ... 5] = 3
+};
Index: src/tests/util/xlint/lint1/d_c9x_recursive_init.c
diff -u /dev/null src/tests/util/xlint/lint1/d_c9x_recursive_init.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_c9x_recursive_init.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,16 @@
+/* C9X struct/union member init, with nested union and trailing member */
+union node {
+ void *next;
+ char *data;
+};
+struct foo {
+ int b;
+ union node n;
+ int c;
+};
+
+struct foo f = {
+ .b = 1,
+ .n = { .next = 0, },
+ .c = 1
+};
Index: src/tests/util/xlint/lint1/d_cast_init.c
diff -u /dev/null src/tests/util/xlint/lint1/d_cast_init.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_cast_init.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,27 @@
+/* cast initialization */
+typedef unsigned char u_char;
+typedef unsigned int size_t;
+struct sockaddr_x25 {
+ u_char x25_len;
+ u_char x25_family;
+ short x25_net;
+ char x25_addr[16];
+ struct x25opts {
+ char op_flags;
+ char op_psize;
+ char op_wsize;
+ char op_speed;
+ } x25_opts;
+ short x25_udlen;
+ char x25_udata[16];
+};
+
+struct sockaddr_x25 x25_dgmask = {
+ (unsigned char)(unsigned char)(unsigned int)(unsigned long)(&((( struct sockaddr_x25 *)0)->x25_udata[1])) ,
+ 0,
+ 0,
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {0, 0, 0, 0},
+ -1,
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+};
Index: src/tests/util/xlint/lint1/d_cast_init2.c
diff -u /dev/null src/tests/util/xlint/lint1/d_cast_init2.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_cast_init2.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+/* cast initialization as the rhs of a - operand */
+struct sockaddr_dl {
+ char sdl_data[2];
+};
+
+int npdl_datasize = sizeof(struct sockaddr_dl) -
+((int) ((unsigned long)&((struct sockaddr_dl *) 0)->sdl_data[0]));
Index: src/tests/util/xlint/lint1/d_cast_lhs.c
diff -u /dev/null src/tests/util/xlint/lint1/d_cast_lhs.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_cast_lhs.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+/* pointer casts are valid lhs lvalues */
+struct sockaddr { };
+void
+foo() {
+ unsigned long p = 6;
+ ((struct sockaddr *)p) = 0;
+}
Index: src/tests/util/xlint/lint1/d_compound_literals1.c
diff -u /dev/null src/tests/util/xlint/lint1/d_compound_literals1.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_compound_literals1.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,11 @@
+/* compound literals */
+
+struct p {
+ short a, b, c, d;
+};
+
+foo()
+{
+ struct p me = (struct p) {1, 2, 3, 4};
+ me.a = me.b;
+}
Index: src/tests/util/xlint/lint1/d_compound_literals2.c
diff -u /dev/null src/tests/util/xlint/lint1/d_compound_literals2.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_compound_literals2.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,18 @@
+/* compound literals */
+
+struct p {
+ short a, b, c, d;
+} zz = {
+ 1, 2, 3, 4
+};
+
+struct p *bar(int i)
+{
+ static struct p q[10];
+ return &q[i];
+}
+
+foo()
+{
+ *bar(1) = (struct p) { 1, 2, 3, 4 };
+}
Index: src/tests/util/xlint/lint1/d_constant_conv1.c
diff -u /dev/null src/tests/util/xlint/lint1/d_constant_conv1.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_constant_conv1.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,9 @@
+/* Flag information-losing constant conversion in argument lists */
+
+int f(unsigned int);
+
+void
+should_fail()
+{
+ f(-1);
+}
Index: src/tests/util/xlint/lint1/d_constant_conv2.c
diff -u /dev/null src/tests/util/xlint/lint1/d_constant_conv2.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_constant_conv2.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,9 @@
+/* Flag information-losing constant conversion in argument lists */
+
+int f(unsigned int);
+
+void
+should_fail()
+{
+ f(2.1);
+}
Index: src/tests/util/xlint/lint1/d_cvt_in_ternary.c
diff -u /dev/null src/tests/util/xlint/lint1/d_cvt_in_ternary.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_cvt_in_ternary.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,13 @@
+/* CVT node handling in ?: operator */
+typedef unsigned long int size_t;
+struct filecore_direntry {
+ unsigned len:32;
+};
+int
+main(void)
+{
+ struct filecore_direntry dirent = { 0 };
+ size_t uio_resid = 0;
+ size_t bytelen = (((dirent.len)<(uio_resid))?(dirent.len):(uio_resid));
+ return bytelen;
+}
Index: src/tests/util/xlint/lint1/d_ellipsis_in_switch.c
diff -u /dev/null src/tests/util/xlint/lint1/d_ellipsis_in_switch.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_ellipsis_in_switch.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,11 @@
+int x(void)
+{
+ int i = 33;
+ switch (i) {
+ case 1 ... 40:
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
Index: src/tests/util/xlint/lint1/d_gcc_compound_statements1.c
diff -u /dev/null src/tests/util/xlint/lint1/d_gcc_compound_statements1.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_gcc_compound_statements1.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+/* GCC compound statements */
+
+foo(unsigned long z)
+{
+ z = ({ unsigned long tmp; tmp = 1; tmp; });
+ foo(z);
+}
Index: src/tests/util/xlint/lint1/d_gcc_compound_statements2.c
diff -u /dev/null src/tests/util/xlint/lint1/d_gcc_compound_statements2.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_gcc_compound_statements2.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,14 @@
+/* GCC compound statements with non-expressions */
+struct cpu_info {
+ int bar;
+};
+
+int
+main(void)
+{
+ return ({
+ struct cpu_info *__ci;
+ __asm__ volatile("movl %%fs:4,%0":"=r" (__ci));
+ __ci;
+ })->bar;
+}
Index: src/tests/util/xlint/lint1/d_gcc_compound_statements3.c
diff -u /dev/null src/tests/util/xlint/lint1/d_gcc_compound_statements3.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_gcc_compound_statements3.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,10 @@
+/* GCC compound statements with void type */
+
+void
+main(void)
+{
+ ({
+ void *v;
+ __asm__ volatile("noop");
+ });
+}
Index: src/tests/util/xlint/lint1/d_gcc_func.c
diff -u /dev/null src/tests/util/xlint/lint1/d_gcc_func.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_gcc_func.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+/* gcc __FUNCTION__ */
+
+void
+foo(const char *p) {
+ p = __FUNCTION__;
+ foo(p);
+}
Index: src/tests/util/xlint/lint1/d_gcc_variable_array_init.c
diff -u /dev/null src/tests/util/xlint/lint1/d_gcc_variable_array_init.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_gcc_variable_array_init.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+/* gcc: variable array initializer */
+void foo(int i)
+{
+ int array[i];
+ while (i--)
+ foo(array[i] = 0);
+}
Index: src/tests/util/xlint/lint1/d_incorrect_array_size.c
diff -u /dev/null src/tests/util/xlint/lint1/d_incorrect_array_size.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_incorrect_array_size.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,3 @@
+struct foo {
+ int a[-1];
+};
Index: src/tests/util/xlint/lint1/d_long_double_int.c
diff -u /dev/null src/tests/util/xlint/lint1/d_long_double_int.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_long_double_int.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,7 @@
+/* PR 39639: writing "long double" gave "long int" */
+
+int
+fail(long double *a, long int *b)
+{
+ return a == b;
+}
Index: src/tests/util/xlint/lint1/d_nested_structs.c
diff -u /dev/null src/tests/util/xlint/lint1/d_nested_structs.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_nested_structs.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,21 @@
+/* Nested struct */
+typedef void *EditLine;
+typedef void *History;
+
+typedef struct {
+ EditLine *el;
+ History *hist;
+} el_mode_t;
+
+struct el_modes_s {
+ el_mode_t command;
+ el_mode_t string;
+ el_mode_t filec;
+ el_mode_t mime_enc;
+};
+
+struct el_modes_s elm = {
+ .command = { .el = 0, .hist = 0, },
+ .string = { .el = 0, .hist = 0, },
+ .filec = { .el = 0, .hist = 0, },
+};
Index: src/tests/util/xlint/lint1/d_nolimit_init.c
diff -u /dev/null src/tests/util/xlint/lint1/d_nolimit_init.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_nolimit_init.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,4 @@
+/* no limit initializers */
+char foo[][4] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+};
Index: src/tests/util/xlint/lint1/d_packed_structs.c
diff -u /dev/null src/tests/util/xlint/lint1/d_packed_structs.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_packed_structs.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,35 @@
+/* packed tests */
+
+struct in_addr {
+ int x;
+};
+struct ip_timestamp {
+ char ipt_code;
+ char ipt_len;
+ char ipt_ptr;
+ unsigned int ipt_flg:4,
+ ipt_oflw:4;
+ union ipt_timestamp {
+ int ipt_time[1];
+ struct ipt_ta {
+ struct in_addr ipt_addr;
+ int ipt_time;
+ } ipt_ta[1] __packed;
+ } ipt_timestamp __packed;
+} __packed;
+
+typedef struct __packed {
+ int x;
+} t;
+
+struct x {
+ char c;
+ long l;
+} __packed;
+
+struct y {
+ char c;
+ long l;
+};
+
+int a[sizeof(struct y) - sizeof(struct x) - 1];
Index: src/tests/util/xlint/lint1/d_shift_to_narrower_type.c
diff -u /dev/null src/tests/util/xlint/lint1/d_shift_to_narrower_type.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_shift_to_narrower_type.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,24 @@
+// Test that type shifts that result to narrower types don't produce warnings.
+
+void
+foo(void) {
+ unsigned long l = 100;
+ unsigned long long ll = 100;
+ unsigned int i = 100;
+ unsigned short s = 100;
+ unsigned char c = 1;
+
+ l = ll >> 32;
+// i = ll >> 31;
+ i = ll >> 32;
+ s = ll >> 48;
+ c = ll >> 56;
+ s = i >> 16;
+ c = i >> 24;
+ c = s >> 8;
+ (void)≪
+ (void)&l;
+ (void)&i;
+ (void)&s;
+ (void)&c;
+}
Index: src/tests/util/xlint/lint1/d_type_conv1.c
diff -u /dev/null src/tests/util/xlint/lint1/d_type_conv1.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_type_conv1.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,11 @@
+/* Flag information-losing type conversion in argument lists */
+
+int f(unsigned int);
+
+void
+should_fail()
+{
+ long long x = 20;
+
+ f(x);
+}
Index: src/tests/util/xlint/lint1/d_type_conv2.c
diff -u /dev/null src/tests/util/xlint/lint1/d_type_conv2.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_type_conv2.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,11 @@
+/* Flag information-losing type conversion in argument lists */
+
+int f(float);
+
+void
+should_fail()
+{
+ double x = 2.0;
+
+ f(x);
+}
Index: src/tests/util/xlint/lint1/d_type_conv3.c
diff -u /dev/null src/tests/util/xlint/lint1/d_type_conv3.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_type_conv3.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,10 @@
+/* Flag information-losing type conversion in argument lists */
+
+int f(unsigned int);
+
+void
+should_fail()
+{
+
+ f(0x7fffffffffffffffLL);
+}
Index: src/tests/util/xlint/lint1/d_zero_sized_arrays.c
diff -u /dev/null src/tests/util/xlint/lint1/d_zero_sized_arrays.c:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/d_zero_sized_arrays.c Sun Jul 18 10:11:01 2010
@@ -0,0 +1,3 @@
+struct foo {
+int a[0];
+};
Index: src/tests/util/xlint/lint1/t_integration.sh
diff -u /dev/null src/tests/util/xlint/lint1/t_integration.sh:1.1
--- /dev/null Sun Jul 18 10:11:01 2010
+++ src/tests/util/xlint/lint1/t_integration.sh Sun Jul 18 10:11:01 2010
@@ -0,0 +1,126 @@
+# $NetBSD: t_integration.sh,v 1.1 2010/07/18 10:11:01 jmmv Exp $
+#
+# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+LINT1=/usr/libexec/lint1
+
+Names=
+
+check_valid()
+{
+ atf_check -s exit:0 ${LINT1} -g -S "$(atf_get_srcdir)/$1" /dev/null
+}
+
+check_invalid()
+{
+ atf_check -s not-exit:0 -o ignore -e ignore ${LINT1} -g -S -w \
+ "$(atf_get_srcdir)/$1" /dev/null
+}
+
+test_case()
+{
+ local result="${1}"; shift
+ local name="${1}"; shift
+ local descr="${*}"
+
+ atf_test_case ${name}
+ eval "${name}_head() {
+ atf_set \"descr\" \"${descr}\";
+ }"
+ eval "${name}_body() {
+ ${result} d_${name}.c;
+ }"
+
+ Names="${Names} ${name}"
+}
+
+test_case check_valid c99_struct_init "Checks C99 struct initialization"
+test_case check_valid c99_union_init1 "Checks C99 union initialization"
+test_case check_valid c99_union_init2 "Checks C99 union initialization"
+test_case check_valid c99_union_init3 "Checks C99 union initialization"
+test_case check_valid c99_recursive_init "Checks C99 recursive struct/union" \
+ "initialization"
+test_case check_valid c9x_recursive_init "Checks C9X struct/union member" \
+ "init, with nested union and trailing member"
+test_case check_valid nested_structs "Checks nested structs"
+test_case check_valid packed_structs "Checks packed structs"
+
+test_case check_valid cast_init "Checks cast initialization"
+test_case check_valid cast_init2 "Checks cast initialization as the rhs of a" \
+ "- operand"
+test_case check_valid cast_lhs "Checks whether pointer casts are valid lhs" \
+ "lvalues"
+
+test_case check_valid gcc_func "Checks GCC __FUNCTION__"
+test_case check_valid c99_func "Checks C99 __func__"
+
+test_case check_valid gcc_variable_array_init "Checks GCC variable array" \
+ "initializers"
+test_case check_valid c9x_array_init "Checks C9X array initializers"
+test_case check_valid nolimit_init "Checks no limit initializers"
+test_case check_valid zero_sized_arrays "Checks zero sized arrays"
+
+test_case check_valid compound_literals1 "Checks compound literals"
+test_case check_valid compound_literals2 "Checks compound literals"
+test_case check_valid gcc_compound_statements1 "Checks GCC compound statements"
+test_case check_valid gcc_compound_statements2 "Checks GCC compound" \
+ "statements with non-expressions"
+test_case check_valid gcc_compound_statements3 "Checks GCC compound" \
+ "statements with void type"
+
+test_case check_valid cvt_in_ternary "Checks CVT nodes handling in ?" \
+ "operator"
+test_case check_valid ellipsis_in_switch "Checks ellipsis in switch()"
+test_case check_valid c99_complex_num "Checks C99 complex numbers"
+test_case check_valid c99_for_loops "Checks C99 for loops"
+test_case check_valid alignof "Checks __alignof__"
+test_case check_valid shift_to_narrower_type "Checks that type shifts that" \
+ "result in narrower types do not produce warnings"
+
+test_case check_invalid constant_conv1 "Checks failing on information-losing" \
+ "constant conversion in argument lists"
+test_case check_invalid constant_conv2 "Checks failing on information-losing" \
+ "constant conversion in argument lists"
+
+test_case check_invalid type_conv1 "Checks failing on information-losing" \
+ "type conversion in argument lists"
+test_case check_invalid type_conv2 "Checks failing on information-losing" \
+ "type conversion in argument lists"
+test_case check_invalid type_conv3 "Checks failing on information-losing" \
+ "type conversion in argument lists"
+
+test_case check_invalid incorrect_array_size "Checks failing on incorrect" \
+ "array sizes"
+
+test_case check_invalid long_double_int "Checks for confusion of 'long" \
+ "double' with 'long int'; PR 39639"
+
+atf_init_test_cases()
+{
+ for name in ${Names}; do
+ atf_add_test_case ${name}
+ done
+}