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: test emitting of symbol informatio...



details:   https://anonhg.NetBSD.org/src/rev/61cd656a1b2a
branches:  trunk
changeset: 961424:61cd656a1b2a
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Apr 18 20:02:56 2021 +0000

description:
lint: test emitting of symbol information in the .ln files

Even though the new test is quite large, it didn't find any bugs in the
code.  The only thing I'm unsure about is why static functions are
exported as well, since they are supposed to be local to the translation
unit.

diffstat:

 distrib/sets/lists/tests/mi                |    4 +-
 tests/usr.bin/xlint/lint1/Makefile         |    5 +-
 tests/usr.bin/xlint/lint1/emit.c           |  146 +++++++++++++++++++++++++++++
 tests/usr.bin/xlint/lint1/emit.exp         |    3 +
 tests/usr.bin/xlint/lint1/emit.ln          |   52 ++++++++++
 tests/usr.bin/xlint/lint1/t_integration.sh |   19 +++-
 usr.bin/xlint/lint1/emit1.c                |   25 ++--
 7 files changed, 236 insertions(+), 18 deletions(-)

diffs (truncated from 361 to 300 lines):

diff -r 0e407971dacf -r 61cd656a1b2a distrib/sets/lists/tests/mi
--- a/distrib/sets/lists/tests/mi       Sun Apr 18 19:56:09 2021 +0000
+++ b/distrib/sets/lists/tests/mi       Sun Apr 18 20:02:56 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1042 2021/04/17 20:36:17 rillig Exp $
+# $NetBSD: mi,v 1.1043 2021/04/18 20:02:56 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -6184,6 +6184,8 @@
 ./usr/tests/usr.bin/xlint/lint1/d_typefun.c                    tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_typename_as_var.c            tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_zero_sized_arrays.c          tests-usr.bin-tests     compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/emit.c                         tests-usr.bin-tests     compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/emit.exp                       tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/feat_stacktrace.c              tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/feat_stacktrace.exp            tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/gcc_init_compound_literal.c    tests-usr.bin-tests     compattestfile,atf
diff -r 0e407971dacf -r 61cd656a1b2a tests/usr.bin/xlint/lint1/Makefile
--- a/tests/usr.bin/xlint/lint1/Makefile        Sun Apr 18 19:56:09 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/Makefile        Sun Apr 18 20:02:56 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.43 2021/04/17 20:36:17 rillig Exp $
+# $NetBSD: Makefile,v 1.44 2021/04/18 20:02:56 rillig Exp $
 
 NOMAN=         # defined
 MAX_MESSAGE=   343             # see lint1/err.c
@@ -100,6 +100,9 @@
 FILES+=                d_typefun.c
 FILES+=                d_typename_as_var.c
 FILES+=                d_zero_sized_arrays.c
+FILES+=                emit.c
+FILES+=                emit.exp
+FILES+=                emit.ln
 FILES+=                feat_stacktrace.c
 FILES+=                feat_stacktrace.exp
 FILES+=                gcc_init_compound_literal.c
