xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_163.c (revision e6298b924c5ba98f3a22919b56dab04a87cdbb1c)
1*e6298b92Srillig /*	$NetBSD: msg_163.c,v 1.5 2023/07/07 19:45:22 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_163.c"
3a0a15c14Srillig 
4a0a15c14Srillig // Test for message: a cast does not yield an lvalue [163]
5a0a15c14Srillig 
6*e6298b92Srillig /* lint1-extra-flags: -X 351 */
7*e6298b92Srillig 
82ba3ae8cSrillig void
example(char * p,int i)92ba3ae8cSrillig example(char *p, int i)
102ba3ae8cSrillig {
112ba3ae8cSrillig 	p++;
12eb81ba22Srillig 
13eb81ba22Srillig 	/*
14eb81ba22Srillig 	 * Using a cast as an lvalue had been a GCC extension until 3.4.
15eb81ba22Srillig 	 * It was removed in GCC 4.0.
16eb81ba22Srillig 	 *
17eb81ba22Srillig 	 * https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Lvalues.html#Lvalues
18eb81ba22Srillig 	 * https://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/index.html#toc_C-Extensions
19eb81ba22Srillig 	 */
20eb81ba22Srillig 	/* expect+2: error: a cast does not yield an lvalue [163] */
21eb81ba22Srillig 	/* expect+1: error: operand of 'x++' must be lvalue [114] */
22eb81ba22Srillig 	((char *)p)++;
23eb81ba22Srillig 
242ba3ae8cSrillig 	i++;
25eb81ba22Srillig 
26eb81ba22Srillig 	/* expect+2: error: a cast does not yield an lvalue [163] */
27eb81ba22Srillig 	/* expect+1: error: operand of 'x++' must be lvalue [114] */
28eb81ba22Srillig 	((int)i)++;
292ba3ae8cSrillig }
30