http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54932
--- Comment #8 from Steve Kargl <sgk at troutmask dot apl.washington.edu> 2012-10-17 19:21:22 UTC --- On Wed, Oct 17, 2012 at 06:51:08PM +0000, burnus at gcc dot gnu.org wrote: > > > The Standard does not define 'incremented' and > > 'incrementation', and in particular, these words > > are not defined in terms of the numeric intrinsic > > operations and so you cannot appeal to Section 7. > > I disagree. One can surely read something differently, but I think it is very > difficult to have a reading which makes both sense in terms of the English > language ("increment" = "the action or process of increasing especially in > quantity or value : enlargement"; source: Marriam-Webster) and the common > understanding how programs behave. > > For instance, for > > do i = 2, 5, 1 > print *, i > end do > > The standard has: "The DO variable, if any, is incremented by the value of the > incrementation parameter m3." > > In my reading of the standard, the program will print 2, 3, 4, 5 and after the > loop i has the value 6. That matches in my understanding "i = i + 1" where m3 > == 1; thus, I fail to see why Section 7.1.5.2.4 shouldn't apply in this case. > > Can you come up with a (somewhat sensible) different interpretation which > still > allows the program of comment 0? > As I point out in c.l.f, the incrementataion process is not defined by the standard. While certainly, one would assume that this process is i = i + m3 and so Section 7 rules apply. The incrementation process could be done in some other manner such as integer(8) j = int(i,8) + m3 if (j < int(huge(i),8) + 1) then i = j else i = - huge(i) - 1 + m3 ! Assume wrap around semantics end if ! Preventing a possible hardware trap or the incrementation process could be implemented via bit-wise shift, and, and [x]or. With bit manipulations none of the numeric intrinsic operations are used, so section 7 does not apply. > (I concur that the invalidity of the program when m2 == > huge(integer-do-variable) is a bit surprising at a glance, > but that doesn't make the program valid. I also concur that > one could have written the standard differently such that > the program becomes valid.) The standard simply should have stated that the incrementation process follows the rules of 7.1.5.2.4. As I said I don't care enough about the PR to re-open it. In any event, gfortran should probably issue a warning if m2=huge(i) and m3 > 0.