• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1! RUN: %S/test_errors.sh %s %t %f18
2! Confirm enforcement of constraints and restrictions in 7.8
3! C7110, C7111, C7112, C7113, C7114, C7115
4
5subroutine arrayconstructorvalues()
6  integer :: intarray(5)
7  integer(KIND=8) :: k8 = 20
8
9  TYPE EMPLOYEE
10    INTEGER AGE
11    CHARACTER (LEN = 30) NAME
12  END TYPE EMPLOYEE
13  TYPE EMPLOYEER
14    CHARACTER (LEN = 30) NAME
15  END TYPE EMPLOYEER
16
17  TYPE(EMPLOYEE) :: emparray(3)
18  class(*), pointer :: unlim_polymorphic
19  TYPE, ABSTRACT :: base_type
20    INTEGER :: CARPRIZE
21  END TYPE
22  ! Different declared type
23  !ERROR: Values in array constructor must have the same declared type when no explicit type appears
24  intarray = (/ 1, 2, 3, 4., 5/)  ! C7110
25  ! Different kind type parameter
26  !ERROR: Values in array constructor must have the same declared type when no explicit type appears
27  intarray = (/ 1,2,3,4, k8 /)    ! C7110
28
29  ! C7111
30  !ERROR: Value in array constructor of type 'LOGICAL(4)' could not be converted to the type of the array 'INTEGER(4)'
31  intarray = [integer:: .true., 2, 3, 4, 5]
32  !ERROR: Value in array constructor of type 'CHARACTER(1)' could not be converted to the type of the array 'INTEGER(4)'
33  intarray = [integer:: "RAM stores information", 2, 3, 4, 5]
34  !ERROR: Value in array constructor of type 'employee' could not be converted to the type of the array 'INTEGER(4)'
35  intarray = [integer:: EMPLOYEE (19, "Jack"), 2, 3, 4, 5]
36
37  ! C7112
38  !ERROR: Value in array constructor of type 'INTEGER(4)' could not be converted to the type of the array 'employee'
39  emparray = (/ EMPLOYEE:: EMPLOYEE(19, "Ganesh"), EMPLOYEE(22, "Omkar"), 19 /)
40  !ERROR: Value in array constructor of type 'employeer' could not be converted to the type of the array 'employee'
41  emparray = (/ EMPLOYEE:: EMPLOYEE(19, "Ganesh"), EMPLOYEE(22, "Ram"),EMPLOYEER("ShriniwasPvtLtd") /)
42
43  ! C7113
44  !ERROR: Cannot have an unlimited polymorphic value in an array constructor
45  !ERROR: Values in array constructor must have the same declared type when no explicit type appears
46  intarray = (/ unlim_polymorphic, 2, 3, 4, 5/)
47
48  ! C7114
49  !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types INTEGER(4) and TYPE(base_type)
50  !ERROR: ABSTRACT derived type 'base_type' may not be used in a structure constructor
51  !ERROR: Values in array constructor must have the same declared type when no explicit type appears
52  intarray = (/ base_type(10), 2, 3, 4, 5 /)
53end subroutine arrayconstructorvalues
54subroutine checkC7115()
55  real, dimension(10), parameter :: good1 = [(99.9, i = 1, 10)]
56  real, dimension(100), parameter :: good2 = [((88.8, i = 1, 10), j = 1, 10)]
57  !ERROR: Implied DO index is active in surrounding implied DO loop and may not have the same name
58  real, dimension(100), parameter :: bad = [((88.8, i = 1, 10), i = 1, 10)]
59
60  !ERROR: Value of named constant 'bad2' ([INTEGER(4)::(int(j,kind=4),INTEGER(8)::j=1_8,1_8,0_8)]) cannot be computed as a constant value
61  !ERROR: The stride of an implied DO loop must not be zero
62  integer, parameter :: bad2(*) = [(j, j=1,1,0)]
63end subroutine checkC7115
64subroutine checkOkDuplicates
65  real :: realArray(21) = &
66    [ ((1.0, iDuplicate = 1,j), &
67       (0.0, iDuplicate = j,3 ), &
68        j = 1,5 ) ]
69end subroutine
70