xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_115.c (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
1 /*	$NetBSD: msg_115.c,v 1.8 2021/08/14 12:46:24 rillig Exp $	*/
2 # 3 "msg_115.c"
3 
4 // Test for message: %soperand of '%s' must be modifiable lvalue [115]
5 
6 void
7 example(const int *const_ptr)
8 {
9 
10 	*const_ptr = 3;		/* expect: 115 */
11 	*const_ptr += 1;	/* expect: 115 */
12 	*const_ptr -= 4;	/* expect: 115 */
13 	*const_ptr *= 1;	/* expect: 115 */
14 	*const_ptr /= 5;	/* expect: 115 */
15 	*const_ptr %= 9;	/* expect: 115 */
16 	(*const_ptr)++;		/* expect: 115 */
17 }
18 
19 typedef struct {
20 	int const member;
21 } const_member;
22 
23 void take_const_member(const_member);
24 
25 /* see typeok_assign, has_constant_member */
26 const_member
27 initialize_const_struct_member(void)
28 {
29 	/* In a simple initialization, const members can be assigned. */
30 	const_member cm1 = (const_member) { 12345 };
31 
32 	if (cm1.member != 0)
33 		/* In a function call, const members can be assigned. */
34 		take_const_member(cm1);
35 
36 	struct {
37 		const_member member;
38 	} cm2 = {
39 	    /* In a nested initialization, const members can be assigned. */
40 	    cm1,
41 	};
42 	if (cm2.member.member != 0) {
43 	}
44 
45 	/* In a return statement, const members can be assigned. */
46 	return cm1;
47 }
48