Un compilateur de maintenance peut changer diagnostics et code machine parce qu’il corrige des bugs. L’absence de nouvelles fonctions ne promet pas des binaires identiques.

L’annonce ne dit pas que tout reste identique
L’annonce du 7 août de Richard Biener indique plus de 102 bugs corrigés dans GCC 16.2, dont des régressions et bugs sérieux de 16.1. La page de la série l’identifie comme sa deuxième version. Elle ne garantit pas un optimiseur, des diagnostics ou des binaires inchangés.
L’ancien article donnait cette garantie et excluait toute vérification de migration. Corriger du code mal généré change nécessairement certaines sorties. Accepter un programme valide auparavant rejeté change ce qui compile. Aucune de ces corrections ne nécessite une nouvelle fonction du langage.
Séparer version du compilateur et dialecte
La documentation des langages décrit GNU C++20 comme mode par défaut de cette série en l’absence d’option de dialecte. Installer 16.2 ne rend pas inutile un choix explicite de standard plus ancien.
Notre schéma propose quatre constructions d’un petit projet : GCC 16.1 et 16.2, chacun en C++17 et C++20 explicites. Comparer les versions dans une même colonne isole mieux la mise à jour du compilateur. Comparer les dialectes sur une même ligne étudie une autre modification. Garder identiques optimisation, architecture cible, dépendances et entrées de test.
Il s’agit d’un protocole proposé, pas de compilations réalisées par PeopleAreGeek. Certains projets nécessitent volontairement les extensions GNU : employer les modes gnu++ correspondants si c’est leur contrat. L’essentiel est de documenter le choix plutôt que de l’hériter accidentellement.
Retirer un contournement avec son reproducer
Si une optimisation a été désactivée à cause d’un bug, conserver l’entrée minimale qui échouait et son résultat attendu. Essayer le nouveau compilateur avec puis sans ce contournement, avant les tests pertinents du projet. Le nombre global de corrections ne prouve pas que votre problème particulier soit résolu.
Installer un compilateur supplémentaire n’impose pas non plus de reconstruire tous les paquets du système. Les exigences de runtime et d’ABI dépendent des binaires produits et bibliothèques liées. Vérifier ces dépendances et le modèle de paquets de la distribution avant de remplacer la chaîne système ; conserver l’ancien compilateur pendant la validation.
Revue du 8 septembre : plus de 102 corrections, effets possibles sur le code généré et choix explicite du dialecte clarifiés.