En realidad cuando se está programando todo el tiempo, sobre todo en Fortran, uno se topa frecuentemente con bugs del compilador. En general no es difícil saber que hay un bug, normalmente termina con un segmentation fault o un mensaje de Internal Compiler Error (ICE), el problema es que no siempre es claro qué lo gatilla. Además para resolverlo la única opción es hacer un "workaround", es decir modificar el código para que haga lo mismo de otra manera para evitar el bug, y poner un comentario para que el próximo que modifique el código sepa por qué se hace así.
Normalmente los bugs aparecen en compiladores cerrados, siendo los peores el compilador Intel para Itanium y el compilador Sun, pero pasa en todos. Curiosamente g95 y gfortran que si bien son mucho menos maduros tienen menos bugs que los compiladores propietarios.
Ayer me pasó precisamente lo contrario, encontré un bug en gfortran cuando se usa con OpenMP, el compilador da un ICE cuando la variable de inducción de un loop OpenMP se usa en una subrutina. Este es un ejemplo:
program testbugEl workaround en este caso es simple, usar otra variable en las subrutinas, y de hecho, no me gusta mucho reusar las variables de inducción de la forma que gatilla el bug.
integer :: ii
!$omp parallel do
do ii = 1, 1000
end do
contains
subroutine something()
ii = 0
end subroutine something
end program testbug
Al hacer el commit de octopus, Tobías Burnus vio el mensaje y me preguntó por el bug, como tenía una idea de por qué se causaba, logré aislarlo (con el código que mostré recien) y se lo envié. El vió que el bug aún está en la versión de desarrollo de gfortran y por lo tanto lo reportó. Esta es la entrada en el BTS de gcc:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33880
Posteriormente, Jakub Jelinek, quien implementó OpenMP en GCC, descubrió que el bug también aparece en C.
Que Tobías lo hiciera fue suerte, porque a mí me hubiera tomado más tiempo reportar el bug, y seguramente lo hubiera hecho a través de Debian (a GCC solo se reportan bugs hechos con la versión liberada por ellos).
1 comentarios:
¿Vas a escribir nuevos posts o ya se te acabó la inspiración para siempre?
Publicar un comentario en la entrada