Les pointeurs sont compliqués II : Bogues subtils dans les optimisations LLVM

2025-02-02

Cet article explore l’importance d’une sémantique précise pour les représentations intermédiaires du compilateur (IR), en particulier pour les langages comme C, C++ et Rust qui permettent la manipulation de pointeurs non sécurisés. L’auteur montre comment une séquence de trois optimisations du compilateur LLVM apparemment correctes peut conduire à un comportement incorrect du programme. La cause première est la provenance des pointeurs : les informations supplémentaires intégrées à un pointeur au-delà de son adresse mémoire, qui précisent comment il a été calculé. Cela nécessite une spécification IR LLVM plus précise, y compris une définition précise du comportement indéfini (UB). Considérer les IR des compilateurs comme des langages de programmation autonomes avec des spécifications rigoureuses est essentiel pour résoudre ces problèmes.

Développement sémantique des pointeurs