| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! This test checks for semantic errors in event post statements based on the |
| ! statement specification in section 11.6.7 of the Fortran 2018 standard. |
| ! Some of the errors in this test would be hidden by the errors in |
| ! the test event01a.f90 if they were included in that file, |
| ! and are thus tested here. |
| |
| program test_event_post |
| use iso_fortran_env, only : event_type |
| implicit none |
| |
| ! event_type variables must be coarrays |
| !ERROR: Variable 'non_coarray' with EVENT_TYPE or LOCK_TYPE must be a coarray |
| type(event_type) non_coarray |
| |
| ! event_type potential object components must be nested in coarrays |
| type :: has_event |
| type(event_type) event |
| end type |
| type :: bad1 |
| type(has_event) component |
| end type |
| type :: bad2 |
| type(has_event), allocatable :: component |
| end type |
| type :: good1 |
| type(has_event), pointer :: component |
| end type |
| type :: good2 |
| type(has_event), allocatable :: component[:] |
| end type |
| !ERROR: Variable 'non_coarray_component1' with EVENT_TYPE or LOCK_TYPE potential component '%event' must be a coarray |
| type(has_event) non_coarray_component1 |
| !ERROR: Variable 'non_coarray_component2' with EVENT_TYPE or LOCK_TYPE potential component '%component%event' must be a coarray |
| type(bad1) non_coarray_component2 |
| !ERROR: Variable 'non_coarray_component3' with EVENT_TYPE or LOCK_TYPE potential component '%component%event' must be a coarray |
| type(bad2) non_coarray_component3 |
| ! these are okay |
| type(has_event) ok_non_coarray_component1[*] |
| type(has_event), pointer :: ok_non_coarray_component2 |
| type(bad1) :: ok_non_coarray_component3[*] |
| type(bad1), pointer :: ok_non_coarray_component4 |
| type(bad2) :: ok_non_coarray_component5[*] |
| type(bad2), pointer :: ok_non_coarray_component6 |
| type(good1) ok_non_coarray_component7 |
| type(good2) ok_non_coarray_component8 |
| |
| type(event_type) concert[*], occurrences(2)[*] |
| integer non_event[*], sync_status, co_indexed_integer[*], superfluous_stat, non_scalar(1) |
| character(len=128) error_message, co_indexed_character[*], superfluous_errmsg |
| logical invalid_type |
| |
| !___ non-standard-conforming statements ___ |
| |
| !______ invalid event-variable ____________________________ |
| |
| ! event-variable must be event_type |
| !ERROR: The event-variable must be of type EVENT_TYPE from module ISO_FORTRAN_ENV |
| event post(non_event) |
| |
| !ERROR: Must be a scalar value, but is a rank-1 array |
| event post(occurrences) |
| |
| !ERROR: Must be a scalar value, but is a rank-1 array |
| event post(occurrences(:)[1]) |
| |
| !______ invalid sync-stat-lists: invalid stat= ____________ |
| |
| !ERROR: Must have INTEGER type, but is LOGICAL(4) |
| event post(concert, stat=invalid_type) |
| |
| !ERROR: Must be a scalar value, but is a rank-1 array |
| event post(concert, stat=non_scalar) |
| |
| !______ invalid sync-stat-lists: invalid errmsg= ____________ |
| |
| !ERROR: Must have CHARACTER type, but is LOGICAL(4) |
| event post(concert, errmsg=invalid_type) |
| |
| !______ invalid sync-stat-lists: redundant sync-stat-list ____________ |
| |
| !ERROR: The stat-variable in a sync-stat-list may not be repeated |
| event post(concert, stat=sync_status, stat=superfluous_stat) |
| |
| !ERROR: The stat-variable in a sync-stat-list may not be repeated |
| event post(concert, errmsg=error_message, stat=sync_status, stat=superfluous_stat) |
| |
| !ERROR: The stat-variable in a sync-stat-list may not be repeated |
| event post(concert, stat=sync_status, errmsg=error_message, stat=superfluous_stat) |
| |
| !ERROR: The stat-variable in a sync-stat-list may not be repeated |
| event post(concert, stat=sync_status, stat=superfluous_stat, errmsg=error_message) |
| |
| !ERROR: The errmsg-variable in a sync-stat-list may not be repeated |
| event post(concert, errmsg=error_message, errmsg=superfluous_errmsg) |
| |
| !ERROR: The errmsg-variable in a sync-stat-list may not be repeated |
| event post(concert, stat=sync_status, errmsg=error_message, errmsg=superfluous_errmsg) |
| |
| !ERROR: The errmsg-variable in a sync-stat-list may not be repeated |
| event post(concert, errmsg=error_message, stat=sync_status, errmsg=superfluous_errmsg) |
| |
| !ERROR: The errmsg-variable in a sync-stat-list may not be repeated |
| event post(concert, errmsg=error_message, errmsg=superfluous_errmsg, stat=sync_status) |
| |
| !______ invalid sync-stat-lists: coindexed stat-variable - C1173____________ |
| |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| event post(concert, stat=co_indexed_integer[1]) |
| |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| event post(concert, errmsg=co_indexed_character[1]) |
| |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| event post(concert, stat=co_indexed_integer[1], errmsg=error_message) |
| |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| event post(concert, stat=sync_status, errmsg=co_indexed_character[1]) |
| |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| event post(concert, stat=co_indexed_integer[1], errmsg=co_indexed_character[1]) |
| |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| !ERROR: The stat-variable or errmsg-variable in a sync-stat-list may not be a coindexed object |
| event post(concert, errmsg=co_indexed_character[1], stat=co_indexed_integer[1]) |
| |
| end program test_event_post |