OSDN Git Service

2012-01-30 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / c-c++-common / simulate-thread / bitfields-3.c
1 /* { dg-do link } */
2 /* { dg-options "--param allow-store-data-races=0" } */
3 /* { dg-final { simulate-thread } } */
4
5 #include <stdio.h>
6 #include "../../gcc.dg/simulate-thread/simulate-thread.h"
7
8 /* Store into <c> should not clobber <d>.  */
9
10 struct bits
11 {
12   char a;
13   int b:7;
14   int c:9;
15   unsigned char d;
16 } var;
17
18 static int global = 0;
19
20 void simulate_thread_other_threads()
21 {
22   global++;
23   var.d = global;
24 }
25
26 int simulate_thread_step_verify()
27 {
28   if (var.d != global)
29     {
30       printf("FAIL: invalid intermediate result\n");
31       return 1;
32     }
33   return 0;
34 }
35
36 int simulate_thread_final_verify()
37 {
38   if (var.c != 5)
39     {
40       printf("FAIL: invalid final result\n");
41       return 1;
42     }
43   return 0;
44 }
45
46 __attribute__((noinline))
47 void update_c(struct bits *p, int val) 
48 {
49     p -> c = val;
50 }
51
52 __attribute__((noinline))
53 void simulate_thread_main()
54 {
55   update_c(&var, 5);
56 }
57
58 int main()
59 {
60   simulate_thread_main();
61   simulate_thread_done();
62   return 0;
63 }