aboutsummaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2018-06-26 10:44:52 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2018-06-26 10:44:52 +0000
commit43ad8df852a2855b76df2bcd712e786348684fe3 (patch)
tree4551289f9eec58b22b0f9a80093df0e8a2f75781 /libgomp
parent76b1a1bd5a19ee1f5df448cdbbf11e26280b55aa (diff)
PR c++/86291
* parser.c (cp_parser_omp_for_loop_init): Change for_block argument type from vec<tree, va_gc> * to vec<tree, va_gc> *&. * testsuite/libgomp.c++/pr86291.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-8-branch@262138 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp')
-rw-r--r--libgomp/ChangeLog5
-rw-r--r--libgomp/testsuite/libgomp.c++/pr86291.C51
2 files changed, 56 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index e5dec96a791..fdc67444f59 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/86291
+ * testsuite/libgomp.c++/pr86291.C: New test.
+
2018-05-18 Cesar Philippidis <cesar@codesourcery.com>
Backport from mainline
diff --git a/libgomp/testsuite/libgomp.c++/pr86291.C b/libgomp/testsuite/libgomp.c++/pr86291.C
new file mode 100644
index 00000000000..89c4b2d37cd
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/pr86291.C
@@ -0,0 +1,51 @@
+// PR c++/86291
+// { dg-do run }
+// { dg-additional-options "-std=c++11" }
+
+extern "C" void abort ();
+
+struct I
+{
+ using size_type = __SIZE_TYPE__;
+ using difference_type = __PTRDIFF_TYPE__;
+ using value_type = int;
+ using reference = int &;
+ using pointer = int *;
+ static I begin () { return I{}; }
+ static I end () { I res; res.pos = res.num; return res; }
+ I &operator++ () { ++pos; return *this; }
+ reference operator* () const { return val; }
+ I &operator+= (size_type diff) { pos += diff; return *this; }
+ friend bool operator< (const I &a, const I &b) { return a.pos < b.pos; }
+ friend difference_type operator- (const I &a, const I &b) { return a.pos - b.pos; }
+ size_type pos = 0;
+ size_type num = 1;
+ mutable int val = 0;
+};
+
+int c;
+
+int
+main ()
+{
+#pragma omp parallel for collapse(10)
+ for (auto i = I::begin (); i < I::end (); ++i)
+ for (auto j = I::begin (); j < I::end (); ++j)
+ for (auto k = I::begin (); k < I::end (); ++k)
+ for (auto l = I::begin (); l < I::end (); ++l)
+ for (auto m = I::begin (); m < I::end (); ++m)
+ for (auto n = I::begin (); n < I::end (); ++n)
+ for (auto o = I::begin (); o < I::end (); ++o)
+ for (auto p = I::begin (); p < I::end (); ++p)
+ for (auto q = I::begin (); q < I::end (); ++q)
+ for (auto r = I::begin (); r < I::end (); ++r)
+ {
+ if (*i != 0 || *j != 0 || *k != 0 || *l != 0 || *m != 0
+ || *n != 0 || *o != 0 || *p != 0 || *q != 0 || *r != 0)
+ abort ();
+ #pragma omp atomic
+ c++;
+ }
+ if (c != 1)
+ abort ();
+}