> 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
> 

Reply via email to