• [^] # Re: Existe-t-il des compilateurs C/C++ qui donnent une sémantique à tous les programmes ?

    Posté par . En réponse au journal Compilateur trop intelligent. Évalué à 4.

    La notion de il peut pas faire mieux est pas vraiment celle là.

    Par exemple,

    uint32_t rol_attempt(uint32_t a, int x)
    {
     return (a << x) | (a >> (32-x));
    }

    au plan du matos il n'y a pas d'archi, probablement pas du tout, en tout cas aucune en dehors d'un truc vraiment exotique, pour laquelle le code précédant aurait des raisons de ne pas produire un rol pour x entre 0 et 32 inclus.

    Pourtant, je crois bien que les normes du C/C++ rendent ce code undefined pour x == 0 ou x == 32.
    Avec un sanitizer d'UB il n'y a pas d'autre choix que de crasher. Alors que ce que le programmeur voulait clairement, c'est un rol 0 => return a;

    Et malheureusement vu la politique irréfléchie de certains dev de compilo, ça pourrait bien être le "bon" choix dorénavant car je crois pas que y en ait beaucoup qui garantissent encore qu'ils vont produire un rol à partir de ce code.

    Bref, on a même plus de moyen d'exprimer un rol d'une manière pas trop convolué avec toutes ces conneries. L'argument de "l'exploitation des UB" pour optimiser les perfs des programmes tombe à l'eau—cette approche, poussée à son extrême comme ça a malheureusement été fait, c'est de la fumisterie. De la fumisterie dangereuse.