aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/pr48484.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/pr48484.C')
-rw-r--r--gcc/testsuite/g++.dg/pr48484.C105
1 files changed, 105 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/pr48484.C b/gcc/testsuite/g++.dg/pr48484.C
new file mode 100644
index 0000000..3f17f39
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr48484.C
@@ -0,0 +1,105 @@
+/* { dg-do compile } */
+/* { dg-options "-O -finline-functions -finline-small-functions -Wuninitialized" } */
+
+
+struct SQObjectPtr
+{
+ int _type;
+ SQObjectPtr operator = (long);
+};
+struct SQObjectPtrVec
+{
+ SQObjectPtr fff (unsigned);
+ SQObjectPtr *_vals;
+};
+
+struct SQInstruction
+{
+ int _arg1;
+ unsigned op;
+ unsigned _arg0;
+ unsigned _arg2;
+};
+struct SQVM
+{
+ struct CallInfo
+ {
+ SQInstruction *_ip;
+ };
+ bool
+ Execute (SQObjectPtr &, long, long, long, SQObjectPtr &, unsigned, int);
+ bool
+ FOREACH_OP
+ (SQObjectPtr
+ &, SQObjectPtr &, SQObjectPtr &, SQObjectPtr &, long, int, int &);
+ SQObjectPtrVec _stack;
+ CallInfo *ci;
+ long _nnativecalls;
+ bool ShouldSuspend ();
+};
+struct AutoDec
+{
+ AutoDec (long *);
+ ~AutoDec ();
+};
+bool
+ SQVM::FOREACH_OP
+ (SQObjectPtr
+ &
+ o1,
+ SQObjectPtr & o2, SQObjectPtr &, SQObjectPtr & o4, long, int, int &jump)
+{
+ long
+ nrefidx = 0;
+ switch (o1._type)
+ {
+ case 0x02000000:
+ o4 = nrefidx;
+ jump = 1;
+ return true;
+ case 0x00000080:
+ {
+ long
+ idx = 10;
+ o2 = idx;
+ jump = 0;
+ }
+ }
+}
+
+bool
+ SQVM::Execute
+ (SQObjectPtr &, long, long, long, SQObjectPtr &, unsigned, int)
+{
+ AutoDec
+ ad (&_nnativecalls);
+ for (;;)
+ {
+ if (ShouldSuspend ())
+ return true;
+ SQInstruction
+ _i_ = *ci->_ip;
+ switch (_i_.op)
+ {
+ case 0:
+ {
+ int
+ tojump;
+
+ FOREACH_OP
+ (_stack._vals
+ [_i_._arg0],
+ _stack._vals
+ [_i_._arg2],
+ _stack._vals
+ [_i_._arg2],
+ _stack._vals[_i_._arg2], _i_._arg2, _i_._arg1, tojump);
+
+ ci += tojump; /* { dg-warning "uninitialized" "warning" } */
+ }
+ case 1:
+ _stack.fff (_i_._arg1);
+ }
+ }
+
+}