1 ! RUN: %python %S/test_errors.py %s %flang_fc1
2 ! Check for semantic errors in image_status(), as defined in
3 ! section 16.9.98 of the Fortran 2018 standard
5 program test_image_status
6 use iso_fortran_env
, only
: team_type
, stat_failed_image
, stat_stopped_image
9 type(team_type
) home
, league(2)
10 integer n
, image_num
, array(5), coindexed
[*], non_array_result
, array_2d(10, 10), not_team_type
11 integer, parameter :: array_with_negative(2) = [-2, 1]
12 integer, parameter :: array_with_zero(2) = [1, 0]
13 integer, parameter :: constant_integer
= 2, constant_negative
= -4, constant_zero
= 0
14 integer, allocatable
:: result_array(:), result_array_2d(:,:), wrong_rank_result(:)
15 logical wrong_arg_type_logical
16 real wrong_arg_type_real
17 character wrong_result_type
19 !___ standard-conforming statements ___
21 n
= image_status(constant_integer
)
22 n
= image_status(image_num
)
23 n
= image_status(array(1))
24 n
= image_status(coindexed
[1])
25 n
= image_status(image
=1)
26 result_array
= image_status(array
)
27 result_array_2d
= image_status(array_2d
)
29 n
= image_status(2, home
)
30 n
= image_status(2, league(1))
31 n
= image_status(image
=2, team
=home
)
32 n
= image_status(team
=home
, image
=2)
34 if (image_status(1) .eq
. stat_failed_image
.or
. image_status(1) .eq
. stat_stopped_image
) then
36 else if (image_status(1) .eq
. 0) then
40 !___ non-conforming statements ___
42 !ERROR: 'image=' argument for intrinsic 'image_status' must be a positive value, but is -1
45 !ERROR: 'image=' argument for intrinsic 'image_status' must be a positive value, but is 0
48 !ERROR: 'image=' argument for intrinsic 'image_status' must be a positive value, but is -4
49 n
= image_status(constant_negative
)
51 !ERROR: 'image=' argument for intrinsic 'image_status' must be a positive value, but is 0
52 n
= image_status(constant_zero
)
54 !ERROR: 'team=' argument has unacceptable rank 1
55 n
= image_status(1, team
=league
)
57 !ERROR: Actual argument for 'image=' has bad type 'REAL(4)'
60 !ERROR: Actual argument for 'image=' has bad type 'LOGICAL(4)'
61 n
= image_status(wrong_arg_type_logical
)
63 !ERROR: Actual argument for 'image=' has bad type 'REAL(4)'
64 n
= image_status(wrong_arg_type_real
)
66 !ERROR: Actual argument for 'team=' has bad type 'INTEGER(4)'
67 n
= image_status(1, not_team_type
)
69 !ERROR: Actual argument for 'team=' has bad type 'INTEGER(4)'
70 n
= image_status(1, 1)
72 !ERROR: Actual argument for 'image=' has bad type 'REAL(4)'
73 n
= image_status(image
=3.4)
75 !ERROR: Actual argument for 'team=' has bad type 'INTEGER(4)'
76 n
= image_status(1, team
=1)
78 !ERROR: too many actual arguments for intrinsic 'image_status'
79 n
= image_status(1, home
, 2)
81 !ERROR: repeated keyword argument to intrinsic 'image_status'
82 n
= image_status(image
=1, image
=2)
84 !ERROR: repeated keyword argument to intrinsic 'image_status'
85 n
= image_status(image
=1, team
=home
, team
=league(1))
87 !ERROR: unknown keyword argument to intrinsic 'image_status'
88 n
= image_status(images
=1)
90 !ERROR: unknown keyword argument to intrinsic 'image_status'
91 n
= image_status(1, my_team
=home
)
93 !ERROR: 'image=' argument for intrinsic 'image_status' must contain all positive values
94 result_array
= image_status(image
=array_with_negative
)
96 !ERROR: 'image=' argument for intrinsic 'image_status' must contain all positive values
97 result_array
= image_status(image
=[-2, 1])
99 !ERROR: 'image=' argument for intrinsic 'image_status' must contain all positive values
100 result_array
= image_status(image
=array_with_zero
)
102 !ERROR: 'image=' argument for intrinsic 'image_status' must contain all positive values
103 result_array
= image_status(image
=[1, 0])
105 !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches scalar INTEGER(4) and rank 1 array of INTEGER(4)
106 non_array_result
= image_status(image
=array
)
108 !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches rank 1 array of INTEGER(4) and rank 2 array of INTEGER(4)
109 wrong_rank_result
= image_status(array_2d
)
111 !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types CHARACTER(KIND=1) and INTEGER(4)
112 wrong_result_type
= image_status(1)
114 end program test_image_status