aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2018-03-12 13:33:38 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2018-03-12 06:33:38 -0700
commita7fea88ffbba4300a1ec0ab5f3bb03c9a45817f2 (patch)
treee65bbec10df184bcf67691144f4371b37604fb47 /gcc
parent3fe126afd1b2fb9177e419ecc64143afd9e20f15 (diff)
downloadgcc-a7fea88ffbba4300a1ec0ab5f3bb03c9a45817f2.zip
gcc-a7fea88ffbba4300a1ec0ab5f3bb03c9a45817f2.tar.gz
gcc-a7fea88ffbba4300a1ec0ab5f3bb03c9a45817f2.tar.bz2
Add a testcase for PR 84821
This was introduced by r258390 and fixed by r258415. * g++.dg/pr84821.C: New test. From-SVN: r258449
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/pr84821.C55
2 files changed, 59 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c719306..5dead01 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2018-03-12 H.J. Lu <hongjiu.lu@intel.com>
+ * g++.dg/pr84821.C: New test.
+
+2018-03-12 H.J. Lu <hongjiu.lu@intel.com>
+
* gcc.dg/pr84799.c: New test.
2018-03-12 Richard Biener <rguenther@suse.de>
diff --git a/gcc/testsuite/g++.dg/pr84821.C b/gcc/testsuite/g++.dg/pr84821.C
new file mode 100644
index 0000000..39da367
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr84821.C
@@ -0,0 +1,55 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+// { dg-additional-options "-fPIC" { target fpic } }
+
+typedef struct a *b;
+struct a {
+ int c;
+ unsigned d[];
+};
+int e, f, g, i, l, m;
+struct o {
+ long *h;
+ int c;
+ unsigned j;
+ int k;
+ long aa;
+};
+inline void p(o *r) { r->c = g; }
+int *n, *ab;
+inline bool s(o *r) {
+ for (; r->aa == 0; r->aa = r->h[r->j])
+ if (r->j >= r->c)
+ return false;
+ r->aa >>= 1;
+ for (; r->aa;)
+ r++;
+ *n = r->k;
+ return true;
+}
+class t {
+public:
+ t(int);
+ operator b() { return q; }
+ b q;
+};
+bool u, v, ac;
+void fn3() {
+ long w, x;
+ o ad;
+ bool ae;
+ t af(i), ag(i);
+ for (p(&ad); s(&ad);) {
+ a *ah = af, *ai = ah, *aj = ag;
+ x = ai->d[e] >> f & 1;
+ ae = x;
+ ai = aj;
+ w = ai->d[e] >> f & 1;
+ ac = w;
+ if (v && u && w && x)
+ ab[l] = ++m;
+ u = x;
+ }
+ for (;;)
+ ;
+}