bug-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-gsl] Re: Bug-gsl GSL on Solaris problems


From: Richard Guenther
Subject: [Bug-gsl] Re: Bug-gsl GSL on Solaris problems
Date: Tue, 30 Oct 2007 14:02:14 +0100 (CET)

This also occurs on linux with GCC 4.3 and the problem is likely that
the overflow check in

void
FUNCTION (my, initialize) (TYPE (gsl_vector) * v)
{
  size_t i;
  ATOMIC k = 0, kk;

  /* Must be sorted initially */

  for (i = 0; i < v->size; i++)
    {
      kk = k;
      k++;
      if (k < kk)               /* prevent overflow */
        k = kk;
      FUNCTION (gsl_vector, set) (v, i, k);
    }
}

is broken for signed integral values.  As the ISO C standard defines
signed integer overflow as invoking undefined behavior, the post-the-fact
check is optimized away by compilers.  That this triggers only the signed
char case is probably due to the sizes not causing overflow on other
singed integral tests.

Unfortunately due to the type generic way you cannot do tricks like using
unsigned arithmetic here, but making k volatile should prevent the
optimization from happening.

Richard.

-- 
Richard Guenther <address@hidden>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex




reply via email to

[Prev in Thread] Current Thread [Next in Thread]