From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id B1C683858D35; Fri, 6 Jan 2023 18:07:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B1C683858D35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1673028446; bh=vW9+A0Al0GldFEJAtNvb2fr/Q3gVyh1UiWW7s2T6MBA=; h=From:To:Subject:Date:In-Reply-To:References:From; b=R1eH857z8XZa7l9/FTF358gnXYqV926yF5RpJB2Ib5pPQAMqi7rCFz9fjHFjel9xn ErBe9+eOWpHsXlgcgKWeGDqLK99ptB8eIdXvsPnmc8Bv1lg2llhEV8BHKkdpp7b9JI GvBTra7NJ/OQnojfHsZjNmMQJ2mzR2CzbX+14Mxc= From: "pinskia at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/108317] dependent vector field is not causing field of this not to be found for fold expression inside a if constexpr block Date: Fri, 06 Jan 2023 18:07:26 +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: 12.2.0 X-Bugzilla-Keywords: rejects-valid X-Bugzilla-Severity: normal X-Bugzilla-Who: pinskia at gcc dot gnu.org X-Bugzilla-Status: NEW 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: short_desc 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 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D108317 Andrew Pinski changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|dependent vector field is |dependent vector field is |not causing this to be |not causing field of this |captured for fold |not to be found for fold |expression inside a if |expression inside a if |constexpr block |constexpr block --- Comment #3 from Andrew Pinski --- Simple workaround is to do: if constexpr(I) { r.v_[I] =3D c + this->v_[I] + (I < M ? o.v_[I] : T{}); c =3D c ? r.v_[I] <=3D this->v_[I] : r.v_[I] < this->v_[I]; } else { c =3D (r.v_[I] =3D this->v_[I] + o.v_[I]) < this->v_[I]; }=