Public mpz_ptr and mpz_srcptr

Torbjorn Granlund tg at gmplib.org
Mon Feb 4 14:26:38 CET 2013


Vincent Lefevre <vincent at vinc17.net> writes:

  On 2013-02-04 13:57:16 +0100, Torbjorn Granlund wrote:
  > I chose to not provide mpz_ptr since I think it would be prone to
  > errors.  I expect code like this to be created:
  > 
  > mpz_ptr
  > foo (mpz_t a, mpz_t b)
  > {
  >   mpz_t c;
  >   mpz_init (c);
  >   mpz_add (c, a, b);
  >   return c;
  > }
  
  This is not specific to GMP: every C coder should know that returning
  a local variable is incorrect.

It is?  What is wrong with

    int
    foo (int a, int b)
    {
      int c;
      c = a + b;
      return c;
    }

?

I don't think it is self-evident that mpz_t is special.  We could infact
had defined it so that it wasn't special at all, but letting it be a
pointer to, say, an array of size, allocation, followed by an array of
limbs.

  A good compiler (like GCC) should be able to detect that and output a
  warning (GCC does that by default).  So, in practice, there are no
  risks of errors.

Sic!

-- 
Torbjörn


More information about the gmp-devel mailing list