annotate gcc/testsuite/gcc.dg/pr46921.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* PR c/46921 lost side effect when struct initializer expr uses comma
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 operator */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 /* { dg-do run } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 /* { dg-options "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 extern int printf(const char *, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 extern void abort (void);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 typedef struct __uws_0 { } uw_unit;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 uw_unit uw_unit_v = {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 struct __uws_1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 struct __uws_0 __uwf_1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 struct __uws_1* __uwf_2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 static int left_hand_eval = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 foo (const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 ++left_hand_eval;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 printf("%s", s);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 main ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 struct __uws_1 tmp = {(foo("Inner\n"), uw_unit_v)};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 printf("Outer\n");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 /* left hand expression in comma operator initializer must always be
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 evaluated if there are side effects. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 if (!left_hand_eval)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 }