5 ms·
It's just like Fortran, where everything including a constant is passed by reference, so if you assign to your arguments you might corrupt your program's only c
by concede_pluto 9y ago
It's just like Fortran, where everything including a constant is passed by reference, so if you assign to your arguments you might corrupt your program's only copy of 7 unless the linker put it in a read-only page.
- andars 9y agoCould you be more specific? Fortran passes arguments by reference, but writing to an argument won't mess up the "program's only copy of 7". For example, the first output of the following program is 4, but the second is still 7. program main integer m,n m = 7 call corrupt(m) write (*,*) m n = 7 write (*,*) n stop end program main subroutine corrupt (a) integer a a = 4 return end
- mastax 9y agoI think he means something like call corrupt(7) which causes a segfault for me. I suppose if you were using a compiler/platform that didn't store constants in read only memory, this might actually work.
- andars 9y agoBy manually moving the constants from .const to .data, I got this program: program main integer m,n call corrupt(7) write (*,*), 7 stop end program main subroutine corrupt (a) integer a a = 4 return end to output 4. Thanks for pointing this out, 'concede_pluto. Pretty weird!
- alephnil 9y agoAll newer versions of Fortran will segfault, but back in the days they would not. Back in the ninties I fixed a bug we found when porting a Fortran 77 program from HPUX to Linux. The program would segfault on Linux, but worked on HPUX. The reason was that in one subroutine, a parameter value was stored in a local variable, then used for computation and restored at the end. Since constants was stored in read only memory when using g77 on Linux, but not on the f77 compiler on HPUX, the Linux port would crash, but not the original HPUX version. In that the code you had above would have worked.
- emmelaich 9y agoYeah, a "fun" thing to do was to change the value of built-in constants such as pi.
- DonHopkins 9y agoThat feature was required by the Indiana General Assembly. https://en.wikipedia.org/wiki/Indiana_Pi_Bill https://en.wikipedia.org/wiki/Indiana_Pi_Bill
- emmelaich 9y agoMore like ridiculed than required. I was going to mention Indiana but was more hoping that it wouldn't be mentioned at all.
- deleted 9y ago[deleted]