http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57628
--- Comment #11 from Steve Kargl <sgk at troutmask dot apl.washington.edu> --- On Sun, Jun 16, 2013 at 11:28:36PM +0000, furue at hawaii dot edu wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57628 > > --- Comment #9 from Ryo Furue <furue at hawaii dot edu> --- > (In reply to Steve Kargl from comment #8) > > > So, the compiler should just arbitrarily chose to evaluate > > some expression and ignore others? > > No, I don't mean that. I'm not saying which expression the compiler should > evaluate. What I'm saying is, what is the best way to deal with the result of > the evaluation? I think you found the answer. gfortran issues an error, so a user has the chance to fix her code. > > > Just remove the PARAMETER attribute in your code, it it will > > do what you. > > > > real :: a = 0 > > if (a > 0) then > > print *, 1/a > [. . .] > > Yes, I was about to come to that! I write my code that way because I plan to > provide the value of "a" from an external module in the future. Currently I > set the value with PARAMETER just as a convenience during the development of > the code. So, you are right, that your solution is one workaround for my > situation. > > But, I feel strongly uneasy looking at the code because "real::a = 0" is a > strong indication that the value of "a" will be altered after the definition. Fortunately, Fortran allows more than a single character in a variable name (and comments). ! ! This a flag set by the programmer prior to compilation. ! <Description of what the flag does goes here> real :: immutable_flag = 0 > The codes we are showing in this message exchange are shortened versions and > in > my real codes, there are some lines between "real, parameter:: a = 0" and the > IF statement. When I see "real:: a = 0.0", I expect the value of "a" will be > altered because I don't see PARAMETER. Not if the code is properly commented and the variable is suitably named. > Overall, I think this kind of thing is better be a "warning" and that at least > the compiler should allow the user to run such a code as this. The result of > the run may be a disaster but it's the user's responsibility. To refuse to > compile these codes is too much patronizing on the part of the compiler. I think that it is better to issue an error. > but I thought that replacing 1.0/0.0 with "Inf" at compile time would be a > useful extension (without violating the Fortran standard, of course). Again, > I'm not saying the compiler must do this. All I'm saying is that it may be > useful. gfortran does not support the IEEE 2003 standard. No one has stepped up to the plate. Here's your chance to make gfortran doe whatever you think the standard mandates.