forked from OSchip/llvm-project
[flang] Catch error: base of DATA statement object can't be a pointer
A pointer with subscripts, substring indices, or components cannot be initialized by a DATA statement (although of course a whole pointer can be so). Catch the missing cases. Differential Revision: https://reviews.llvm.org/D109931
This commit is contained in:
parent
cbbf2e8c8a
commit
57705df2de
|
@ -70,6 +70,8 @@ public:
|
||||||
: IsHostAssociated(symbol, scope) ? "Host-associated object"
|
: IsHostAssociated(symbol, scope) ? "Host-associated object"
|
||||||
: IsUseAssociated(symbol, scope) ? "USE-associated object"
|
: IsUseAssociated(symbol, scope) ? "USE-associated object"
|
||||||
: symbol.has<AssocEntityDetails>() ? "Construct association"
|
: symbol.has<AssocEntityDetails>() ? "Construct association"
|
||||||
|
: IsPointer(symbol) && (hasComponent_ || hasSubscript_)
|
||||||
|
? "Target of pointer"
|
||||||
: nullptr}) {
|
: nullptr}) {
|
||||||
context_.Say(source_,
|
context_.Say(source_,
|
||||||
"%s '%s' must not be initialized in a DATA statement"_err_en_US,
|
"%s '%s' must not be initialized in a DATA statement"_err_en_US,
|
||||||
|
|
|
@ -65,6 +65,10 @@ module m
|
||||||
type(large) :: largeNumberArray(i)
|
type(large) :: largeNumberArray(i)
|
||||||
type(large) :: largeArray(5)
|
type(large) :: largeArray(5)
|
||||||
character :: name(i)
|
character :: name(i)
|
||||||
|
type small
|
||||||
|
real :: x
|
||||||
|
end type
|
||||||
|
type(small), pointer :: sp
|
||||||
!C877
|
!C877
|
||||||
!ERROR: Default-initialized 'largenumber' must not be initialized in a DATA statement
|
!ERROR: Default-initialized 'largenumber' must not be initialized in a DATA statement
|
||||||
DATA(largeNumber % numsArray(j) % headOfTheList, j = 1, 10) / 10 * NULL() /
|
DATA(largeNumber % numsArray(j) % headOfTheList, j = 1, 10) / 10 * NULL() /
|
||||||
|
@ -92,6 +96,8 @@ module m
|
||||||
!C876
|
!C876
|
||||||
!ERROR: Automatic variable 'name' must not be initialized in a DATA statement
|
!ERROR: Automatic variable 'name' must not be initialized in a DATA statement
|
||||||
DATA name( : 2) / 'Ancd' /
|
DATA name( : 2) / 'Ancd' /
|
||||||
|
!ERROR: Target of pointer 'sp' must not be initialized in a DATA statement
|
||||||
|
DATA sp%x / 1.0 /
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue