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