• # Comportement indéfini ou incorrect ?

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

    Je ne vois pas de comportement indéfini dans le code. La variable Do est initialisé à 0 par défaut. Donc lors de l’appel dans le main il y a deux possibilités (par rapport à ce que je connais de la norme) :

    • La plus courante avec un OS, la MMU déclenche une exception et sort avec une erreur (segmentation fault)
    • En barre métal(sans OS) ou en mode noyau, il peut être légitime d’accéder à l’adresse 0, et dans ce cas pas de problème.

    Par contre, l’optimisation de clang me semble cavalière... en O0, ça fait ce qui est attendu. Par contre, dès -O1, il remplace par un jmp à EraseAll. en O[234s] le compilateur inline la fonction et appelle directement system depuis main.

    J’avoue que j’aurais compris une optimisation de se genre dès O3 ou O4, mais avant ça me semble trop.

    Si quelqu’un peut m’indiquer ce qui est indéfini dans la norme qui induit ce comportement, je suis preneur.