From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 8DF6C383E80F; Mon, 25 May 2020 14:38:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8DF6C383E80F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1590417501; bh=HixfaxyDh04jl5oPVK6iJKZm/x2OVO1UoAN/RoWU9w4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=OwJ+u8FE9soE6Lzibh3784v4V+dY8apr7Sxz+9xH+Dnu+21IAavxagRheE/BeoR1X IatcHCoykrgtbpY8LH8jIRCKQe0qrukkgYLv6OJCksAaPX7LiaZ4CnI3O9249Y/xw4 d60ZMPjvHL29AbdUexiit5DVdWTceai4bhy21fik= From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/95197] libgomp/testsuite/libgomp.c++/for-27.C fails with -std=c++17 Date: Mon, 25 May 2020 14:38:21 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: unknown X-Bugzilla-Keywords: openmp X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 May 2020 14:38:21 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D95197 --- Comment #2 from Jakub Jelinek --- Reduced testcase: // { dg-do link } typedef __PTRDIFF_TYPE__ ptrdiff_t; template class I { public: typedef ptrdiff_t difference_type; I (); ~I (); I (T *); I (const I &); T &operator * (); T *operator -> (); T &operator [] (const difference_type &) const; I &operator =3D (const I &); I &operator ++ (); I operator ++ (int); I &operator -- (); I operator -- (int); I &operator +=3D (const difference_type &); I &operator -=3D (const difference_type &); I operator + (const difference_type &) const; I operator - (const difference_type &) const; template friend bool operator =3D=3D (I &, I &); template friend bool operator =3D=3D (const I &, const I<= S> &); template friend bool operator < (I &, I &); template friend bool operator < (const I &, const I &); template friend bool operator <=3D (I &, I &); template friend bool operator <=3D (const I &, const I= &); template friend bool operator > (I &, I &); template friend bool operator > (const I &, const I &); template friend bool operator >=3D (I &, I &); template friend bool operator >=3D (const I &, const I= &); template friend typename I::difference_type operator - (I= &, I &); template friend typename I::difference_type operator - (c= onst I &, const I &); template friend I operator + (typename I::difference_t= ype , const I &); private: T *p; }; template I::I () : p (0) {} template I::~I () {} template I::I (T *x) : p (x) {} template I::I (const I &x) : p (x.p) {} template T &I::operator * () { return *p; } template T *I::operator -> () { return p; } template T &I::operator [] (const difference_type &x) const= { return p[x]; } template I &I::operator =3D (const I &x) { p =3D x.p; re= turn *this; } template I &I::operator ++ () { ++p; return *this; } template I I::operator ++ (int) { return I (p++); } template I &I::operator -- () { --p; return *this; } template I I::operator -- (int) { return I (p--); } template I &I::operator +=3D (const difference_type &x) = { p +=3D x; return *this; } template I &I::operator -=3D (const difference_type &x) = { p -=3D x; return *this; } template I I::operator + (const difference_type &x) cons= t { return I (p + x); } template I I::operator - (const difference_type &x) cons= t { return I (p - x); } template bool operator =3D=3D (I &x, I &y) { return x.p = =3D=3D y.p; } template bool operator =3D=3D (const I &x, const I &y) {= return x.p =3D=3D y.p; } template bool operator !=3D (I &x, I &y) { return !(x = =3D=3D y); } template bool operator !=3D (const I &x, const I &y) { r= eturn !(x =3D=3D y); } template bool operator < (I &x, I &y) { return x.p < y.p= ; } template bool operator < (const I &x, const I &y) { retu= rn x.p < y.p; } template bool operator <=3D (I &x, I &y) { return x.p <= =3D y.p; } template bool operator <=3D (const I &x, const I &y) { r= eturn x.p <=3D y.p; } template bool operator > (I &x, I &y) { return x.p > y.p= ; } template bool operator > (const I &x, const I &y) { retu= rn x.p > y.p; } template bool operator >=3D (I &x, I &y) { return x.p >= =3D y.p; } template bool operator >=3D (const I &x, const I &y) { r= eturn x.p >=3D y.p; } template typename I::difference_type operator - (I &x, I= &y) { return x.p - y.p; } template typename I::difference_type operator - (const I= &x, const I &y) { return x.p - y.p; } template I operator + (typename I::difference_type x, co= nst I &y) { return I (x + y.p); } void bar (I &a) { } void foo (const I &a, const I &b) { I i; #pragma omp distribute parallel for for (i =3D a; i < b; i++) bar (i); } int main () { int a[64]; foo (&a[0], &a[63]); }=