Index: flang/lib/Evaluate/initial-image.cpp =================================================================== --- flang/lib/Evaluate/initial-image.cpp +++ flang/lib/Evaluate/initial-image.cpp @@ -33,6 +33,8 @@ return SizeMismatch; } else if (IsPointer(component)) { AddPointer(offset + component.offset(), indExpr.value()); + } else if (IsAllocatable(component) || IsAutomatic(component)) { + return NotAConstant; } else { Result added{Add(offset + component.offset(), component.size(), indExpr.value(), context)}; Index: flang/test/Semantics/data01.f90 =================================================================== --- flang/test/Semantics/data01.f90 +++ flang/test/Semantics/data01.f90 @@ -11,6 +11,9 @@ integer, parameter :: repeat = -1 integer :: myAge = 2 type(person) associated + type hasAlloc + integer, allocatable :: a(:) + end type end subroutine CheckRepeat @@ -63,4 +66,7 @@ data y / a(i) / !ERROR: DATA statement value 'b(1_8)' for 'z' is not a constant data z / b(1) / + type(hasAlloc) ha + !ERROR: DATA statement value 'hasalloc(a=0_4)' for 'ha' is not a constant + data ha / hasAlloc(0) / end