Los punteros son complicados II: Errores sutiles en las optimizaciones de LLVM
Esta publicación profundiza en la importancia de la semántica precisa para las representaciones intermedias del compilador (IR), especialmente para lenguajes como C, C++ y Rust que permiten la manipulación insegura de punteros. El autor demuestra cómo una secuencia de tres optimizaciones del compilador LLVM aparentemente correctas puede llevar a un comportamiento de programa incorrecto. La causa raíz es la procedencia del puntero: la información adicional incrustada en un puntero más allá de su dirección de memoria, que detalla cómo se calculó. Esto requiere una especificación de IR de LLVM más precisa, incluyendo una definición precisa del comportamiento indefinido (UB). Tratar las IR del compilador como lenguajes de programación independientes con especificaciones rigurosas es clave para resolver estos problemas.