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