Home | History | Annotate | Line # | Download | only in lint1
msg_115.c revision 1.8
      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