xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_077.c (revision 139c6401cd4c34a37cefc7f82c6f3fc0ff90ec8e)
1*139c6401Srillig /*	$NetBSD: msg_077.c,v 1.9 2024/02/03 20:10:10 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_077.c"
3a0a15c14Srillig 
4a194378bSrillig /* Test for message: bad octal digit '%c' [77] */
5a0a15c14Srillig 
6b2baa501Srillig /* lint1-flags: -tw -X 351 */
70b52e712Srillig 
8a194378bSrillig /* expect+1: warning: bad octal digit '8' [77] */
9aba9ec72Srillig char single_digit = '\8';
100b52e712Srillig 
110b52e712Srillig /*
120b52e712Srillig  * Before lex.c 1.47 from 2021-06-29, lint intended to detect a "bad octal
130b52e712Srillig  * digit" following good octal digits, but the corresponding code had an
140b52e712Srillig  * unsatisfiable guard clause.
150b52e712Srillig  *
160b52e712Srillig  * The C Reference Manual 1978, 2.4.3 "Character constants" does not mention
170b52e712Srillig  * non-octal digits, therefore this code must have been due to a particular
180b52e712Srillig  * C compiler's interpretation.  It's even wrong according to the Reference
190b52e712Srillig  * Manual to interpret '\088' as anything else than a malformed character
200b52e712Srillig  * literal.
210b52e712Srillig  *
220b52e712Srillig  * That code has been removed since nobody runs lint in traditional C mode
230b52e712Srillig  * anyway.
240b52e712Srillig  * https://mail-index.netbsd.org/tech-toolchain/2021/03/16/msg003933.html
250b52e712Srillig  */
26*139c6401Srillig /* expect+2: warning: short octal escape '\0' followed by digit '8' [356] */
27c83f7defSrillig /* expect+1: warning: multi-character character constant [294] */
280b52e712Srillig char several_digits = '\08';
29