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 <[EMAIL PROTECTED]>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex


_______________________________________________
Bug-gsl mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-gsl

Reply via email to