https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108651
--- Comment #4 from kargl at gcc dot gnu.org --- (In reply to Scott Boyce from comment #3) > No its not correct because the Yes, it is the correct behavior. Please see 18-007r1.pdf, p.57. 7.4.3.1 Integer type ... Any integer value can be represented as a signed-int-literal-constant. ... The optional kind type parameter following digit-string specifies the kind type parameter of the integer constant; if it does not appear, the constant is default integer. 8258803693257250632 has default integer kind when it is parsed. 8258803693257250632_int64 has the integer type of integer(int64). Now check Sec. 7.8 "Construction of array values". R773 ac-value is expr or ac-implied-do 8258803693257250632 is an expr. C7111 (R770) If type-spec specifies an intrinsic type, each ac-value expression in the array-constructor shall be of an intrinsic type that is in type conformance with a variable of type type-spec as specified in Table 10.8. 8258803693257250632 meets the requirements of type conformance. 18-007r1.pdf, p. 89. If type-spec appears, it specifies the declared type and type parameters of the array constructor. Each ac-value expression in the array-constructor shall be compatible with intrinsic assignment to a variable of this type and type parameters. Each value is converted to the type and type parameters of the array-constructor in accordance with the rules of intrinsic assignment (10.2.1.3). Now, read that last sentence again, and then go read 10.2.1.3. 8258803693257250632 is treated as the right-hand-side of an intrinsic assignment such as integer(int64) x x = 8258803693257250632 This won't work because mathematically 8258803693257250632 exceeds huge(1). You have shown the correct way to do the array constructor, and in that case the type-spec within the constructor is redundant.