J'avais déjà lu que le noyau Linux est un bon test pour une version de gcc. J'en ai maintenant la preuve avec une nouvelle démonstration de Linus Torvald. L'histoire commence avec un courriel du développeur noyau suractif Ingo Molnar le 2 octobre vers minuit. Six heures plus tard, Linus répond que c'est un bogue du compilateur gcc.

Il montre que le code en langage machine cité dans le Oops noyau recopié dans le courriel d'Ingo ne correspond pas au code source C du noyau :

Code: 89 45 f0 76 77 eb 7a 8b 55 ec 8b 4d ec 
89 f7 8b 02 89 c2 03 51 0c 29 c7 89 f0 89 79 
0c 29 d0 eb 6c 89 f8 88 06 46 eb 54 8b 55 f0 
<8b> 3a 42 89 55 f0 89 f9 84 c9 74 d0 8b 45 
08 0f be d9 89 da e8

Il écrit :

Lookie here:
- the bug happens on this:
       char c = *p++;
- which has been compiled into
       8b 3a           mov    (%edx),%e
which is a *word* access.

Quarante minutes plus tard, Ingo répond qu'il demeure perplexe « hm, it's 4.0.2. Not the latest & greatest but i've been using it for 2 years and this would be the first time it miscompiles a 32-bit kernel out of tens of thousands of successful kernel bootups. ». Mais les échanges suivants avec d'autres interlocuteurs réussissent à persuader Ingo.

Je pense que le bogue gcc 4.0.2 a été rapporté mais je n'en ai pas trouvé les traces. C'est quand même un bel exploit de l'expertise Linus qui semble habitué aux bogues du compilateur.