Un fallo crítico en rustc 1.98 introduce una ranura vacía en la vtable y provoca SIGSEGV en crates async

Fuentes: rustc 1.98 emits a vacant vtable slot for boxed async services, causing SIGSEGV at address zero

Un error crítico en el compilador rustc, presente en la versión estable 1.98 y ausente en la 1.97.1, genera una vtable con una entrada de método a cero en el desplazamiento 24, lo que provoca una violación de segmento al despachar a través de objetos trait dinámicos en código async. El fallo, reproducido de forma consistente en macOS con arquitectura aarch64, fue detectado en el proyecto Rama, un framework de red asíncrono escrito en Rust, donde procesos de CI empezaron a fallar desde el lanzamiento de 1.98 con un segfault en la dirección 0x0000000000000000 dentro de un hilo tokio.

El origen parece estar en que rustc marca incorrectamente como imposibles los predicados del método de un servicio boxed, lo que hace que la ranura de la vtable quede como Vacant en lugar de apuntar a la implementación real. Como consecuencia, el código seguro que llama a través del trait object salta a la dirección cero. El equipo de Rust ya cuenta con una bisección del cambio regresivo y con un ejemplo mínimo reproducible, y ha etiquetado el informe como bug de miscompilation de prioridad crítica. El comportamiento recuerda a los issues 152735 y 153596, aunque en esta ocasión el compilador no emite un ICE sino un binario que falla en tiempo de ejecución.

El nightly posterior a 2026-07-16 ya no reproduce el problema, lo que sugiere que el defecto fue corregido en una rama de desarrollo. Mientras tanto, los autores afectados aplican workarounds manuales en su código para evitar la generación de la vtable defectuosa.