Module Name:    src
Committed By:   rillig
Date:           Sun Nov 28 09:16:46 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint2: t_lint2.sh
        src/usr.bin/xlint/lint2: read.c

Log Message:
lint2: in case of parse errors, output the offending line

This provides more of a clue than a simple '(not alnum or _: )',
especially in the output of build.sh.

While here, change the format of the error message to the standard
'%s:%d'. Since these are internal errors, they are not supposed to occur
often, so no need to change error(1).


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/tests/usr.bin/xlint/lint2/t_lint2.sh
cvs rdiff -u -r1.70 -r1.71 src/usr.bin/xlint/lint2/read.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/xlint/lint2/t_lint2.sh
diff -u src/tests/usr.bin/xlint/lint2/t_lint2.sh:1.9 src/tests/usr.bin/xlint/lint2/t_lint2.sh:1.10
--- src/tests/usr.bin/xlint/lint2/t_lint2.sh:1.9	Sun Nov 28 09:10:36 2021
+++ src/tests/usr.bin/xlint/lint2/t_lint2.sh	Sun Nov 28 09:16:46 2021
@@ -1,4 +1,4 @@
-# $NetBSD: t_lint2.sh,v 1.9 2021/11/28 09:10:36 rillig Exp $
+# $NetBSD: t_lint2.sh,v 1.10 2021/11/28 09:16:46 rillig Exp $
 #
 # Copyright (c) 2021 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -76,6 +76,7 @@ emit_lp64_body()
 	std_emit_body 'emit_lp64'
 }
 
+# usage: test_error input message-regex [input-regex]
 test_error()
 {
 	printf '%s\n' \
@@ -86,7 +87,8 @@ test_error()
 	    "$1" \
 	    > 'input.ln'
 
-	atf_check -s 'exit:1' -e "match:input file error: input\\.ln,3 \($2\)\$" \
+	atf_check -s 'exit:1' \
+	    -e "match:error: input\\.ln:3: $2 \\(for '${3-$1}'\\)\$" \
 	    "$lint2" 'input.ln'
 }
 
@@ -141,9 +143,9 @@ error_cases_body()
 	test_error '0c0.0s2"'		'trailing data: '
 	test_error '0c0.0s2"%'		'missing closing quote'
 	# shellcheck disable=SC1003
-	test_error '0c0.0s2"\'		'missing after \\'
+	test_error '0c0.0s2"\'		'missing after \\'	'0c0\.0s2"\\'
 	# shellcheck disable=SC1003
-	test_error '0c0.0s2"%\'		'missing after \\'
+	test_error '0c0.0s2"%\'		'missing after \\'	'0c0\.0s2"%\\'
 
 	# declarations and definitions
 	test_error '0d0'		'bad line number'
@@ -168,6 +170,7 @@ error_cases_body()
 	test_error '0u0.0'		'bad delim '
 	test_error '0u0.0_'		'bad delim _'
 	test_error '0u0.0x'		'not a number: '
+
 	# trailing garbage is not detected
 	test_error_ignored '0u0.0x3var_'
 }

Index: src/usr.bin/xlint/lint2/read.c
diff -u src/usr.bin/xlint/lint2/read.c:1.70 src/usr.bin/xlint/lint2/read.c:1.71
--- src/usr.bin/xlint/lint2/read.c:1.70	Sun Nov 28 08:21:49 2021
+++ src/usr.bin/xlint/lint2/read.c	Sun Nov 28 09:16:46 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: read.c,v 1.70 2021/11/28 08:21:49 rillig Exp $ */
+/* $NetBSD: read.c,v 1.71 2021/11/28 09:16:46 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: read.c,v 1.70 2021/11/28 08:21:49 rillig Exp $");
+__RCSID("$NetBSD: read.c,v 1.71 2021/11/28 09:16:46 rillig Exp $");
 #endif
 
 #include <ctype.h>
@@ -90,6 +90,7 @@ static	hte_t **renametab;
 /* index of current C source file (as specified at the command line) */
 static	int	csrcfile;
 
+static	const char *readfile_line;
 
 static	void	inperr(const char *, ...)
     __attribute__((format(printf, 1, 2), noreturn));
@@ -228,11 +229,13 @@ readfile(const char *name)
 		err(1, "cannot open %s", name);
 
 	while ((line = fgetln(inp, &len)) != NULL) {
+		readfile_line = line;
 		if (len == 0 || line[len - 1] != '\n')
 			inperr("%s", &line[len - 1]);
 		line[len - 1] = '\0';
 
 		read_ln_line(line, len);
+		readfile_line = NULL;
 	}
 
 	_destroyhash(renametab);
@@ -254,8 +257,8 @@ inperr(const char *fmt, ...)
 	(void)vsnprintf(buf, sizeof(buf), fmt, ap);
 	va_end(ap);
 
-	errx(1, "input file error: %s,%zu (%s)",
-	    fnames[srcfile], flines[srcfile], buf);
+	errx(1, "error: %s:%zu: %s (for '%s')",
+	    fnames[srcfile], flines[srcfile], buf, readfile_line);
 }
 
 /*

Reply via email to