diff -r 0e407971dacf -r 61cd656a1b2a tests/usr.bin/xlint/lint1/emit.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/emit.c  Sun Apr 18 20:02:56 2021 +0000
@@ -0,0 +1,146 @@
+/*     $NetBSD: emit.c,v 1.1 2021/04/18 20:02:56 rillig Exp $  */
+# 3 "emit.c"
+
+/*
+ * Test the symbol information that lint1 writes to a .ln file.  Using this
+ * symbol information, lint2 later checks that the symbols are used
+ * consistently across different translation units.
+ */
+
+// omit the option '-g' to avoid having the GCC builtins in the .ln file.
+/* lint1-flags: -Sw */
+
+/*
+ * Define some derived types.
+ */
+
+struct struct_tag {
+       int member;
+};
+
+typedef struct {
+       int member;
+} struct_typedef;
+
+union union_tag {
+       int member;
+};
+
+typedef union {
+       int member;
+} union_typedef;
+
+enum enum_tag {
+       enum_tag_constant
+};
+
+typedef enum {
+       enum_typedef_constant
+} enum_typedef;
+
+/*
+ * Variable declarations using the basic types (C99 6.2.5p14).
+ *
+ * Last synced with function outtype from emit1.c 1.43.
+ */
+
+extern _Bool                   extern__Bool;
+extern float _Complex          extern__Complex_float;
+extern double _Complex         extern__Complex_double;
+extern long double _Complex    extern__Complex_long_double;
+extern char                    extern_char;
+extern signed char             extern_signed_char;
+extern unsigned char           extern_unsigned_char;
+extern short                   extern_short;
+extern signed short            extern_signed_short;
+extern unsigned short          extern_unsigned_short;
+extern int                     extern_int;
+extern signed int              extern_signed_int;
+extern unsigned int            extern_unsigned_int;
+extern long                    extern_long;
+extern signed long             extern_signed_long;
+extern unsigned long           extern_unsigned_long;
+extern long long               extern_long_long;
+extern signed long long                extern_signed_long_long;
+extern unsigned long long      extern_unsigned_long_long;
+extern float                   extern_float;
+extern double                  extern_double;
+extern long double             extern_long_double;
+
+/*
+ * Variable declarations using derived types (C99 6.2.5p20).
+ */
+
+extern void *                  extern_pointer_to_void;
+extern int                     extern_array_5_of_int[5];
+
+/*
+ * Type tags are written to the .ln file as 'T kind length name', where 'kind'
+ * is either 1, 2 or 3.  This is confusing at first since in 'T110struct_tag',
+ * the apparent number 110 is to be read as 'tag kind 1, length 10'.
+ */
+extern struct struct_tag       extern_struct_tag;
+extern struct_typedef          extern_struct_typedef;
+extern union union_tag         extern_union_tag;
+extern union_typedef           extern_union_typedef;
+extern enum enum_tag           extern_enum_tag;
+extern enum_typedef            extern_enum_typedef;
+
+extern struct {
+       int member;
+}                              extern_anonymous_struct;
+extern union {
+       int member;
+}                              extern_anonymous_union;
+extern enum {
+       anonymous_enum_constant
+}                              extern_anonymous_enum;
+
+/*
+ * Variable definitions.
+ *
+ * Static variables are not recorded in the .ln file.
+ */
+
+extern int                     declared_int;
+int                            defined_int;
+static int                     static_int;             /* expect: unused */
+
+/*
+ * Type qualifiers.
+ */
+
+extern const int               extern_const_int;
+extern volatile int            extern_volatile_int;
+extern const volatile int      extern_const_volatile_int;
+
+/*
+ * Functions.
+ */
+
+extern void return_void_unknown_parameters();
+extern /* implicit int */ return_implicit_int_unknown_parameters();
+
+/* For function declarations, the keyword 'extern' is optional. */
+extern void extern_return_void_no_parameters(void);
+/* implicit extern */ void return_void_no_parameters(void);
+static void static_return_void_no_parameters(void);    /* expect: declared */
+
+void taking_int(int);
+/* The 'const' parameter does not make a difference. */
+void taking_const_int(const int);
+void taking_int_double_bool(int, double, _Bool);
+void taking_struct_union_enum_tags(struct struct_tag, union union_tag,
+    enum enum_tag);
+void taking_struct_union_enum_typedefs(struct_typedef, union_typedef,
+    enum_typedef);
+
+void taking_varargs(const char *, ...);
+
+/*
+ * This function does not affect anything outside this translation unit.
+ * Naively there is no need to record this function in the .ln file, but it
+ * is nevertheless recorded.  There's probably a good reason for recording
+ * it.
+ */
+static int static_function(void);                      /* expect: declared */
diff -r 0e407971dacf -r 61cd656a1b2a tests/usr.bin/xlint/lint1/emit.exp
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/emit.exp        Sun Apr 18 20:02:56 2021 +0000
@@ -0,0 +1,3 @@
+emit.c(107): warning: static variable static_int unused [226]
+emit.c(127): warning: static function static_return_void_no_parameters declared but not defined [290]
+emit.c(146): warning: static function static_function declared but not defined [290]
diff -r 0e407971dacf -r 61cd656a1b2a tests/usr.bin/xlint/lint1/emit.ln
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/emit.ln Sun Apr 18 20:02:56 2021 +0000
@@ -0,0 +1,52 @@
+0semit.c
+Semit.c
+47d0.47e12extern__BoolB
+48d0.48e21extern__Complex_floatsX
+49d0.49e22extern__Complex_doubleX
+50d0.50e27extern__Complex_long_doublelX
+51d0.51e11extern_charC
+52d0.52e18extern_signed_charsC
+53d0.53e20extern_unsigned_charuC
+54d0.54e12extern_shortS
+55d0.55e19extern_signed_shortS
+56d0.56e21extern_unsigned_shortuS
+57d0.57e10extern_intI
+58d0.58e17extern_signed_intI
+59d0.59e19extern_unsigned_intuI
+60d0.60e11extern_longL
+61d0.61e18extern_signed_longL
+62d0.62e20extern_unsigned_longuL
+63d0.63e16extern_long_longQ
+64d0.64e23extern_signed_long_longQ
+65d0.65e25extern_unsigned_long_longuQ
+66d0.66e12extern_floatsD
+67d0.67e13extern_doubleD
+68d0.68e18extern_long_doublelD
+74d0.74e22extern_pointer_to_voidPV
+75d0.75e21extern_array_5_of_intA5I
+82d0.82e17extern_struct_tagsT110struct_tag
+83d0.83e21extern_struct_typedefsT214struct_typedef
+84d0.84e16extern_union_taguT19union_tag
+85d0.85e20extern_union_typedefuT213union_typedef
+86d0.86e15extern_enum_tageT18enum_tag
+87d0.87e19extern_enum_typedefeT212enum_typedef
+91d0.91e23extern_anonymous_structsT389.0.0
+94d0.94e22extern_anonymous_unionuT392.0.0
+97d0.97e21extern_anonymous_enumeT395.0.0
+105d0.105e12declared_intI
+106d0.106t11defined_intI
+113d0.113e16extern_const_intcI
+114d0.114e19extern_volatile_intvI
+115d0.115e25extern_const_volatile_intcvI
+121d0.121e30return_void_unknown_parametersFV
+122d0.122e38return_implicit_int_unknown_parametersFI
+125d0.125e32extern_return_void_no_parametersF0V
+126d0.126e25return_void_no_parametersF0V
+127d0.127es32static_return_void_no_parametersF0V
+129d0.129e10taking_intF1IV
+131d0.131e16taking_const_intF1cIV
+132d0.132e22taking_int_double_boolF3IDBV
+134d0.133e29taking_struct_union_enum_tagsF3sT110struct_taguT19union_tageT18enum_tagV
+136d0.135e33taking_struct_union_enum_typedefsF3sT214struct_typedefuT213union_typedefeT212enum_typedefV
+138d0.138e14taking_varargsF2PcCEV
+146d0.146es15static_functionF0I
diff -r 0e407971dacf -r 61cd656a1b2a tests/usr.bin/xlint/lint1/t_integration.sh
--- a/tests/usr.bin/xlint/lint1/t_integration.sh        Sun Apr 18 19:56:09 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/t_integration.sh        Sun Apr 18 20:02:56 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: t_integration.sh,v 1.42 2021/04/17 20:36:17 rillig Exp $
+# $NetBSD: t_integration.sh,v 1.43 2021/04/18 20:02:56 rillig Exp $
 #
 # Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -57,16 +57,27 @@
 {
        local src="$(atf_get_srcdir)/$1"
        local exp="${src%.c}.exp"
+       local src_ln="${src%.c}.ln"
+       local wrk_ln="${1%.c}.ln"
        local flags="$(extract_flags "${src}")"
 
+       if [ ! -f "${src_ln}" ]; then
+               src_ln="/dev/null"
+               wrk_ln="/dev/null"
+       fi
+
        if [ -f "${exp}" ]; then
                # shellcheck disable=SC2086
                atf_check -s not-exit:0 -o "file:${exp}" -e empty \
-                   ${LINT1} ${flags} "${src}" /dev/null
+                   ${LINT1} ${flags} "${src}" "${wrk_ln}"
        else
                # shellcheck disable=SC2086
                atf_check -s exit:0 \
-                   ${LINT1} ${flags} "${src}" /dev/null
+                   ${LINT1} ${flags} "${src}" "${wrk_ln}"
+       fi
+
+       if [ "${src_ln}" != "/dev/null" ]; then
+               atf_check -o "file:${src_ln}" cat "${wrk_ln}"
        fi
 }
 
@@ -166,6 +177,8 @@
 test_case d_incorrect_array_size
 test_case d_long_double_int
 
+test_case emit
+
 test_case gcc_init_compound_literal
 
 test_case op_colon
diff -r 0e407971dacf -r 61cd656a1b2a usr.bin/xlint/lint1/emit1.c
--- a/usr.bin/xlint/lint1/emit1.c       Sun Apr 18 19:56:09 2021 +0000



Home | Main Index | Thread Index | Old Index