]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/61033 (Infinite loop in variable tracking)
authorMaxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
Wed, 24 Feb 2016 16:41:52 +0000 (16:41 +0000)
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>
Wed, 24 Feb 2016 16:41:52 +0000 (16:41 +0000)
PR debug/61033
* g++.dg/pr61033.C: Add a regression testcase for PR debug/61033.

Co-Authored-By: Charles Baylis <charles.baylis@linaro.org>
From-SVN: r233675

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/pr61033.C [new file with mode: 0644]

index 2e4158839c9d6160b86d35f508b73572fb43c6ec..7db6b61f86ae4c30b270c6a0eba822e25aab9dd1 100644 (file)
@@ -1,3 +1,9 @@
+2016-02-24  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+           Charles Baylis  <charles.baylis@linaro.org>
+
+       PR debug/61033
+       * g++.dg/pr61033.C: Add a regression testcase for PR debug/61033.
+
 2016-02-24  Richard Biener  <rguenther@suse.de>
        Jakub Jelinek  <jakub@redhat.com>
 
diff --git a/gcc/testsuite/g++.dg/pr61033.C b/gcc/testsuite/g++.dg/pr61033.C
new file mode 100644 (file)
index 0000000..6974351
--- /dev/null
@@ -0,0 +1,86 @@
+// PR debug/61033
+// { dg-do compile }
+// { dg-options "-g -O2" }
+
+# 0 "" 3
+struct A {
+  A(int) : ch() {}
+  unicode() {}
+  int ch;
+};
+class QChar {
+public:
+  QChar(A ch) : ucs(ch.unicode()) {}
+  int ucs;
+};
+class B {
+public:
+  int isShared_count;
+  isShared() { return isShared_count; }
+};
+struct C {
+  unsigned short *data() {
+    void *__trans_tmp_1;
+    __trans_tmp_1 = reinterpret_cast<char *>(0) + offset;
+    return static_cast<unsigned short *>(__trans_tmp_1);
+  }
+  B ref;
+  int size;
+  int alloc;
+  int offset;
+};
+class D {
+public:
+  D(char *) : m_data() {} * m_data;
+};
+class F {
+public:
+  F(int, QChar);
+  F(D);
+  operator+=(QChar) {
+    if (d->ref.isShared() || d->alloc)
+      reallocData();
+    d->data()[d->size++] = 0;
+    d->data()[0] = '\0';
+  }
+  C *d;
+  reallocData();
+};
+struct G {
+  struct H {
+    int begin;
+  };
+  H d;
+  size() { return d.begin; }
+};
+class I {
+  G p;
+public:
+  ~I();
+  length() { return p.size(); }
+};
+class J;
+class K {
+public:
+  J toNodeListProperty() const;
+};
+class L {
+  F toQml(const K &property) const;
+  toQml() const;
+};
+class J {
+public:
+  I toModelNodeList();
+};
+F::F(D) {}
+F L::toQml(const K &property) const {
+  I nodes = property.toNodeListProperty().toModelNodeList();
+  F result("");
+  F(0, A(' '));
+  for (int i = 0; i < nodes.length(); ++i) {
+    if (i)
+      result += A(',');
+    result += A('\n');
+    toQml();
+  }
+}