> Am 22.04.2023 um 10:03 schrieb Jakub Jelinek <ja...@redhat.com>: > > Hi! > >> On Tue, Apr 18, 2023 at 03:39:41PM +0200, Richard Biener via Gcc-patches >> wrote: >> The following adds two RAII classes, one for mpz_t and one for mpfr_t >> making object lifetime management easier. Both formerly require >> explicit initialization with {mpz,mpfr}_init and release with >> {mpz,mpfr}_clear. > > This unfortunately broke bootstrap when using GCC 4.8.x or 4.9.x as > it uses deleted friends which weren't supported until PR62101 fixed > them in 2014 for GCC 5. > > The following patch adds an workaround, not deleting those friends > for those old versions. > While it means if people add those mp*_{init{,2},clear} calls on auto_mp* > objects they won't notice when doing non-bootstrap builds using > very old system compilers, people should be bootstrapping their changes > and it will be caught during bootstraps even when starting with those > old compilers, plus most people actually use much newer compilers > when developing. > > Bootstrapped/regtested on x86_64-linux and i686-linux (with gcc 12.1.1 > as system compiler) and powerpc64-linux and powerpc64le-linux (with gcc > 4.8.5 as system compiler, where it previously failed bootstrap). > Ok for trunk? Ok > 2023-04-22 Jakub Jelinek <ja...@redhat.com> > > PR bootstrap/109589 > * system.h (class auto_mpz): Workaround PR62101 bug in GCC 4.8 and 4.9. > * realmpfr.h (class auto_mpfr): Likewise. > > --- gcc/system.h.jj 2023-04-20 09:36:09.097375720 +0200 > +++ gcc/system.h 2023-04-21 20:13:09.212049563 +0200 > @@ -714,8 +714,11 @@ public: > auto_mpz (const auto_mpz &) = delete; > auto_mpz &operator= (const auto_mpz &) = delete; > > +#if GCC_VERSION < 4008 || GCC_VERSION >= 5000 > + /* GCC 4.8 and 4.9 don't support this, only fixed in PR62101 for 5.0. */ > friend void mpz_clear (auto_mpz&) = delete; > friend void mpz_init (auto_mpz&) = delete; > +#endif > > private: > mpz_t m_mpz; > --- gcc/realmpfr.h.jj 2023-04-20 09:36:09.066376175 +0200 > +++ gcc/realmpfr.h 2023-04-21 20:13:36.191663089 +0200 > @@ -37,9 +37,12 @@ public: > auto_mpfr (const auto_mpfr &) = delete; > auto_mpfr &operator= (const auto_mpfr &) = delete; > > +#if GCC_VERSION < 4008 || GCC_VERSION >= 5000 > + /* GCC 4.8 and 4.9 don't support this, only fixed in PR62101 for 5.0. */ > friend void mpfr_clear (auto_mpfr&) = delete; > friend void mpfr_init (auto_mpfr&) = delete; > friend void mpfr_init2 (auto_mpfr&, mpfr_prec_t) = delete; > +#endif > > private: > mpfr_t m_mpfr; > > > Jakub >
Re: [PATCH] Fix up bootstrap with GCC 4.[89] after RAII auto_mpfr and autp_mpz [PR109589]
Richard Biener via Gcc-patches Sat, 22 Apr 2023 10:37:41 -0700
- [PATCH] RAII auto_mpfr and autp_mpz Richard Biener via Gcc-patches
- [PATCH] Fix up bootstrap with GCC 4.[8... Jakub Jelinek via Gcc-patches
- Re: [PATCH] Fix up bootstrap with ... Richard Biener via Gcc-patches