Je suis content : j'ai trouvé un nouveau bug dans C18, le compilateur C pour les PIC18Fxxx de Microchip. Mais j'aurais été encore plus content si la chasse au bug n'avait pas duré des heures.
Pour les curieux :
- le bug : apparemment, quand
machin est déclaré
volatile, et qu'on écrit
(void)machin; (donc un accès en lecture, mais sans stockage du résultat), C18 ne génère pas d'accès à
machin.
- le cast en
void n'est pas indispensable, mais ça évite des warnings, et ça montre que la formulation est délibérée.
- ce n'est pas un cas théorique : il y a des raisons valables de faire un accès en lecture sans stocker le résultat, quand la lecture a un effet secondaire, ce qui n'est pas rare pour des registres hardware.
- oui je sais, C18 est obsolète ; mais le code existant a été compilé avec, je veux pas introduire de régressions en changeant de compilo, et je suis pas payé pour ça de toute façon. Sans parler du fait que la licence existante ne doit probablement pas couvrir le nouveau compilateur - parce que oui bien sûr, ce bazar est payant, merci Microchip

- à première vue, XC8 (le nouveau compilateur) n'a pas ce bug.