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