Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[flang]Implemented Semantic Checkes for 5 data constraints
Summary: C874, C875, C878, C880 and C881 checks are implemented. Differential Revision: https://reviews.llvm.org/D78008
- Loading branch information
Showing
3 changed files
with
177 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
! RUN: %B/test/Semantics/test_errors.sh %s %flang %t | ||
!Testing data constraints : C874 - C875, C878 - C881 | ||
module m | ||
contains | ||
function f(i) | ||
integer ::i | ||
integer ::result | ||
result = i *1024 | ||
end | ||
subroutine CheckObject | ||
type specialNumbers | ||
integer one | ||
integer numbers(5) | ||
end type | ||
type large | ||
integer elt(10) | ||
integer val | ||
type(specialNumbers) nums | ||
type(specialNumbers) numsArray(5) | ||
end type | ||
type(specialNumbers), parameter ::newNums = & | ||
specialNumbers(1, (/ 1, 2, 3, 4, 5 /)) | ||
type(specialNumbers), parameter ::newNumsArray(2) = & | ||
(/ SpecialNumbers(1, (/ 1, 2, 3, 4, 5 /)), & | ||
SpecialNumbers(1, (/ 1, 2, 3,4, 5 /)) /) | ||
type(specialNumbers) nums | ||
type(large) largeArray(5) | ||
type(large) largeNumber | ||
real :: a[*] | ||
real :: b(5) | ||
integer :: x | ||
real, parameter:: c(5) = (/ 1, 2, 3, 4, 5 /) | ||
integer :: d(10, 10) | ||
character :: name(12) | ||
integer :: ind = 2 | ||
!C874 | ||
!ERROR: Data object must not be a coindexed variable | ||
DATA a[1] / 1 / | ||
!C874 | ||
!ERROR: Data object must not be a coindexed variable | ||
DATA(a[i], i = 1, 5) / 5 * 1 / | ||
!C875 | ||
!ERROR: Data object variable must not be a function reference | ||
DATA f(1) / 1 / | ||
!C875 | ||
!ERROR: Data object must have constant bounds | ||
DATA b(ind) / 1 / | ||
!C875 | ||
!ERROR: Data object must have constant bounds | ||
DATA name( : ind) / 'Ancd' / | ||
!C875 | ||
!ERROR: Data object must have constant bounds | ||
DATA name(ind:) / 'Ancd' / | ||
!C878 | ||
!ERROR: Data implied do object must be a variable | ||
DATA(c(i), i = 1, 5) / 5 * 1 / | ||
!C878 | ||
!ERROR: Data implied do object must be a variable | ||
DATA(newNumsArray(i), i = 1, 2) & | ||
/ specialNumbers(1, 2 * (/ 1, 2, 3, 4, 5 /)) / | ||
!C880 | ||
!ERROR: Data implied do object must be subscripted | ||
DATA(nums % one, i = 1, 5) / 5 * 1 / | ||
!C880 | ||
!OK: Correct use | ||
DATA(largeArray(j) % nums % one, j = 1, 10) / 10 * 1 / | ||
!C880 | ||
!OK: Correct use | ||
DATA(largeNumber % numsArray(j) % one, j = 1, 10) / 10 * 1 / | ||
!C881 | ||
!ERROR: Data object must have constant bounds | ||
DATA(b(x), i = 1, 5) / 5 * 1 / | ||
!C881 | ||
!OK: Correct use | ||
DATA(nums % numbers(i), i = 1, 5) / 5 * 1 / | ||
!C881 | ||
!OK: Correct use | ||
DATA((d(i, j), i = 1, 10), j = 1, 10) / 100 * 1 / | ||
!C881 | ||
!OK: Correct use | ||
DATA(d(i, 1), i = 1, 10) / 10 * 1 / | ||
end | ||
end |