t_xlint.sh revision 1.1
11.1Srillig# $NetBSD: t_xlint.sh,v 1.1 2023/01/15 23:18:05 rillig Exp $
21.1Srillig#
31.1Srillig# Copyright (c) 2023 The NetBSD Foundation, Inc.
41.1Srillig# All rights reserved.
51.1Srillig#
61.1Srillig# Redistribution and use in source and binary forms, with or without
71.1Srillig# modification, are permitted provided that the following conditions
81.1Srillig# are met:
91.1Srillig# 1. Redistributions of source code must retain the above copyright
101.1Srillig#    notice, this list of conditions and the following disclaimer.
111.1Srillig# 2. Redistributions in binary form must reproduce the above copyright
121.1Srillig#    notice, this list of conditions and the following disclaimer in the
131.1Srillig#    documentation and/or other materials provided with the distribution.
141.1Srillig#
151.1Srillig# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
161.1Srillig# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
171.1Srillig# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
181.1Srillig# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
191.1Srillig# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
201.1Srillig# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
211.1Srillig# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
221.1Srillig# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
231.1Srillig# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
241.1Srillig# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
251.1Srillig# POSSIBILITY OF SUCH DAMAGE.
261.1Srillig#
271.1Srillig
281.1Srillig: ${lint:='/usr/bin/lint'}
291.1Srillig
301.1Srilligrun_lint1_error_head()
311.1Srillig{
321.1Srillig	:
331.1Srillig}
341.1Srillig
351.1Srilligrun_lint1_error_body()
361.1Srillig{
371.1Srillig	cat <<-EOF >input.c || atf_fail 'prepare input.c'
381.1Srillig		#include <stdbool.h>
391.1Srillig
401.1Srillig		bool
411.1Srillig		return_true(void)
421.1Srillig		{
431.1Srillig			return 1;
441.1Srillig		}
451.1Srillig	EOF
461.1Srillig
471.1Srillig	atf_check \
481.1Srillig	    -s 'exit:1' \
491.1Srillig	    -o "inline:input.c(6): error: function has return type '_Bool' but returns 'int' [211]\n" \
501.1Srillig	    "$lint" -aabceghiprSTxz input.c
511.1Srillig
521.1Srillig	# In case of an error, no output file is written.
531.1Srillig	atf_check \
541.1Srillig	    -s 'exit:1' \
551.1Srillig	    test -f input.ln
561.1Srillig}
571.1Srillig
581.1Srillig
591.1Srilligrun_lint1_warning_head()
601.1Srillig{
611.1Srillig	:
621.1Srillig}
631.1Srillig
641.1Srilligrun_lint1_warning_body()
651.1Srillig{
661.1Srillig	cat <<-EOF >input.c || atf_fail 'prepare input.c'
671.1Srillig		static int number;
681.1Srillig
691.1Srillig		const void *
701.1Srillig		function(int a, const char *s)
711.1Srillig		{
721.1Srillig			return s + a;
731.1Srillig		}
741.1Srillig	EOF
751.1Srillig	cat <<-EOF >input.exp || atf_fail 'prepare input.exp'
761.1Srillig		0sinput.c
771.1Srillig		Sinput.c
781.1Srillig		1s<built-in>
791.1Srillig		2s<command-line>
801.1Srillig		4d0.4dr8functionF2IPcCPcV
811.1Srillig	EOF
821.1Srillig
831.1Srillig	atf_check \
841.1Srillig	    -o "inline:input.c(1): warning: static variable 'number' unused [226]\n" \
851.1Srillig	    "$lint" -aabceghiprSTxz input.c
861.1Srillig	atf_check \
871.1Srillig	    -o 'file:input.exp' \
881.1Srillig	    cat input.ln
891.1Srillig}
901.1Srillig
911.1Srilligrun_lint2_head()
921.1Srillig{
931.1Srillig	:
941.1Srillig}
951.1Srillig
961.1Srilligrun_lint2_body()
971.1Srillig{
981.1Srillig	cat <<-EOF >input.ln || atf_fail 'prepare input.ln'
991.1Srillig		0sinput.c
1001.1Srillig		Sinput.c
1011.1Srillig		1s<built-in>
1021.1Srillig		2s<command-line>
1031.1Srillig		4d0.4dr8functionF2IPcCPcV
1041.1Srillig	EOF
1051.1Srillig
1061.1Srillig	# Most of the command line options are not relevant for lint2,
1071.1Srillig	# so they are effectively ignored.  The option '-i' is absent.
1081.1Srillig	atf_check \
1091.1Srillig	    -o 'inline:function defined( input.c(4) ), but never used\n' \
1101.1Srillig	    -e 'inline:lint: cannot find llib-lc.ln\n' \
1111.1Srillig	    "$lint" -aabceghprSTxz input.ln
1121.1Srillig}
1131.1Srillig
1141.1Srillig
1151.1Srilligatf_init_test_cases()
1161.1Srillig{
1171.1Srillig	atf_add_test_case 'run_lint1_error'
1181.1Srillig	atf_add_test_case 'run_lint1_warning'
1191.1Srillig	atf_add_test_case 'run_lint2'
1201.1Srillig}
121