diff --git a/flang/test/Semantics/error_stop.f90 b/flang/test/Semantics/error_stop1a.f90 rename from flang/test/Semantics/error_stop.f90 rename to flang/test/Semantics/error_stop1a.f90 --- a/flang/test/Semantics/error_stop.f90 +++ b/flang/test/Semantics/error_stop1a.f90 @@ -14,7 +14,7 @@ !___ standard-conforming statements ____________________________ error stop - !___ standard-conforming statement with stop-code ______________ + !___ standard-conforming statements with stop-code ______________ error stop int_code error stop 5 error stop (5) @@ -32,7 +32,7 @@ error stop array_coarray(1) error stop array_coarray(1)[1] - !___ standard-conforming statement with stop-code and quiet= ___ + !___ standard-conforming statements with stop-code and quiet= ___ error stop int_code, quiet=bool error stop int_code, quiet=logical_array(1) error stop int_code, quiet=logical_coarray @@ -40,36 +40,12 @@ error stop int_code, quiet=.true. error stop (int_code), quiet=.false. - !___ non-standard-conforming statement _________________________ + !___ non-standard-conforming statements _________________________ ! unknown stop-code !ERROR: expected execution part construct error stop code=int_code - ! invalid stop-code typing - error stop non_integer - - ! invalid stop-code typing - error stop non_character - - ! stop-code must be of default kind - error stop non_default_int_kind - - ! stop-code must be of default kind - error stop non_default_char_kind - - ! stop-code must be scalar - error stop char_array - - ! stop-code must be scalar - error stop array_coarray[1] - - ! invalid quiet= typing - error stop int_code, quiet=non_logical - - ! quiet= must be scalar - error stop int_code, quiet=logical_array - ! missing 'quiet=' !ERROR: expected execution part construct error stop int_code, bool diff --git a/flang/test/Semantics/error_stop1b.f90 b/flang/test/Semantics/error_stop1b.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/error_stop1b.f90 @@ -0,0 +1,42 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for semantic errors in error stop statements based on the +! statement specification in section 11.4 of the Fortran 2018 standard. +! The errors in this test are hidden by the errors in +! the test error_stop01a.f90, and are thus tested here. + +program test_error_stop + implicit none + + integer int_code, int_array(1), int_coarray[*], array_coarray(1)[*] + integer(kind=1) non_default_int_kind + character(len=128) char_code, char_array(1), char_coarray[*], non_logical + character(kind=4, len=128) non_default_char_kind + logical bool, logical_array(1), logical_coarray[*], non_integer, non_character + + !___ non-standard-conforming statements _________________________ + + !ERROR: Stop code must be of INTEGER or CHARACTER type + error stop non_integer + + !ERROR: Stop code must be of INTEGER or CHARACTER type + error stop non_character + + !ERROR: INTEGER stop code must be of default kind + error stop non_default_int_kind + + !ERROR: CHARACTER stop code must be of default kind + error stop non_default_char_kind + + !ERROR: Must be a scalar value, but is a rank-1 array + error stop char_array + + !ERROR: Must be a scalar value, but is a rank-1 array + error stop array_coarray[1] + + !ERROR: Must have LOGICAL type, but is CHARACTER(KIND=1,LEN=128_8) + error stop int_code, quiet=non_logical + + !ERROR: Must be a scalar value, but is a rank-1 array + error stop int_code, quiet=logical_array + +end program test_error_stop diff --git a/flang/test/Semantics/event01.f90 b/flang/test/Semantics/event01a.f90 rename from flang/test/Semantics/event01.f90 rename to flang/test/Semantics/event01a.f90 --- a/flang/test/Semantics/event01.f90 +++ b/flang/test/Semantics/event01a.f90 @@ -14,7 +14,7 @@ character(len=128) error_message, co_indexed_character[*], superfluous_errmsg logical invalid_type - !___ standard-conforming statement ___ + !___ standard-conforming statements ___ event post(concert) event post(concert[1]) @@ -24,22 +24,10 @@ event post(concert, errmsg=error_message) event post(concert, stat=sync_status, errmsg=error_message) - !___ non-standard-conforming statement ___ + !___ non-standard-conforming statements ___ !______ invalid event-variable ____________________________ - ! event-variable must be event_type - event post(non_event) - - ! event-variable must be a coarray - event post(non_coarray) - - ! event-variable must be a scalar variable - event post(occurrences) - - ! event-variable must be a scalar variable - event post(occurrences[1]) - ! event-variable has an unknown keyword argument !ERROR: expected ')' event post(event=concert) @@ -50,12 +38,6 @@ !ERROR: expected ')' event post(concert, status=sync_status) - ! Stat-variable must an integer scalar - event post(concert, stat=invalid_type) - - ! Stat-variable must an integer scalar - event post(concert, stat=non_scalar) - ! Invalid sync-stat-list: missing stat-variable !ERROR: expected ')' event post(concert, stat) @@ -70,9 +52,6 @@ !ERROR: expected ')' event post(concert, errormsg=error_message) - ! Invalid errmsg-variable argument typing - event post(concert, errmsg=invalid_type) - ! Invalid sync-stat-list: missing 'errmsg=' !ERROR: expected ')' event post(concert, error_message) @@ -91,20 +70,4 @@ !ERROR: expected ')' event post(concert, occurrences(1), stat=sync_status, errmsg=error_message) - !______ invalid sync-stat-lists: redundant sync-stat-list ____________ - - ! No specifier shall appear more than once in a given sync-stat-list - event post(concert, stat=sync_status, stat=superfluous_stat) - - ! No specifier shall appear more than once in a given sync-stat-list - event post(concert, errmsg=error_message, errmsg=superfluous_errmsg) - - !______ invalid sync-stat-lists: coindexed stat-variable ____________ - - ! Check constraint C1173 from the Fortran 2018 standard - event post(concert, stat=co_indexed_integer[1]) - - ! Check constraint C1173 from the Fortran 2018 standard - event post(concert, errmsg=co_indexed_character[1]) - end program test_event_post diff --git a/flang/test/Semantics/event01b.f90 b/flang/test/Semantics/event01b.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/event01b.f90 @@ -0,0 +1,64 @@ +! 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 are hidden by the errors in +! the test event01a.f90, and are thus tested here. + +program test_event_post + use iso_fortran_env, only : event_type + implicit none + + ! event_type variables must be coarrays + type(event_type) non_coarray + + 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 + event post(non_event) + + ! event-variable must be a coarray + event post(non_coarray) + + !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 ____________ + + ! No specifier shall appear more than once in a given sync-stat-list + event post(concert, stat=sync_status, stat=superfluous_stat) + + ! No specifier shall appear more than once in a given sync-stat-list + event post(concert, errmsg=error_message, errmsg=superfluous_errmsg) + + !______ invalid sync-stat-lists: coindexed stat-variable ____________ + + ! Check constraint C1173 from the Fortran 2018 standard + event post(concert, stat=co_indexed_integer[1]) + + ! Check constraint C1173 from the Fortran 2018 standard + event post(concert, errmsg=co_indexed_character[1]) + +end program test_event_post diff --git a/flang/test/Semantics/event02.f90 b/flang/test/Semantics/event02a.f90 rename from flang/test/Semantics/event02.f90 rename to flang/test/Semantics/event02a.f90 --- a/flang/test/Semantics/event02.f90 +++ b/flang/test/Semantics/event02a.f90 @@ -14,7 +14,7 @@ character(len=128) error_message, non_scalar_char(1), co_indexed_character[*], superfluous_errmsg logical invalid_type - !_______________________ standard-conforming statement ___________________________ + !_______________________ standard-conforming statements ___________________________ event wait(concert) event wait(occurrences(1)) @@ -28,25 +28,10 @@ event wait(concert, stat=sync_status, errmsg=error_message) event wait(concert, until_count=threshold, stat=sync_status, errmsg=error_message) - !____________________ non-standard-conforming statement __________________________ + !____________________ non-standard-conforming statements __________________________ !_________________________ invalid event-variable ________________________________ - ! event-variable must be event_type - event wait(non_event) - - ! event-variable must be a coarray - event wait(non_coarray) - - ! event-variable must not be coindexed - event wait(concert[1]) - - ! event-variable must not be coindexed - event wait(occurrences(1)[1]) - - ! event-variable must be a scalar variable - event wait(occurrences) - ! event-variable has an unknown expression !ERROR: expected ')' event wait(event=concert) @@ -57,12 +42,6 @@ !ERROR: expected ')' event wait(concert, until_amount=threshold) - ! Until-spec must be an integer scalar - event wait(concert, until_count=invalid_type) - - ! Until-spec must be an integer scalar - event wait(concert, until_count=non_scalar) - ! Invalid until-spec: missing until-spec variable !ERROR: expected ')' event wait(concert, until_count) @@ -77,12 +56,6 @@ !ERROR: expected ')' event wait(concert, status=sync_status) - ! Stat-variable must be an integer scalar - event wait(concert, stat=invalid_type) - - ! Stat-variable must be an integer scalar - event wait(concert, stat=non_scalar) - ! Invalid sync-stat-list: missing stat-variable !ERROR: expected ')' event wait(concert, stat) @@ -97,12 +70,6 @@ !ERROR: expected ')' event wait(concert, errormsg=error_message) - ! Errmsg-variable must be a character scalar - event wait(concert, errmsg=invalid_type) - - ! Errmsg-variable must be a character scalar - event wait(concert, errmsg=non_scalar_char) - ! Invalid sync-stat-list: missing 'errmsg=' !ERROR: expected ')' event wait(concert, error_message) @@ -119,23 +86,4 @@ !ERROR: expected ')' event wait(concert, occurrences(1), stat=sync_status, errmsg=error_message) - !______ invalid event-wait-spec-lists: redundant event-wait-spec-list ____________ - - ! No specifier shall appear more than once in a given event-wait-spec-list - event wait(concert, until_count=threshold, until_count=indexed(1)) - - ! No specifier shall appear more than once in a given event-wait-spec-list - event wait(concert, stat=sync_status, stat=superfluous_stat) - - ! No specifier shall appear more than once in a given event-wait-spec-list - event wait(concert, errmsg=error_message, errmsg=superfluous_errmsg) - - !_____________ invalid sync-stat-lists: coindexed stat-variable __________________ - - ! Check constraint C1173 from the Fortran 2018 standard - event wait(concert, stat=co_indexed_integer[1]) - - ! Check constraint C1173 from the Fortran 2018 standard - event wait(concert, errmsg=co_indexed_character[1]) - end program test_event_wait diff --git a/flang/test/Semantics/event02b.f90 b/flang/test/Semantics/event02b.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/event02b.f90 @@ -0,0 +1,81 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for semantic errors in event wait statements based on the +! statement specification in section 11.6.8 of the Fortran 2018 standard. +! Some of the errors in this test are hidden by the errors in +! the test event02a.f90, and are thus tested here. + +program test_event_wait + use iso_fortran_env, only : event_type + implicit none + + ! event_type variables must be coarrays + type(event_type) non_coarray + + type(event_type) concert[*], occurrences(2)[*] + integer threshold, indexed(1), non_event[*], sync_status, co_indexed_integer[*], superfluous_stat, non_scalar(1) + character(len=128) error_message, non_scalar_char(1), co_indexed_character[*], superfluous_errmsg + logical invalid_type + + !____________________ non-standard-conforming statements __________________________ + + !_________________________ invalid event-variable ________________________________ + + ! event-variable must be event_type + event wait(non_event) + + ! event-variable must be a coarray + event wait(non_coarray) + + ! event-variable must not be coindexed + event wait(concert[1]) + + ! event-variable must not be coindexed + event wait(occurrences(1)[1]) + + !ERROR: Must be a scalar value, but is a rank-1 array + event wait(occurrences) + + !_____________ invalid event-wait-spec-lists: invalid until-spec _________________ + + !ERROR: Must have INTEGER type, but is LOGICAL(4) + event wait(concert, until_count=invalid_type) + + !ERROR: Must be a scalar value, but is a rank-1 array + event wait(concert, until_count=non_scalar) + + !_________________ invalid sync-stat-lists: invalid stat= ________________________ + + !ERROR: Must have INTEGER type, but is LOGICAL(4) + event wait(concert, stat=invalid_type) + + !ERROR: Must be a scalar value, but is a rank-1 array + event wait(concert, stat=non_scalar) + + !________________ invalid sync-stat-lists: invalid errmsg= _______________________ + + !ERROR: Must have CHARACTER type, but is LOGICAL(4) + event wait(concert, errmsg=invalid_type) + + !ERROR: Must be a scalar value, but is a rank-1 array + event wait(concert, errmsg=non_scalar_char) + + !______ invalid event-wait-spec-lists: redundant event-wait-spec-list ____________ + + ! No specifier shall appear more than once in a given event-wait-spec-list + event wait(concert, until_count=threshold, until_count=indexed(1)) + + ! No specifier shall appear more than once in a given event-wait-spec-list + event wait(concert, stat=sync_status, stat=superfluous_stat) + + ! No specifier shall appear more than once in a given event-wait-spec-list + event wait(concert, errmsg=error_message, errmsg=superfluous_errmsg) + + !_____________ invalid sync-stat-lists: coindexed stat-variable __________________ + + ! Check constraint C1173 from the Fortran 2018 standard + event wait(concert, stat=co_indexed_integer[1]) + + ! Check constraint C1173 from the Fortran 2018 standard + event wait(concert, errmsg=co_indexed_character[1]) + +end program test_event_wait diff --git a/flang/test/Semantics/synchronization01.f90 b/flang/test/Semantics/synchronization01.f90 deleted file mode 100644 --- a/flang/test/Semantics/synchronization01.f90 +++ /dev/null @@ -1,80 +0,0 @@ -! RUN: %python %S/test_errors.py %s %flang_fc1 -! XFAIL: * -! This test checks for semantic errors in sync all statements based on the -! statement specification in section 11.6.3 of the Fortran 2018 standard. - -program test_sync_all - implicit none - - integer sync_status, co_indexed_integer[*], superfluous_stat, non_scalar(1) - character(len=128) error_message, co_indexed_character[*], superfluous_errmsg - logical invalid_type - - !___ standard-conforming statement ___ - - sync all - sync all(stat=sync_status) - sync all( errmsg=error_message) - sync all(stat=sync_status, errmsg=error_message) - - !___ non-standard-conforming statement ___ - - !______ invalid sync-stat-lists: invalid stat= ____________ - - !ERROR: expected execution part construct - sync all(status=sync_status) - - ! Stat-variable must an integer scalar - !ERROR: TBD - sync all(stat=invalid_type) - - ! Stat-variable must an integer scalar - !ERROR: TBD - sync all(stat=non_scalar) - - ! Invalid sync-stat-list: missing stat-variable - !ERROR: expected execution part construct - sync all(stat) - - ! Invalid sync-stat-list: missing 'stat=' - !ERROR: expected execution part construct - sync all(sync_status) - - !______ invalid sync-stat-lists: invalid errmsg= ____________ - - ! Invalid errmsg-variable keyword - !ERROR: expected execution part construct - sync all(errormsg=error_message) - - !ERROR: TBD - sync all(errmsg=invalid_type) - - ! Invalid sync-stat-list: missing 'errmsg=' - !ERROR: expected execution part construct - sync all(error_message) - - ! Invalid sync-stat-list: missing errmsg-variable - !ERROR: expected execution part construct - sync all(errmsg) - - !______ invalid sync-stat-lists: redundant sync-stat-list ____________ - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync all(stat=sync_status, stat=superfluous_stat) - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync all(errmsg=error_message, errmsg=superfluous_errmsg) - - !______ invalid sync-stat-lists: coindexed stat-variable ____________ - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync all(stat=co_indexed_integer[1]) - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync all(errmsg=co_indexed_character[1]) - -end program test_sync_all diff --git a/flang/test/Semantics/synchronization01a.f90 b/flang/test/Semantics/synchronization01a.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/synchronization01a.f90 @@ -0,0 +1,48 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for errors in sync all statements based on the +! statement specification in section 11.6.3 of the Fortran 2018 standard. + +program test_sync_all + implicit none + + integer sync_status + character(len=128) error_message + + !___ standard-conforming statement ___ + + sync all + sync all() + sync all(stat=sync_status) + sync all( errmsg=error_message) + sync all(stat=sync_status, errmsg=error_message) + + !___ non-standard-conforming statement ___ + + !______ invalid sync-stat-lists: invalid stat= ____________ + + !ERROR: expected execution part construct + sync all(status=sync_status) + + ! Invalid sync-stat-list: missing stat-variable + !ERROR: expected execution part construct + sync all(stat) + + ! Invalid sync-stat-list: missing 'stat=' + !ERROR: expected execution part construct + sync all(sync_status) + + !______ invalid sync-stat-lists: invalid errmsg= ____________ + + ! Invalid errmsg-variable keyword + !ERROR: expected execution part construct + sync all(errormsg=error_message) + + ! Invalid sync-stat-list: missing 'errmsg=' + !ERROR: expected execution part construct + sync all(error_message) + + ! Invalid sync-stat-list: missing errmsg-variable + !ERROR: expected execution part construct + sync all(errmsg) + +end program test_sync_all diff --git a/flang/test/Semantics/synchronization01b.f90 b/flang/test/Semantics/synchronization01b.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/synchronization01b.f90 @@ -0,0 +1,36 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for semantic errors in sync all statements. +! Some of the errors in this test are hidden by the errors in +! the test synchronization01a.f90, and are thus tested here. + +program test_sync_all + implicit none + + integer 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 ___ + + !ERROR: Must have INTEGER type, but is LOGICAL(4) + sync all(stat=invalid_type) + + !ERROR: Must be a scalar value, but is a rank-1 array + sync all(stat=non_scalar) + + !ERROR: Must have CHARACTER type, but is LOGICAL(4) + sync all(errmsg=invalid_type) + + ! No specifier shall appear more than once in a given sync-stat-list + sync all(stat=sync_status, stat=superfluous_stat) + + ! No specifier shall appear more than once in a given sync-stat-list + sync all(errmsg=error_message, errmsg=superfluous_errmsg) + + ! Fortran 2018 standard C1173: `stat` shall not be coindexed + sync all(stat=co_indexed_integer[1]) + + ! Fortran 2018 standard C1173: `errmsg` shall not be coindexed + sync all(errmsg=co_indexed_character[1]) + +end program test_sync_all diff --git a/flang/test/Semantics/synchronization02.f90 b/flang/test/Semantics/synchronization02a.f90 rename from flang/test/Semantics/synchronization02.f90 rename to flang/test/Semantics/synchronization02a.f90 --- a/flang/test/Semantics/synchronization02.f90 +++ b/flang/test/Semantics/synchronization02a.f90 @@ -1,15 +1,12 @@ ! RUN: %python %S/test_errors.py %s %flang_fc1 -! XFAIL: * -! Check for semantic errors in sync images statements +! Check for errors in sync images statements program test_sync_images implicit none - integer, parameter :: invalid_rank(*,*) = reshape([1], [1,1]) - integer sync_status, non_scalar(2), superfluous_stat, coindexed_integer[*], me - character(len=128) error_message, superfluous_errmsg, coindexed_character[*] - logical invalid_type - + integer sync_status, me + character(len=128) error_message + !___ standard-conforming statement ___ sync images(*, stat=sync_status, errmsg=error_message) @@ -31,33 +28,15 @@ !___ non-standard-conforming statement ___ - !______ invalid image sets ______ - - ! Image set shall not depend on the value of stat-variable - !ERROR: TBD - sync images(sync_status, stat=sync_status) - - ! Image set shall not depend on the value of errmsg-variable - !ERROR: TBD - sync images(len(error_message), errmsg=error_message) + !ERROR: expected '(' + sync images - ! Image set shall be a scalar or rank-1 array - !ERROR: TBD - sync images(invalid_rank) - !______ invalid sync-stat-lists: invalid stat= ____________ ! Invalid sync-stat-list keyword !ERROR: expected ')' sync images(1, status=sync_status) - !ERROR: TBD - sync images([1], stat=invalid_type) - - ! Stat-variable must an integer scalar - !ERROR: TBD - sync images(*, stat=non_scalar) - ! Invalid sync-stat-list: missing stat-variable !ERROR: expected ')' sync images(1, stat) @@ -72,9 +51,6 @@ !ERROR: expected ')' sync images(*, errormsg=error_message) - !ERROR: TBD - sync images(1, errmsg=invalid_type) - ! Invalid sync-stat-list: missing 'errmsg=' !ERROR: expected ')' sync images([1], error_message) @@ -83,24 +59,4 @@ !ERROR: expected ')' sync images(*, errmsg) - !______ invalid sync-stat-lists: redundant sync-stat-list ____________ - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync images(1, stat=sync_status, stat=superfluous_stat) - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync images([1], errmsg=error_message, errmsg=superfluous_errmsg) - - !______ invalid sync-stat-lists: coindexed stat-variable ____________ - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync images(*, stat=coindexed_integer[1]) - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync images(1, errmsg=coindexed_character[1]) - end program test_sync_images diff --git a/flang/test/Semantics/synchronization02b.f90 b/flang/test/Semantics/synchronization02b.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/synchronization02b.f90 @@ -0,0 +1,46 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! Check for semantic errors in sync images statements. +! Some of the errors in this test are hidden by the errors in +! the test synchronization02a.f90, and are thus tested here. + +program test_sync_images + implicit none + + integer, parameter :: invalid_rank(*,*) = reshape([1], [1,1]) + integer sync_status, non_scalar(2), superfluous_stat, coindexed_integer[*] + character(len=128) error_message, superfluous_errmsg, coindexed_character[*] + logical invalid_type + + !___ non-standard-conforming statements ___ + + ! Image set shall not depend on the value of stat-variable + sync images(sync_status, stat=sync_status) + + ! Image set shall not depend on the value of errmsg-variable + sync images(len(error_message), errmsg=error_message) + + ! Image set shall be a scalar or rank-1 array + sync images(invalid_rank) + + !ERROR: Must have INTEGER type, but is LOGICAL(4) + sync images([1], stat=invalid_type) + + !ERROR: Must be a scalar value, but is a rank-1 array + sync images(*, stat=non_scalar) + + !ERROR: Must have CHARACTER type, but is LOGICAL(4) + sync images(1, errmsg=invalid_type) + + ! No specifier shall appear more than once in a given sync-stat-list + sync images(1, stat=sync_status, stat=superfluous_stat) + + ! No specifier shall appear more than once in a given sync-stat-list + sync images([1], errmsg=error_message, errmsg=superfluous_errmsg) + + ! Fortran 2018 standard C1173: `stat` shall not be coindexed + sync images(*, stat=coindexed_integer[1]) + + ! Fortran 2018 standard C1173: `errmsg` shall not be coindexed + sync images(1, errmsg=coindexed_character[1]) + +end program test_sync_images diff --git a/flang/test/Semantics/synchronization03.f90 b/flang/test/Semantics/synchronization03.f90 deleted file mode 100644 --- a/flang/test/Semantics/synchronization03.f90 +++ /dev/null @@ -1,80 +0,0 @@ -! RUN: %python %S/test_errors.py %s %flang_fc1 -! XFAIL: * -! This test checks for semantic errors in sync memory statements based on the -! statement specification in section 11.6.5 of the Fortran 2018 standard. - -program test_sync_memory - implicit none - - integer sync_status, co_indexed_integer[*], superfluous_stat, non_scalar(1) - character(len=128) error_message, co_indexed_character[*], superfluous_errmsg - logical invalid_type - - !___ standard-conforming statement ___ - - sync memory - sync memory(stat=sync_status) - sync memory( errmsg=error_message) - sync memory(stat=sync_status, errmsg=error_message) - - !___ non-standard-conforming statement ___ - - !______ invalid sync-stat-lists: invalid stat= ____________ - - !ERROR: expected execution part construct - sync memory(status=sync_status) - - ! Stat-variable must an integer scalar - !ERROR: TBD - sync memory(stat=invalid_type) - - ! Stat-variable must an integer scalar - !ERROR: TBD - sync memory(stat=non_scalar) - - ! Invalid sync-stat-list: missing stat-variable - !ERROR: expected execution part construct - sync memory(stat) - - ! Invalid sync-stat-list: missing 'stat=' - !ERROR: expected execution part construct - sync memory(sync_status) - - !______ invalid sync-stat-lists: invalid errmsg= ____________ - - ! Invalid errmsg-variable keyword - !ERROR: expected execution part construct - sync memory(errormsg=error_message) - - !ERROR: TBD - sync memory(errmsg=invalid_type) - - ! Invalid sync-stat-list: missing 'errmsg=' - !ERROR: expected execution part construct - sync memory(error_message) - - ! Invalid sync-stat-list: missing errmsg-variable - !ERROR: expected execution part construct - sync memory(errmsg) - - !______ invalid sync-stat-lists: redundant sync-stat-list ____________ - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync memory(stat=sync_status, stat=superfluous_stat) - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync memory(errmsg=error_message, errmsg=superfluous_errmsg) - - !______ invalid sync-stat-lists: coindexed stat-variable ____________ - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync memory(stat=co_indexed_integer[1]) - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync memory(errmsg=co_indexed_character[1]) - -end program test_sync_memory diff --git a/flang/test/Semantics/synchronization03a.f90 b/flang/test/Semantics/synchronization03a.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/synchronization03a.f90 @@ -0,0 +1,48 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for errors in sync memory statements based on the +! statement specification in section 11.6.5 of the Fortran 2018 standard. + +program test_sync_memory + implicit none + + integer sync_status + character(len=128) error_message + + !___ standard-conforming statements ___ + + sync memory + sync memory() + sync memory(stat=sync_status) + sync memory( errmsg=error_message) + sync memory(stat=sync_status, errmsg=error_message) + + !___ non-standard-conforming statements ___ + + !______ invalid sync-stat-lists: invalid stat= ____________ + + !ERROR: expected execution part construct + sync memory(status=sync_status) + + ! Invalid sync-stat-list: missing stat-variable + !ERROR: expected execution part construct + sync memory(stat) + + ! Invalid sync-stat-list: missing 'stat=' + !ERROR: expected execution part construct + sync memory(sync_status) + + !______ invalid sync-stat-lists: invalid errmsg= ____________ + + ! Invalid errmsg-variable keyword + !ERROR: expected execution part construct + sync memory(errormsg=error_message) + + ! Invalid sync-stat-list: missing 'errmsg=' + !ERROR: expected execution part construct + sync memory(error_message) + + ! Invalid sync-stat-list: missing errmsg-variable + !ERROR: expected execution part construct + sync memory(errmsg) + +end program test_sync_memory diff --git a/flang/test/Semantics/synchronization03b.f90 b/flang/test/Semantics/synchronization03b.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/synchronization03b.f90 @@ -0,0 +1,36 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for semantic errors in sync memory statements. +! Some of the errors in this test are hidden by the errors in +! the test synchronization03a.f90, and are thus tested here. + +program test_sync_memory + implicit none + + integer 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 ___ + + !ERROR: Must have INTEGER type, but is LOGICAL(4) + sync memory(stat=invalid_type) + + !ERROR: Must be a scalar value, but is a rank-1 array + sync memory(stat=non_scalar) + + !ERROR: Must have CHARACTER type, but is LOGICAL(4) + sync memory(errmsg=invalid_type) + + ! No specifier shall appear more than once in a given sync-stat-list + sync memory(stat=sync_status, stat=superfluous_stat) + + ! No specifier shall appear more than once in a given sync-stat-list + sync memory(errmsg=error_message, errmsg=superfluous_errmsg) + + ! Fortran 2018 standard C1173: `stat` shall not be coindexed + sync memory(stat=co_indexed_integer[1]) + + ! Fortran 2018 standard C1173: `errmsg` shall not be coindexed + sync memory(errmsg=co_indexed_character[1]) + +end program test_sync_memory diff --git a/flang/test/Semantics/synchronization04.f90 b/flang/test/Semantics/synchronization04.f90 deleted file mode 100644 --- a/flang/test/Semantics/synchronization04.f90 +++ /dev/null @@ -1,91 +0,0 @@ -! RUN: %python %S/test_errors.py %s %flang_fc1 -! XFAIL: * -! This test checks for semantic errors in sync team statements based on the -! statement specification in section 11.6.6 of the Fortran 2018 standard. - -program test_sync_team - use iso_fortran_env, only : team_type - implicit none - - integer sync_status, co_indexed_integer[*], superfluous_stat, non_scalar(1), not_a_team - character(len=128) error_message, co_indexed_character[*], superfluous_errmsg - logical invalid_type - type(team_type) warriors - - - !___ standard-conforming statement ___ - - sync team(warriors) - sync team(warriors, stat=sync_status) - sync team(warriors, errmsg=error_message) - sync team(warriors, stat=sync_status, errmsg=error_message) - - !___ non-standard-conforming statement ___ - - !______ missing or invalid team-value _____________________ - - !ERROR: TBD - sync team(not_a_team) - - !ERROR: expected ')' - sync team(stat=sync_status, errmsg=error_message) - - !______ invalid sync-stat-lists: invalid stat= ____________ - - !ERROR: expected ')' - sync team(warriors, status=sync_status) - - ! Stat-variable must an integer scalar - !ERROR: TBD - sync team(warriors, stat=invalid_type) - - ! Stat-variable must an integer scalar - !ERROR: TBD - sync team(warriors, stat=non_scalar) - - ! Invalid sync-stat-list: missing stat-variable - !ERROR: expected ')' - sync team(warriors, stat) - - ! Invalid sync-stat-list: missing 'stat=' - !ERROR: expected ')' - sync team(warriors, sync_status) - - !______ invalid sync-stat-lists: invalid errmsg= ____________ - - ! Invalid errmsg-variable keyword - !ERROR: expected ')' - sync team(warriors, errormsg=error_message) - - !ERROR: TBD - sync team(warriors, errmsg=invalid_type) - - ! Invalid sync-stat-list: missing 'errmsg=' - !ERROR: expected ')' - sync team(warriors, error_message) - - ! Invalid sync-stat-list: missing errmsg-variable - !ERROR: expected ')' - sync team(warriors, errmsg) - - !______ invalid sync-stat-lists: redundant sync-stat-list ____________ - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync team(warriors, stat=sync_status, stat=superfluous_stat) - - ! No specifier shall appear more than once in a given sync-stat-list - !ERROR: to be determined - sync team(warriors, errmsg=error_message, errmsg=superfluous_errmsg) - - !______ invalid sync-stat-lists: coindexed stat-variable ____________ - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync team(warriors, stat=co_indexed_integer[1]) - - ! Check constraint C1173 from the Fortran 2018 standard - !ERROR: to be determined - sync team(warriors, errmsg=co_indexed_character[1]) - -end program test_sync_team diff --git a/flang/test/Semantics/synchronization04a.f90 b/flang/test/Semantics/synchronization04a.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/synchronization04a.f90 @@ -0,0 +1,57 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for errors in sync team statements based on the +! statement specification in section 11.6.6 of the Fortran 2018 standard. + +program test_sync_team + use iso_fortran_env, only : team_type + implicit none + + integer sync_status + character(len=128) error_message + type(team_type) warriors + + !___ standard-conforming statement ___ + + sync team(warriors) + sync team(warriors, stat=sync_status) + sync team(warriors, errmsg=error_message) + sync team(warriors, stat=sync_status, errmsg=error_message) + + !___ non-standard-conforming statement ___ + + !______ missing team-value _____________________ + + !ERROR: expected '(' + sync team + + !ERROR: expected ')' + sync team(stat=sync_status, errmsg=error_message) + + !______ invalid sync-stat-lists: invalid stat= ____________ + + !ERROR: expected ')' + sync team(warriors, status=sync_status) + + ! Invalid sync-stat-list: missing stat-variable + !ERROR: expected ')' + sync team(warriors, stat) + + ! Invalid sync-stat-list: missing 'stat=' + !ERROR: expected ')' + sync team(warriors, sync_status) + + !______ invalid sync-stat-lists: invalid errmsg= ____________ + + ! Invalid errmsg-variable keyword + !ERROR: expected ')' + sync team(warriors, errormsg=error_message) + + ! Invalid sync-stat-list: missing 'errmsg=' + !ERROR: expected ')' + sync team(warriors, error_message) + + ! Invalid sync-stat-list: missing errmsg-variable + !ERROR: expected ')' + sync team(warriors, errmsg) + +end program test_sync_team diff --git a/flang/test/Semantics/synchronization04b.f90 b/flang/test/Semantics/synchronization04b.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/synchronization04b.f90 @@ -0,0 +1,41 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +! This test checks for semantic errors in sync team statements. +! Some of the errors in this test are hidden by the errors in +! the test synchronization04a.f90, and are thus tested here. + +program test_sync_team + use iso_fortran_env, only : team_type + implicit none + + integer sync_status, co_indexed_integer[*], superfluous_stat, non_scalar(1), not_a_team + character(len=128) error_message, co_indexed_character[*], superfluous_errmsg + logical invalid_type + type(team_type) warriors + + !___ non-standard-conforming statements ___ + + !ERROR: Team value must be of type TEAM_TYPE from module ISO_FORTRAN_ENV + sync team(not_a_team) + + !ERROR: Must have INTEGER type, but is LOGICAL(4) + sync team(warriors, stat=invalid_type) + + !ERROR: Must be a scalar value, but is a rank-1 array + sync team(warriors, stat=non_scalar) + + !ERROR: Must have CHARACTER type, but is LOGICAL(4) + sync team(warriors, errmsg=invalid_type) + + ! No specifier shall appear more than once in a given sync-stat-list + sync team(warriors, stat=sync_status, stat=superfluous_stat) + + ! No specifier shall appear more than once in a given sync-stat-list + sync team(warriors, errmsg=error_message, errmsg=superfluous_errmsg) + + ! Fortran 2018 standard C1173: `stat` shall not be coindexed + sync team(warriors, stat=co_indexed_integer[1]) + + ! Fortran 2018 standard C1173: `errmsg` shall not be coindexed + sync team(warriors, errmsg=co_indexed_character[1]) + +end program test_sync_team