This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/57628] spurious error: division by zero in if statement
- From: "sgk at troutmask dot apl.washington.edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 17 Jun 2013 05:00:04 +0000
- Subject: [Bug fortran/57628] spurious error: division by zero in if statement
- Auto-submitted: auto-generated
- References: <bug-57628-4 at http dot gcc dot gnu dot org/bugzilla/>
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.