pr77285-2.C: Require tls_native support.
[gcc.git] / gcc / testsuite / g++.dg / pr48484.C
1 /* { dg-do compile } */
2 /* { dg-options "-O -finline-functions -finline-small-functions -Wuninitialized" } */
3 /* { dg-add-options bind_pic_locally } */
4
5 struct SQObjectPtr
6 {
7 int _type;
8 SQObjectPtr operator = (long);
9 };
10 struct SQObjectPtrVec
11 {
12 SQObjectPtr fff (unsigned);
13 SQObjectPtr *_vals;
14 };
15
16 struct SQInstruction
17 {
18 int _arg1;
19 unsigned op;
20 unsigned _arg0;
21 unsigned _arg2;
22 };
23 struct SQVM
24 {
25 struct CallInfo
26 {
27 SQInstruction *_ip;
28 };
29 bool
30 Execute (SQObjectPtr &, long, long, long, SQObjectPtr &, unsigned, int);
31 bool
32 FOREACH_OP
33 (SQObjectPtr
34 &, SQObjectPtr &, SQObjectPtr &, SQObjectPtr &, long, int, int &);
35 SQObjectPtrVec _stack;
36 CallInfo *ci;
37 long _nnativecalls;
38 bool ShouldSuspend ();
39 };
40 struct AutoDec
41 {
42 AutoDec (long *);
43 ~AutoDec ();
44 };
45 bool
46 SQVM::FOREACH_OP
47 (SQObjectPtr
48 &
49 o1,
50 SQObjectPtr & o2, SQObjectPtr &, SQObjectPtr & o4, long, int, int &jump)
51 {
52 long
53 nrefidx = 0;
54 switch (o1._type)
55 {
56 case 0x02000000:
57 o4 = nrefidx;
58 jump = 1;
59 return true;
60 case 0x00000080:
61 {
62 long
63 idx = 10;
64 o2 = idx;
65 jump = 0;
66 }
67 }
68
69 return false;
70 }
71
72 bool
73 SQVM::Execute
74 (SQObjectPtr &, long, long, long, SQObjectPtr &, unsigned, int)
75 {
76 AutoDec
77 ad (&_nnativecalls);
78 for (;;)
79 {
80 if (ShouldSuspend ())
81 return true;
82 SQInstruction
83 _i_ = *ci->_ip;
84 switch (_i_.op)
85 {
86 case 0:
87 {
88 int
89 tojump;
90
91 FOREACH_OP
92 (_stack._vals
93 [_i_._arg0],
94 _stack._vals
95 [_i_._arg2],
96 _stack._vals
97 [_i_._arg2],
98 _stack._vals[_i_._arg2], _i_._arg2, _i_._arg1, tojump);
99
100 ci += tojump; /* { dg-warning "uninitialized" "warning" } */
101 }
102 case 1:
103 _stack.fff (_i_._arg1);
104 }
105 }
106
107 return true;
108 }