https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91939
--- Comment #1 from Jürgen Reuter <juergen.reuter at desy dot de> --- The discussion on c.l.f. is not clear whether the code is valid: The Fortran 2018 standard says in 7.5.4.6.8: A type has default initialization if component-initialization is specified for any direct component of the type. [...] This is here the case for real :: a=1.0 of t. Then, 8.6.7.2 says If a nonpointer variable has default initialization, it shall not appear in a data-stmt-object-list. vs. the comment from Steve Lionel: Interesting question. 8.4p1 says: "Explicit initialization alternatively may be specified in a DATA statement unless the variable is of a derived type for which default initialization is specified." So at first glance the code would seem to be ok since the "variable" here is t%b, which isn't of a derived type. But then there's this (same paragraph): "A variable, or part of a variable, shall not be explicitly initialized more than once in a program." Now, does this mean that since t%a is explicitly initialized that you can't later initialize t%b? I would say no, since it is perfectly acceptable to initialize different elements of an array in multiple DATA statements. My opinion is that the code is conforming, but it's entirely possible I overlooked something so comments from others would be welcome. P.S. One interesting aspect of types with default initialization is that procedure local variables of such types get initialized on each entry to the procedure, unlike other kinds of initialization in Fortran.