------- Comment #5 from jvdelisle at gcc dot gnu dot org 2007-03-18 02:22 ------- Heres the real problem:
Try compiling this with and without -fno-range-check. integer*8 :: k= 68719476746 integer*8 :: k2 = 2_8**36 + 10 print *, "k=",k, k2, int(k2, kind=8), int(k2, kind=4) end With checking: overflow.f:1.34: integer*8 :: k= 68719476746 1 Error: Integer too big for its kind at (1) Without checking: $ gfc -fno-range-check overflow.f $ ./a.out k= 68719476746 68719476746 68719476746 10 So our range checking does not catch the case when too big integer is hidden in some arithmetic and conversion of kinds does not either. I don't think we want integer kind conversion to catch this, its no different then a cast. The programmer needs to be aware of what they are doing. In tha case of the overly large unit number, We do catch non disguised cases. Any opinions on whether we need to really 'fix' this? (I am not taking sides here, the answer too my question has broader implications, ie int intrinsics) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31201