blob: 326985eed506255bce33fa0f3682b7975f3f39c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/* PR c++/114525 */
/* { dg-do run } */
struct Foo {
int x;
};
Foo& get (Foo& v) {
return v;
}
int main () {
bool cond = true;
/* Testcase from PR; v.x would wrongly remain equal to 1. */
Foo v_ko;
v_ko.x = 1;
(cond ? get (v_ko) : get (v_ko)).*(&Foo::x) = 2;
if (v_ko.x != 2)
__builtin_abort ();
/* Those would already work, i.e. x be changed to 2. */
Foo v_ok_1;
v_ok_1.x = 1;
(cond ? get (v_ok_1) : get (v_ok_1)).x = 2;
if (v_ok_1.x != 2)
__builtin_abort ();
Foo v_ok_2;
v_ok_2.x = 1;
get (v_ok_2).*(&Foo::x) = 2;
if (v_ok_2.x != 2)
__builtin_abort ();
return 0;
}
|