1! RUN: %S/test_errors.sh %s %t %flang_fc1 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 real, dimension(-1:0), parameter :: good3 = [77.7, 66.6] 58 !ERROR: Implied DO index is active in surrounding implied DO loop and may not have the same name 59 real, dimension(100), parameter :: bad = [((88.8, i = 1, 10), i = 1, 10)] 60 61 !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 62 !ERROR: The stride of an implied DO loop must not be zero 63 integer, parameter :: bad2(*) = [(j, j=1,1,0)] 64 integer, parameter, dimension(-1:0) :: negLower = (/343,512/) 65 integer, parameter, dimension(-1:0) :: negLower1 = ((/343,512/)) 66 67 real :: local 68 69 local = good3(0) 70 !ERROR: Subscript value (2) is out of range on dimension 1 in reference to a constant array value 71 local = good3(2) 72 call inner(negLower(:)) ! OK 73 call inner(negLower1(:)) ! OK 74 75 contains 76 subroutine inner(arg) 77 integer :: arg(:) 78 end subroutine inner 79end subroutine checkC7115 80subroutine checkOkDuplicates 81 real :: realArray(21) = & 82 [ ((1.0, iDuplicate = 1,j), & 83 (0.0, iDuplicate = j,3 ), & 84 j = 1,5 ) ] 85end subroutine 86