Fermer2
PpHdLe 05/10/2014 à 10:02
Pour info, MAYLIB fonctionne sans optimisation avec CLANG, mais dès qu'on active les optimisations, ca plante pour un not enough memory.
Le code mal compilé est le suivant:
  size_t n;
  int i, j;
  void *s = &i;
  for (i = 10; i < (int) (CHAR_BIT*sizeof n) && s != NULL; i++) {
    n = 1UL << i;
    s =  malloc (n);
    if (s != NULL)
      free (s);
  }
  n = 1UL << (i-2);
  s = &i;
  for (j = i-3; j > i-8; j--) {
    s = malloc (n + (1UL << j));
    if (s != NULL) {
      free (s);
      n += 1UL <<j;
    }
  }

qui est là pour calculer la taille max allouable par le système.

Sans optimisation, clang calcule bien n=10468982784 (sur ma machine), mais dès -O, il retourne n=9079256848778919936 qui est faux !
C'est lié au bug de llvm suivant: http://llvm.org/bugs/show_bug.cgi?id=18868