[Flang] Ported test_errors.sh to Python
To enable Flang testing on Windows, shell scripts have to be ported to Python. In this patch the "test_errors.sh" script is ported to python ("test_errors.py"). The RUN line of existing tests was changed to make use of the python script.
Used python regex in place of awk/sed.
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D107575
GitOrigin-RevId: 6c1ac141d3c98af9738bc77fcb55602cbff7751f
diff --git a/test/Semantics/OpenACC/acc-atomic-validity.f90 b/test/Semantics/OpenACC/acc-atomic-validity.f90
index 8ebac44..e6d82a7 100644
--- a/test/Semantics/OpenACC/acc-atomic-validity.f90
+++ b/test/Semantics/OpenACC/acc-atomic-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.12 Atomic
diff --git a/test/Semantics/OpenACC/acc-branch.f90 b/test/Semantics/OpenACC/acc-branch.f90
index b9ca12b..06c3b4d 100644
--- a/test/Semantics/OpenACC/acc-branch.f90
+++ b/test/Semantics/OpenACC/acc-branch.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC restruction in branch in and out of some construct
!
diff --git a/test/Semantics/OpenACC/acc-cache-validity.f90 b/test/Semantics/OpenACC/acc-cache-validity.f90
index 30c68ef..9afdd6d 100644
--- a/test/Semantics/OpenACC/acc-cache-validity.f90
+++ b/test/Semantics/OpenACC/acc-cache-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.10 Cache
diff --git a/test/Semantics/OpenACC/acc-canonicalization-validity.f90 b/test/Semantics/OpenACC/acc-canonicalization-validity.f90
index bc20aed..ad179d3 100644
--- a/test/Semantics/OpenACC/acc-canonicalization-validity.f90
+++ b/test/Semantics/OpenACC/acc-canonicalization-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC canonalization validity for the construct defined below:
! 2.9 Loop
diff --git a/test/Semantics/OpenACC/acc-data.f90 b/test/Semantics/OpenACC/acc-data.f90
index 6aa99e7..24c67ee 100644
--- a/test/Semantics/OpenACC/acc-data.f90
+++ b/test/Semantics/OpenACC/acc-data.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.6.5 Data
diff --git a/test/Semantics/OpenACC/acc-declare-validity.f90 b/test/Semantics/OpenACC/acc-declare-validity.f90
index fea97ec..5578d9a 100644
--- a/test/Semantics/OpenACC/acc-declare-validity.f90
+++ b/test/Semantics/OpenACC/acc-declare-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.13 Declare
diff --git a/test/Semantics/OpenACC/acc-host-data.f90 b/test/Semantics/OpenACC/acc-host-data.f90
index 877f002..4e91677 100644
--- a/test/Semantics/OpenACC/acc-host-data.f90
+++ b/test/Semantics/OpenACC/acc-host-data.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.8 host_data
diff --git a/test/Semantics/OpenACC/acc-init-validity.f90 b/test/Semantics/OpenACC/acc-init-validity.f90
index 2b2eac5..2782114 100644
--- a/test/Semantics/OpenACC/acc-init-validity.f90
+++ b/test/Semantics/OpenACC/acc-init-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.14.1 Init
diff --git a/test/Semantics/OpenACC/acc-kernels-loop.f90 b/test/Semantics/OpenACC/acc-kernels-loop.f90
index 5b3b9c2..d84e1c2 100644
--- a/test/Semantics/OpenACC/acc-kernels-loop.f90
+++ b/test/Semantics/OpenACC/acc-kernels-loop.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.11 Kernels Loop
diff --git a/test/Semantics/OpenACC/acc-kernels.f90 b/test/Semantics/OpenACC/acc-kernels.f90
index ccb128a..a2c9c9e 100644
--- a/test/Semantics/OpenACC/acc-kernels.f90
+++ b/test/Semantics/OpenACC/acc-kernels.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.5.3 Kernels
diff --git a/test/Semantics/OpenACC/acc-loop.f90 b/test/Semantics/OpenACC/acc-loop.f90
index 2cd7175..75e0995 100644
--- a/test/Semantics/OpenACC/acc-loop.f90
+++ b/test/Semantics/OpenACC/acc-loop.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.9 Loop
diff --git a/test/Semantics/OpenACC/acc-parallel-loop-validity.f90 b/test/Semantics/OpenACC/acc-parallel-loop-validity.f90
index 3dee147..312baac 100644
--- a/test/Semantics/OpenACC/acc-parallel-loop-validity.f90
+++ b/test/Semantics/OpenACC/acc-parallel-loop-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.11 Parallel Loop
diff --git a/test/Semantics/OpenACC/acc-parallel.f90 b/test/Semantics/OpenACC/acc-parallel.f90
index 75fb14f..758e1a5 100644
--- a/test/Semantics/OpenACC/acc-parallel.f90
+++ b/test/Semantics/OpenACC/acc-parallel.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.5.1 Parallel
diff --git a/test/Semantics/OpenACC/acc-resolve01.f90 b/test/Semantics/OpenACC/acc-resolve01.f90
index c55e02e..4d85c26 100644
--- a/test/Semantics/OpenACC/acc-resolve01.f90
+++ b/test/Semantics/OpenACC/acc-resolve01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Data-Mapping Attribute Clauses
! 2.15.14 default Clause
diff --git a/test/Semantics/OpenACC/acc-resolve02.f90 b/test/Semantics/OpenACC/acc-resolve02.f90
index b4df4d1..861cb26 100644
--- a/test/Semantics/OpenACC/acc-resolve02.f90
+++ b/test/Semantics/OpenACC/acc-resolve02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
subroutine compute()
integer :: a(3), c, i
diff --git a/test/Semantics/OpenACC/acc-routine-validity.f90 b/test/Semantics/OpenACC/acc-routine-validity.f90
index 18d90ec..83583fc 100644
--- a/test/Semantics/OpenACC/acc-routine-validity.f90
+++ b/test/Semantics/OpenACC/acc-routine-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.15.1 routine
diff --git a/test/Semantics/OpenACC/acc-serial-loop.f90 b/test/Semantics/OpenACC/acc-serial-loop.f90
index c088bf8..b0e04dd 100644
--- a/test/Semantics/OpenACC/acc-serial-loop.f90
+++ b/test/Semantics/OpenACC/acc-serial-loop.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.11 Serial Loop
diff --git a/test/Semantics/OpenACC/acc-serial.f90 b/test/Semantics/OpenACC/acc-serial.f90
index 2f206f5..a052ef4 100644
--- a/test/Semantics/OpenACC/acc-serial.f90
+++ b/test/Semantics/OpenACC/acc-serial.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.5.2 Serial
diff --git a/test/Semantics/OpenACC/acc-set-validity.f90 b/test/Semantics/OpenACC/acc-set-validity.f90
index 4bc342e..f914e25 100644
--- a/test/Semantics/OpenACC/acc-set-validity.f90
+++ b/test/Semantics/OpenACC/acc-set-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.14.3 Set
diff --git a/test/Semantics/OpenACC/acc-shutdown-validity.f90 b/test/Semantics/OpenACC/acc-shutdown-validity.f90
index 31fa3c9..de40963 100644
--- a/test/Semantics/OpenACC/acc-shutdown-validity.f90
+++ b/test/Semantics/OpenACC/acc-shutdown-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.14.2 Shutdown
diff --git a/test/Semantics/OpenACC/acc-update-validity.f90 b/test/Semantics/OpenACC/acc-update-validity.f90
index fbf90fb..6563ef9 100644
--- a/test/Semantics/OpenACC/acc-update-validity.f90
+++ b/test/Semantics/OpenACC/acc-update-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.14.4 Update
diff --git a/test/Semantics/OpenACC/acc-wait-validity.f90 b/test/Semantics/OpenACC/acc-wait-validity.f90
index c33bcbd..25d603d 100644
--- a/test/Semantics/OpenACC/acc-wait-validity.f90
+++ b/test/Semantics/OpenACC/acc-wait-validity.f90
@@ -1,5 +1,4 @@
-! RUN: %S/../test_errors.sh %s %t %flang -fopenacc
-! REQUIRES: shell
+! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC clause validity for the following construct and directive:
! 2.16.13 Wait
diff --git a/test/Semantics/allocate01.f90 b/test/Semantics/allocate01.f90
index 257c875..a66e246 100644
--- a/test/Semantics/allocate01.f90
+++ b/test/Semantics/allocate01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
! Creating a symbol that allocate should accept
diff --git a/test/Semantics/allocate02.f90 b/test/Semantics/allocate02.f90
index 9cf9e88..25d34cc 100644
--- a/test/Semantics/allocate02.f90
+++ b/test/Semantics/allocate02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
diff --git a/test/Semantics/allocate03.f90 b/test/Semantics/allocate03.f90
index c119ac6..f7cad58 100644
--- a/test/Semantics/allocate03.f90
+++ b/test/Semantics/allocate03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
subroutine C933_a(b1, ca3, ca4, cp3, cp3mold, cp4, cp7, cp8, bsrc)
diff --git a/test/Semantics/allocate04.f90 b/test/Semantics/allocate04.f90
index b881b84..bcccdca 100644
--- a/test/Semantics/allocate04.f90
+++ b/test/Semantics/allocate04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
diff --git a/test/Semantics/allocate05.f90 b/test/Semantics/allocate05.f90
index b33f316..eca6c9a 100644
--- a/test/Semantics/allocate05.f90
+++ b/test/Semantics/allocate05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
diff --git a/test/Semantics/allocate06.f90 b/test/Semantics/allocate06.f90
index 864f17a..a1ae51d 100644
--- a/test/Semantics/allocate06.f90
+++ b/test/Semantics/allocate06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
diff --git a/test/Semantics/allocate07.f90 b/test/Semantics/allocate07.f90
index a948765..8ebdbaa 100644
--- a/test/Semantics/allocate07.f90
+++ b/test/Semantics/allocate07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
subroutine C936(param_ca_4_assumed, param_ta_4_assumed, param_ca_4_deferred)
diff --git a/test/Semantics/allocate08.f90 b/test/Semantics/allocate08.f90
index 9223b14..cc074a1 100644
--- a/test/Semantics/allocate08.f90
+++ b/test/Semantics/allocate08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
subroutine C945_a(srca, srcb, srcc, src_complex, src_logical, &
diff --git a/test/Semantics/allocate09.f90 b/test/Semantics/allocate09.f90
index 03531a1..f235cab 100644
--- a/test/Semantics/allocate09.f90
+++ b/test/Semantics/allocate09.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
subroutine C946(param_ca_4_assumed, param_ta_4_assumed, param_ca_4_deferred)
diff --git a/test/Semantics/allocate10.f90 b/test/Semantics/allocate10.f90
index 05c73ce..5f7a1e5 100644
--- a/test/Semantics/allocate10.f90
+++ b/test/Semantics/allocate10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
!TODO: mixing expr and source-expr?
diff --git a/test/Semantics/allocate11.f90 b/test/Semantics/allocate11.f90
index b07b7a1..960d45f 100644
--- a/test/Semantics/allocate11.f90
+++ b/test/Semantics/allocate11.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
! TODO: Function Pointer in allocate and derived types!
diff --git a/test/Semantics/allocate12.f90 b/test/Semantics/allocate12.f90
index 9504142..ecc28d8 100644
--- a/test/Semantics/allocate12.f90
+++ b/test/Semantics/allocate12.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
subroutine C941_C942b_C950(xsrc, x1, a2, b2, cx1, ca2, cb1, cb2, c1, c2)
diff --git a/test/Semantics/allocate13.f90 b/test/Semantics/allocate13.f90
index c939d19..fe23c57 100644
--- a/test/Semantics/allocate13.f90
+++ b/test/Semantics/allocate13.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in ALLOCATE statements
module not_iso_fortran_env
diff --git a/test/Semantics/altreturn01.f90 b/test/Semantics/altreturn01.f90
index 7257eb1..85a133d 100644
--- a/test/Semantics/altreturn01.f90
+++ b/test/Semantics/altreturn01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check calls with alt returns
CALL TEST (N, *100, *200 )
diff --git a/test/Semantics/altreturn02.f90 b/test/Semantics/altreturn02.f90
index ad7a4f8..a142871 100644
--- a/test/Semantics/altreturn02.f90
+++ b/test/Semantics/altreturn02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check subroutine with alt return
SUBROUTINE TEST (N, *, *)
diff --git a/test/Semantics/altreturn03.f90 b/test/Semantics/altreturn03.f90
index 703d22b..fdf3f24 100644
--- a/test/Semantics/altreturn03.f90
+++ b/test/Semantics/altreturn03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for various alt return error conditions
SUBROUTINE TEST (N, *, *)
diff --git a/test/Semantics/altreturn04.f90 b/test/Semantics/altreturn04.f90
index 116c90a..9285bb7 100644
--- a/test/Semantics/altreturn04.f90
+++ b/test/Semantics/altreturn04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Functions cannot use alt return
REAL FUNCTION altreturn01(X)
diff --git a/test/Semantics/altreturn05.f90 b/test/Semantics/altreturn05.f90
index ad4f101..e61827f 100644
--- a/test/Semantics/altreturn05.f90
+++ b/test/Semantics/altreturn05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test extension: RETURN from main program
return !ok
diff --git a/test/Semantics/altreturn06.f90 b/test/Semantics/altreturn06.f90
index 4b5b606..5be40e8 100644
--- a/test/Semantics/altreturn06.f90
+++ b/test/Semantics/altreturn06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test alternat return argument passing for internal and external subprograms
! Both of the following are OK
call extSubprogram (*100)
diff --git a/test/Semantics/array-constr-big.f90 b/test/Semantics/array-constr-big.f90
index 0f44aa1..2b45edb 100644
--- a/test/Semantics/array-constr-big.f90
+++ b/test/Semantics/array-constr-big.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Ensure that evaluating a very large array constructor does not crash the
! compiler
program BigArray
diff --git a/test/Semantics/array-constr-values.f90 b/test/Semantics/array-constr-values.f90
index 09f8bc3..c814da2 100644
--- a/test/Semantics/array-constr-values.f90
+++ b/test/Semantics/array-constr-values.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Confirm enforcement of constraints and restrictions in 7.8
! C7110, C7111, C7112, C7113, C7114, C7115
diff --git a/test/Semantics/assign01.f90 b/test/Semantics/assign01.f90
index 9d47a01..351fecf 100644
--- a/test/Semantics/assign01.f90
+++ b/test/Semantics/assign01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! 10.2.3.1(2) All masks and LHS of assignments in a WHERE must conform
subroutine s1
diff --git a/test/Semantics/assign02.f90 b/test/Semantics/assign02.f90
index 76faa6f..6e65d90 100644
--- a/test/Semantics/assign02.f90
+++ b/test/Semantics/assign02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Pointer assignment constraints 10.2.2.2
module m1
diff --git a/test/Semantics/assign03.f90 b/test/Semantics/assign03.f90
index 830f17c..8e502f3 100644
--- a/test/Semantics/assign03.f90
+++ b/test/Semantics/assign03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Pointer assignment constraints 10.2.2.2 (see also assign02.f90)
module m
diff --git a/test/Semantics/assign04.f90 b/test/Semantics/assign04.f90
index acc5ac8..daf3d54 100644
--- a/test/Semantics/assign04.f90
+++ b/test/Semantics/assign04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! 9.4.5
subroutine s1
type :: t(k, l)
diff --git a/test/Semantics/assign06.f90 b/test/Semantics/assign06.f90
index 406bf20..4e65a77 100644
--- a/test/Semantics/assign06.f90
+++ b/test/Semantics/assign06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test ASSIGN statement, assigned GOTO, and assigned format labels
! (see subclause 8.2.4 in Fortran 90 (*not* 2018!)
diff --git a/test/Semantics/assign07.f90 b/test/Semantics/assign07.f90
index 980e4b6..41a99c1 100644
--- a/test/Semantics/assign07.f90
+++ b/test/Semantics/assign07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test ASSIGN statement, assigned GOTO, and assigned format labels
! (see subclause 8.2.4 in Fortran 90 (*not* 2018!)
diff --git a/test/Semantics/associated.f90 b/test/Semantics/associated.f90
index 294035d..509aa2d 100644
--- a/test/Semantics/associated.f90
+++ b/test/Semantics/associated.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for the ASSOCIATED() and NULL() intrinsics
subroutine assoc()
diff --git a/test/Semantics/bad-forward-type.f90 b/test/Semantics/bad-forward-type.f90
index 875ef95..f7230d1 100644
--- a/test/Semantics/bad-forward-type.f90
+++ b/test/Semantics/bad-forward-type.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Forward references to derived types (error cases)
! C732 A parent-type-name shall be the name of a previously defined
! extensible type (7.5.7).
diff --git a/test/Semantics/bind-c01.f90 b/test/Semantics/bind-c01.f90
index 36726ce..2a35364 100644
--- a/test/Semantics/bind-c01.f90
+++ b/test/Semantics/bind-c01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for multiple symbols being defined with with same BIND(C) name
module m1
diff --git a/test/Semantics/bindings01.f90 b/test/Semantics/bindings01.f90
index fece75a..75c3544 100644
--- a/test/Semantics/bindings01.f90
+++ b/test/Semantics/bindings01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Confirm enforcement of constraints and restrictions in 7.5.7.3
! and C733, C734 and C779, C780, C782, C783, C784, and C785.
diff --git a/test/Semantics/block-data01.f90 b/test/Semantics/block-data01.f90
index 0a775d3..5f69aa6 100644
--- a/test/Semantics/block-data01.f90
+++ b/test/Semantics/block-data01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test BLOCK DATA subprogram (14.3)
block data foo
!ERROR: IMPORT is not allowed in a BLOCK DATA subprogram
diff --git a/test/Semantics/blockconstruct01.f90 b/test/Semantics/blockconstruct01.f90
index a3759d2..f6e9a78 100644
--- a/test/Semantics/blockconstruct01.f90
+++ b/test/Semantics/blockconstruct01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1107 -- COMMON, EQUIVALENCE, INTENT, NAMELIST, OPTIONAL, VALUE or
! STATEMENT FUNCTIONS not allow in specification part
diff --git a/test/Semantics/blockconstruct02.f90 b/test/Semantics/blockconstruct02.f90
index cffff31..b748b0a 100644
--- a/test/Semantics/blockconstruct02.f90
+++ b/test/Semantics/blockconstruct02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1108 -- Save statement in a BLOCK construct shall not conatin a
! saved-entity-list that does not specify a common-block-name
diff --git a/test/Semantics/blockconstruct03.f90 b/test/Semantics/blockconstruct03.f90
index 8418750..75ffcad 100644
--- a/test/Semantics/blockconstruct03.f90
+++ b/test/Semantics/blockconstruct03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests implemented for this standard:
! Block Construct
! C1109
diff --git a/test/Semantics/boz-literal-constants.f90 b/test/Semantics/boz-literal-constants.f90
index e7dae86..a0db6fa 100644
--- a/test/Semantics/boz-literal-constants.f90
+++ b/test/Semantics/boz-literal-constants.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Confirm enforcement of constraints and restrictions in 7.7
! C7107, C7108, C7109
diff --git a/test/Semantics/c_f_pointer.f90 b/test/Semantics/c_f_pointer.f90
index 2e7bc90..4a385f1 100644
--- a/test/Semantics/c_f_pointer.f90
+++ b/test/Semantics/c_f_pointer.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Enforce 18.2.3.3
program test
diff --git a/test/Semantics/call01.f90 b/test/Semantics/call01.f90
index 5d6efe8..d75b72a 100644
--- a/test/Semantics/call01.f90
+++ b/test/Semantics/call01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Confirm enforcement of constraints and restrictions in 15.6.2.1
non_recursive function f01(n) result(res)
diff --git a/test/Semantics/call02.f90 b/test/Semantics/call02.f90
index bc0ee97..84bb286 100644
--- a/test/Semantics/call02.f90
+++ b/test/Semantics/call02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! 15.5.1 procedure reference constraints and restrictions
subroutine s01(elem, subr)
diff --git a/test/Semantics/call03.f90 b/test/Semantics/call03.f90
index db2e236..e89bce7 100644
--- a/test/Semantics/call03.f90
+++ b/test/Semantics/call03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.5.2.4 constraints and restrictions for non-POINTER non-ALLOCATABLE
! dummy arguments.
diff --git a/test/Semantics/call04.f90 b/test/Semantics/call04.f90
index eb4f78f..6877f9c 100644
--- a/test/Semantics/call04.f90
+++ b/test/Semantics/call04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 8.5.10 & 8.5.18 constraints on dummy argument declarations
module m
diff --git a/test/Semantics/call05.f90 b/test/Semantics/call05.f90
index ad51219..0aadb6a 100644
--- a/test/Semantics/call05.f90
+++ b/test/Semantics/call05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.5.2.5 constraints and restrictions for POINTER & ALLOCATABLE
! arguments when both sides of the call have the same attributes.
diff --git a/test/Semantics/call06.f90 b/test/Semantics/call06.f90
index 5e2728f..1f4b17f 100644
--- a/test/Semantics/call06.f90
+++ b/test/Semantics/call06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.5.2.6 constraints and restrictions for ALLOCATABLE
! dummy arguments.
diff --git a/test/Semantics/call07.f90 b/test/Semantics/call07.f90
index 444331f..db5e0a6 100644
--- a/test/Semantics/call07.f90
+++ b/test/Semantics/call07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.5.2.7 constraints and restrictions for POINTER dummy arguments.
module m
diff --git a/test/Semantics/call08.f90 b/test/Semantics/call08.f90
index 5da55d4..f4c690e 100644
--- a/test/Semantics/call08.f90
+++ b/test/Semantics/call08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.5.2.8 coarray dummy arguments
module m
diff --git a/test/Semantics/call09.f90 b/test/Semantics/call09.f90
index c339829..2359168 100644
--- a/test/Semantics/call09.f90
+++ b/test/Semantics/call09.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.5.2.9(2,3,5) dummy procedure requirements
! C843
! An entity with the INTENT attribute shall be a dummy data object or a
diff --git a/test/Semantics/call10.f90 b/test/Semantics/call10.f90
index 2ef3a5a..deb6e37 100644
--- a/test/Semantics/call10.f90
+++ b/test/Semantics/call10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.7 (C1583-C1590, C1592-C1599) constraints and restrictions
! for pure procedures.
! (C1591 is tested in call11.f90; C1594 in call12.f90.)
diff --git a/test/Semantics/call11.f90 b/test/Semantics/call11.f90
index 086537f..4307571 100644
--- a/test/Semantics/call11.f90
+++ b/test/Semantics/call11.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.7 C1591 & others: contexts requiring pure subprograms
module m
diff --git a/test/Semantics/call12.f90 b/test/Semantics/call12.f90
index 8838366..4780a95 100644
--- a/test/Semantics/call12.f90
+++ b/test/Semantics/call12.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.7 C1594 - prohibited assignments in pure subprograms
module used
diff --git a/test/Semantics/call13.f90 b/test/Semantics/call13.f90
index 47786fa..a5ef1ca 100644
--- a/test/Semantics/call13.f90
+++ b/test/Semantics/call13.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 15.4.2.2 constraints and restrictions for calls to implicit
! interfaces
diff --git a/test/Semantics/call14.f90 b/test/Semantics/call14.f90
index 2bf5d53..477c22b 100644
--- a/test/Semantics/call14.f90
+++ b/test/Semantics/call14.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test 8.5.18 constraints on the VALUE attribute
module m
diff --git a/test/Semantics/call15.f90 b/test/Semantics/call15.f90
index c236ef0..842103b 100644
--- a/test/Semantics/call15.f90
+++ b/test/Semantics/call15.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C711 An assumed-type actual argument that corresponds to an assumed-rank
! dummy argument shall be assumed-shape or assumed-rank.
subroutine s(arg1, arg2, arg3)
diff --git a/test/Semantics/call16.f90 b/test/Semantics/call16.f90
index 12cab97..37e82b1 100644
--- a/test/Semantics/call16.f90
+++ b/test/Semantics/call16.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test that intrinsic functions used as subroutines and vice versa are caught.
diff --git a/test/Semantics/call18.f90 b/test/Semantics/call18.f90
index ae10ea9..fb5895f 100644
--- a/test/Semantics/call18.f90
+++ b/test/Semantics/call18.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Ensure that references to functions that return pointers can serve as
! "variables" in actual arguments. All of these uses are conforming and
! no errors should be reported.
diff --git a/test/Semantics/call19.f90 b/test/Semantics/call19.f90
index d102eb6..753ff95 100644
--- a/test/Semantics/call19.f90
+++ b/test/Semantics/call19.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Ensures that things that aren't procedures aren't allowed to be called.
module m
integer :: i
diff --git a/test/Semantics/call20.f90 b/test/Semantics/call20.f90
index 2ce7b1c..91ce2bf 100644
--- a/test/Semantics/call20.f90
+++ b/test/Semantics/call20.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test that the interface of specific intrinsics passed as dummy arguments
! are correctly validated against actual arguments explicit interface.
diff --git a/test/Semantics/case01.f90 b/test/Semantics/case01.f90
index e863b71..42eb07d 100644
--- a/test/Semantics/case01.f90
+++ b/test/Semantics/case01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test SELECT CASE Constraints: C1145, C1146, C1147, C1148, C1149
program selectCaseProg
implicit none
diff --git a/test/Semantics/coarrays01.f90 b/test/Semantics/coarrays01.f90
index b074c9b..0a6f88a 100644
--- a/test/Semantics/coarrays01.f90
+++ b/test/Semantics/coarrays01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test selector and team-value in CHANGE TEAM statement
! OK
diff --git a/test/Semantics/complex01.f90 b/test/Semantics/complex01.f90
index cf7fd9c..f28ffe1 100644
--- a/test/Semantics/complex01.f90
+++ b/test/Semantics/complex01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C718 Each named constant in a complex literal constant shall be of type
! integer or real.
subroutine s()
diff --git a/test/Semantics/computed-goto01.f90 b/test/Semantics/computed-goto01.f90
index 321d6a1..4eb00df 100644
--- a/test/Semantics/computed-goto01.f90
+++ b/test/Semantics/computed-goto01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check that a basic computed goto compiles
INTEGER, DIMENSION (2) :: B
diff --git a/test/Semantics/computed-goto02.f90 b/test/Semantics/computed-goto02.f90
index a51e536..f613404 100644
--- a/test/Semantics/computed-goto02.f90
+++ b/test/Semantics/computed-goto02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check that computed goto express must be a scalar integer expression
! TODO: PGI, for example, accepts a float & converts the value to int.
diff --git a/test/Semantics/critical01.f90 b/test/Semantics/critical01.f90
index 90e8a6e..5981a65 100644
--- a/test/Semantics/critical01.f90
+++ b/test/Semantics/critical01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!C1117
subroutine test1(a, i)
diff --git a/test/Semantics/critical02.f90 b/test/Semantics/critical02.f90
index f7822b7..10581f9 100644
--- a/test/Semantics/critical02.f90
+++ b/test/Semantics/critical02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!C1118
subroutine test1
diff --git a/test/Semantics/critical03.f90 b/test/Semantics/critical03.f90
index 0683a84..26b4a9f 100644
--- a/test/Semantics/critical03.f90
+++ b/test/Semantics/critical03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!C1119
subroutine test1(a, i)
diff --git a/test/Semantics/data01.f90 b/test/Semantics/data01.f90
index 635e7c5..f8c8d37 100644
--- a/test/Semantics/data01.f90
+++ b/test/Semantics/data01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!Test for checking data constraints, C882-C887
module m1
type person
diff --git a/test/Semantics/data02.f90 b/test/Semantics/data02.f90
index eb4d801..11235a7 100644
--- a/test/Semantics/data02.f90
+++ b/test/Semantics/data02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check that expressions are analyzed in data statements
subroutine s1
diff --git a/test/Semantics/data03.f90 b/test/Semantics/data03.f90
index e4ad995..b3ed338 100644
--- a/test/Semantics/data03.f90
+++ b/test/Semantics/data03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!Testing data constraints : C874 - C875, C878 - C881
module m
integer, target :: modarray(1)
diff --git a/test/Semantics/data04.f90 b/test/Semantics/data04.f90
index d69c8d3..5d862b2 100644
--- a/test/Semantics/data04.f90
+++ b/test/Semantics/data04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!Testing data constraints : C876, C877
module m
integer :: first
diff --git a/test/Semantics/data06.f90 b/test/Semantics/data06.f90
index 953da87..b8dfdb3 100644
--- a/test/Semantics/data06.f90
+++ b/test/Semantics/data06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! DATA statement errors
subroutine s1
type :: t1
diff --git a/test/Semantics/data07.f90 b/test/Semantics/data07.f90
index 0bf08a9..ddb1f8b 100644
--- a/test/Semantics/data07.f90
+++ b/test/Semantics/data07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
contains
subroutine s1
diff --git a/test/Semantics/data10.f90 b/test/Semantics/data10.f90
index af541fc..a46465c 100644
--- a/test/Semantics/data10.f90
+++ b/test/Semantics/data10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
type :: t
integer :: n
end type
diff --git a/test/Semantics/data12.f90 b/test/Semantics/data12.f90
index 0ceba17..fa6120c 100644
--- a/test/Semantics/data12.f90
+++ b/test/Semantics/data12.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
type :: t1
sequence
integer :: m = 123
diff --git a/test/Semantics/deallocate01.f90 b/test/Semantics/deallocate01.f90
index 95fe128..88c29d0 100644
--- a/test/Semantics/deallocate01.f90
+++ b/test/Semantics/deallocate01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test that DEALLOCATE works
INTEGER, PARAMETER :: maxvalue=1024
diff --git a/test/Semantics/deallocate04.f90 b/test/Semantics/deallocate04.f90
index 43786df..32ead58 100644
--- a/test/Semantics/deallocate04.f90
+++ b/test/Semantics/deallocate04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for type errors in DEALLOCATE statements
INTEGER, PARAMETER :: maxvalue=1024
diff --git a/test/Semantics/deallocate05.f90 b/test/Semantics/deallocate05.f90
index e065f07..0363a1f 100644
--- a/test/Semantics/deallocate05.f90
+++ b/test/Semantics/deallocate05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in DEALLOCATE statements
Module share
diff --git a/test/Semantics/deallocate06.f90 b/test/Semantics/deallocate06.f90
index 360091e..16ae9f9 100644
--- a/test/Semantics/deallocate06.f90
+++ b/test/Semantics/deallocate06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test deallocate of use- and host-associated variables
module m1
diff --git a/test/Semantics/doconcurrent01.f90 b/test/Semantics/doconcurrent01.f90
index 67294fc..84297fb 100644
--- a/test/Semantics/doconcurrent01.f90
+++ b/test/Semantics/doconcurrent01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1141
! A reference to the procedure IEEE_SET_HALTING_MODE ! from the intrinsic
! module IEEE_EXCEPTIONS, shall not ! appear within a DO CONCURRENT construct.
diff --git a/test/Semantics/doconcurrent05.f90 b/test/Semantics/doconcurrent05.f90
index c8961ab..a826e06 100644
--- a/test/Semantics/doconcurrent05.f90
+++ b/test/Semantics/doconcurrent05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1167 -- An exit-stmt shall not appear within a DO CONCURRENT construct if
! it belongs to that construct or an outer construct.
diff --git a/test/Semantics/doconcurrent06.f90 b/test/Semantics/doconcurrent06.f90
index 0a990a5..917554d 100644
--- a/test/Semantics/doconcurrent06.f90
+++ b/test/Semantics/doconcurrent06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1167 -- An exit-stmt shall not appear within a DO CONCURRENT construct if
! it belongs to that construct or an outer construct.
diff --git a/test/Semantics/doconcurrent08.f90 b/test/Semantics/doconcurrent08.f90
index 214a931..e56b980 100644
--- a/test/Semantics/doconcurrent08.f90
+++ b/test/Semantics/doconcurrent08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1140 -- A statement that might result in the deallocation of a polymorphic
! entity shall not appear within a DO CONCURRENT construct.
module m1
diff --git a/test/Semantics/dosemantics01.f90 b/test/Semantics/dosemantics01.f90
index ec5375f..29286db 100644
--- a/test/Semantics/dosemantics01.f90
+++ b/test/Semantics/dosemantics01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1131 -- check valid and invalid DO loop naming
PROGRAM C1131
diff --git a/test/Semantics/dosemantics02.f90 b/test/Semantics/dosemantics02.f90
index a4c0ce1..563736b 100644
--- a/test/Semantics/dosemantics02.f90
+++ b/test/Semantics/dosemantics02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1121 -- any procedure referenced in a concurrent header must be pure
! Also, check that the step expressions are not zero. This is prohibited by
diff --git a/test/Semantics/dosemantics03.f90 b/test/Semantics/dosemantics03.f90
index 5aedfcb..59c8dda 100644
--- a/test/Semantics/dosemantics03.f90
+++ b/test/Semantics/dosemantics03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -pedantic -Werror
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic -Werror
! Issue 458 -- semantic checks for a normal DO loop. The DO variable
! and the initial, final, and step expressions must be INTEGER if the
diff --git a/test/Semantics/dosemantics04.f90 b/test/Semantics/dosemantics04.f90
index 6c3cdb8..1409f6d 100644
--- a/test/Semantics/dosemantics04.f90
+++ b/test/Semantics/dosemantics04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1123 -- Expressions in DO CONCURRENT header cannot reference variables
! declared in the same header
PROGRAM dosemantics04
diff --git a/test/Semantics/dosemantics05.f90 b/test/Semantics/dosemantics05.f90
index ff1b230..b77e078 100644
--- a/test/Semantics/dosemantics05.f90
+++ b/test/Semantics/dosemantics05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test DO loop semantics for constraint C1130 --
! The constraint states that "If the locality-spec DEFAULT ( NONE ) appears in a
! DO CONCURRENT statement; a variable that is a local or construct entity of a
diff --git a/test/Semantics/dosemantics06.f90 b/test/Semantics/dosemantics06.f90
index 8059b4f..1e7fd89 100644
--- a/test/Semantics/dosemantics06.f90
+++ b/test/Semantics/dosemantics06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1131, C1133 -- check valid and invalid DO loop naming
! C1131 (R1119) If the do-stmt of a do-construct specifies a do-construct-name,
! the corresponding end-do shall be an end-do-stmt specifying the same
diff --git a/test/Semantics/dosemantics07.f90 b/test/Semantics/dosemantics07.f90
index be1bb9f..b64659a 100644
--- a/test/Semantics/dosemantics07.f90
+++ b/test/Semantics/dosemantics07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!C1132
! If the do-stmt is a nonlabel-do-stmt, the corresponding end-do shall be an
! end-do-stmt.
diff --git a/test/Semantics/dosemantics08.f90 b/test/Semantics/dosemantics08.f90
index 005f65b..1dc5ba6 100644
--- a/test/Semantics/dosemantics08.f90
+++ b/test/Semantics/dosemantics08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1138 --
! A branch (11.2) within a DO CONCURRENT construct shall not have a branch
! target that is outside the construct.
diff --git a/test/Semantics/dosemantics09.f90 b/test/Semantics/dosemantics09.f90
index 4f2c5bf..9e6bca2 100644
--- a/test/Semantics/dosemantics09.f90
+++ b/test/Semantics/dosemantics09.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!C1129
!A variable that is referenced by the scalar-mask-expr of a
!concurrent-header or by any concurrent-limit or concurrent-step in that
diff --git a/test/Semantics/dosemantics10.f90 b/test/Semantics/dosemantics10.f90
index a17f827..0aad3c5 100644
--- a/test/Semantics/dosemantics10.f90
+++ b/test/Semantics/dosemantics10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1134 A CYCLE statement must be within a DO construct
!
! C1166 An EXIT statement must be within a DO construct
diff --git a/test/Semantics/dosemantics11.f90 b/test/Semantics/dosemantics11.f90
index e6ab9eb..5ceb834 100644
--- a/test/Semantics/dosemantics11.f90
+++ b/test/Semantics/dosemantics11.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1135 A cycle-stmt shall not appear within a CHANGE TEAM, CRITICAL, or DO
! CONCURRENT construct if it belongs to an outer construct.
!
diff --git a/test/Semantics/dosemantics12.f90 b/test/Semantics/dosemantics12.f90
index 40bb231..e5a390f 100644
--- a/test/Semantics/dosemantics12.f90
+++ b/test/Semantics/dosemantics12.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
!
! Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/test/Semantics/entry01.f90 b/test/Semantics/entry01.f90
index 5189389..8255e70 100644
--- a/test/Semantics/entry01.f90
+++ b/test/Semantics/entry01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests valid and invalid ENTRY statements
module m1
diff --git a/test/Semantics/equivalence01.f90 b/test/Semantics/equivalence01.f90
index bab563d..d69113a 100644
--- a/test/Semantics/equivalence01.f90
+++ b/test/Semantics/equivalence01.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
integer i, j
real r(2)
diff --git a/test/Semantics/expr-errors01.f90 b/test/Semantics/expr-errors01.f90
index 31aa92c..221a671 100644
--- a/test/Semantics/expr-errors01.f90
+++ b/test/Semantics/expr-errors01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1003 - can't parenthesize function call returning procedure pointer
module m1
type :: dt
diff --git a/test/Semantics/expr-errors02.f90 b/test/Semantics/expr-errors02.f90
index 0008765..8d72cb6 100644
--- a/test/Semantics/expr-errors02.f90
+++ b/test/Semantics/expr-errors02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test specification expressions
module m
diff --git a/test/Semantics/expr-errors03.f90 b/test/Semantics/expr-errors03.f90
index 6db03a4..4a08c06 100644
--- a/test/Semantics/expr-errors03.f90
+++ b/test/Semantics/expr-errors03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Regression test for subscript error recovery
module m
implicit none
diff --git a/test/Semantics/final01.f90 b/test/Semantics/final01.f90
index 71d031a..07188cf 100644
--- a/test/Semantics/final01.f90
+++ b/test/Semantics/final01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test FINAL subroutine constraints C786-C789
module m1
external :: external
diff --git a/test/Semantics/forall01.f90 b/test/Semantics/forall01.f90
index 97db408..1ace762 100644
--- a/test/Semantics/forall01.f90
+++ b/test/Semantics/forall01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine forall1
real :: a(9)
!ERROR: 'i' is already declared in this scoping unit
diff --git a/test/Semantics/if_arith01.f90 b/test/Semantics/if_arith01.f90
index b7b0399..a6714f2 100644
--- a/test/Semantics/if_arith01.f90
+++ b/test/Semantics/if_arith01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check that a basic arithmetic if compiles.
if ( A ) 100, 200, 300
diff --git a/test/Semantics/if_arith02.f90 b/test/Semantics/if_arith02.f90
index 95af999..e20fd46 100644
--- a/test/Semantics/if_arith02.f90
+++ b/test/Semantics/if_arith02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check that only labels are allowed in arithmetic if statements.
! TODO: Revisit error message "expected 'ASSIGN'" etc.
! TODO: Revisit error message "expected one of '0123456789'"
diff --git a/test/Semantics/if_arith03.f90 b/test/Semantics/if_arith03.f90
index 7b55e38..3af7d6d 100644
--- a/test/Semantics/if_arith03.f90
+++ b/test/Semantics/if_arith03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!ERROR: Label '600' was not found
if ( A ) 100, 200, 600
diff --git a/test/Semantics/if_arith04.f90 b/test/Semantics/if_arith04.f90
index 067031a..6e98b53 100644
--- a/test/Semantics/if_arith04.f90
+++ b/test/Semantics/if_arith04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Make sure arithmetic if expressions are non-complex numeric exprs.
INTEGER I
diff --git a/test/Semantics/if_construct01.f90 b/test/Semantics/if_construct01.f90
index 9fb1344..0d9cbe4 100644
--- a/test/Semantics/if_construct01.f90
+++ b/test/Semantics/if_construct01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Simple check that if constructs are ok.
if (a < b) then
diff --git a/test/Semantics/if_construct02.f90 b/test/Semantics/if_construct02.f90
index 03fd433..c2dc759 100644
--- a/test/Semantics/if_construct02.f90
+++ b/test/Semantics/if_construct02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check that if constructs only accept scalar logical expressions.
! TODO: expand the test to check this restriction for more types.
diff --git a/test/Semantics/if_stmt01.f90 b/test/Semantics/if_stmt01.f90
index 64d0b41..d53a1b9 100644
--- a/test/Semantics/if_stmt01.f90
+++ b/test/Semantics/if_stmt01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Simple check that if statements are ok.
IF (A > 0.0) A = LOG (A)
diff --git a/test/Semantics/if_stmt02.f90 b/test/Semantics/if_stmt02.f90
index cb9abe5..46c7fcd 100644
--- a/test/Semantics/if_stmt02.f90
+++ b/test/Semantics/if_stmt02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!ERROR: IF statement is not allowed in IF statement
IF (A > 0.0) IF (B < 0.0) A = LOG (A)
END
diff --git a/test/Semantics/if_stmt03.f90 b/test/Semantics/if_stmt03.f90
index 3d01247..eb61a0b 100644
--- a/test/Semantics/if_stmt03.f90
+++ b/test/Semantics/if_stmt03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check that non-logical expressions are not allowed.
! Check that non-scalar expressions are not allowed.
! TODO: Insure all non-logicals are prohibited.
diff --git a/test/Semantics/implicit01.f90 b/test/Semantics/implicit01.f90
index 2ed9e71..8d82685 100644
--- a/test/Semantics/implicit01.f90
+++ b/test/Semantics/implicit01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
implicit none
!ERROR: More than one IMPLICIT NONE statement
diff --git a/test/Semantics/implicit02.f90 b/test/Semantics/implicit02.f90
index a5f2df1..6e793fa 100644
--- a/test/Semantics/implicit02.f90
+++ b/test/Semantics/implicit02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
implicit none
!ERROR: IMPLICIT statement after IMPLICIT NONE or IMPLICIT NONE(TYPE) statement
diff --git a/test/Semantics/implicit03.f90 b/test/Semantics/implicit03.f90
index 0f2aa6a..928829c 100644
--- a/test/Semantics/implicit03.f90
+++ b/test/Semantics/implicit03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
implicit integer(a-z)
!ERROR: IMPLICIT NONE statement after IMPLICIT statement
diff --git a/test/Semantics/implicit04.f90 b/test/Semantics/implicit04.f90
index fcc4387..9c06583 100644
--- a/test/Semantics/implicit04.f90
+++ b/test/Semantics/implicit04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s
parameter(a=1.0)
!ERROR: IMPLICIT NONE statement after PARAMETER statement
diff --git a/test/Semantics/implicit05.f90 b/test/Semantics/implicit05.f90
index e5b5281..f033aa2 100644
--- a/test/Semantics/implicit05.f90
+++ b/test/Semantics/implicit05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s
!ERROR: 'a' does not follow 'b' alphabetically
implicit integer(b-a)
diff --git a/test/Semantics/implicit06.f90 b/test/Semantics/implicit06.f90
index 11a2e82..4486d07 100644
--- a/test/Semantics/implicit06.f90
+++ b/test/Semantics/implicit06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
implicit integer(a-c)
!ERROR: More than one implicit type specified for 'c'
diff --git a/test/Semantics/implicit07.f90 b/test/Semantics/implicit07.f90
index 4a6eadb..30e57e1 100644
--- a/test/Semantics/implicit07.f90
+++ b/test/Semantics/implicit07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
implicit none(external)
external x
integer :: f, i
diff --git a/test/Semantics/implicit08.f90 b/test/Semantics/implicit08.f90
index a498413..9b42bc2 100644
--- a/test/Semantics/implicit08.f90
+++ b/test/Semantics/implicit08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
block
!ERROR: IMPLICIT statement is not allowed in a BLOCK construct
diff --git a/test/Semantics/implicit09.f90 b/test/Semantics/implicit09.f90
index bda24f6..95bfd4e 100644
--- a/test/Semantics/implicit09.f90
+++ b/test/Semantics/implicit09.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fimplicit-none-type-never
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fimplicit-none-type-never
subroutine s1
implicit none
i = j + k ! would be error without -fimplicit-none-type-never
diff --git a/test/Semantics/implicit10.f90 b/test/Semantics/implicit10.f90
index c1ef7b1..081f236 100644
--- a/test/Semantics/implicit10.f90
+++ b/test/Semantics/implicit10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fimplicit-none
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fimplicit-none
!ERROR: No explicit type declared for 'f'
function f()
diff --git a/test/Semantics/implicit11.f90 b/test/Semantics/implicit11.f90
index 0a52e1a..3c68ab5 100644
--- a/test/Semantics/implicit11.f90
+++ b/test/Semantics/implicit11.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test use of implicitly declared variable in specification expression
diff --git a/test/Semantics/init01.f90 b/test/Semantics/init01.f90
index 89b2c41..7e96259 100644
--- a/test/Semantics/init01.f90
+++ b/test/Semantics/init01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Initializer error tests
subroutine objectpointers(j)
diff --git a/test/Semantics/int-literals.f90 b/test/Semantics/int-literals.f90
index 09d0914..2344d6b 100644
--- a/test/Semantics/int-literals.f90
+++ b/test/Semantics/int-literals.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Fortran syntax considers signed int literals in complex literals
! to be a distinct production, not an application of unary +/- to
! an unsigned int literal, so they're used here to test overflow
diff --git a/test/Semantics/io01.f90 b/test/Semantics/io01.f90
index 14cdd1c..d3d2df1 100644
--- a/test/Semantics/io01.f90
+++ b/test/Semantics/io01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
character(len=20) :: access = "direcT"
character(len=20) :: access_(2) = (/"direcT", "streaM"/)
character(len=20) :: action_(2) = (/"reaD ", "writE"/)
diff --git a/test/Semantics/io02.f90 b/test/Semantics/io02.f90
index 3ff06cc..40be023 100644
--- a/test/Semantics/io02.f90
+++ b/test/Semantics/io02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
integer :: unit10 = 10
integer :: unit11 = 11
integer, parameter :: const_stat = 6666
diff --git a/test/Semantics/io03.f90 b/test/Semantics/io03.f90
index 69f5914..70f25ad 100644
--- a/test/Semantics/io03.f90
+++ b/test/Semantics/io03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
character(kind=1,len=50) internal_file
character(kind=2,len=50) internal_file2
character(kind=4,len=50) internal_file4
diff --git a/test/Semantics/io04.f90 b/test/Semantics/io04.f90
index e7baa54..e53b1eb 100644
--- a/test/Semantics/io04.f90
+++ b/test/Semantics/io04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
character(kind=1,len=50) internal_file
character(kind=1,len=100) msg
character(20) sign
diff --git a/test/Semantics/io05.f90 b/test/Semantics/io05.f90
index ad80f93..851ec5f 100644
--- a/test/Semantics/io05.f90
+++ b/test/Semantics/io05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
character*20 c(25), cv
character(kind=1,len=59) msg
character, parameter :: const_round = "c'est quoi?"
diff --git a/test/Semantics/io06.f90 b/test/Semantics/io06.f90
index e906863..e3bc760 100644
--- a/test/Semantics/io06.f90
+++ b/test/Semantics/io06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
character(kind=1,len=100) msg1
character(kind=2,len=200) msg2
character, parameter :: const_msg = 'doof'
diff --git a/test/Semantics/io07.f90 b/test/Semantics/io07.f90
index 121eff8..5c4c2b4 100644
--- a/test/Semantics/io07.f90
+++ b/test/Semantics/io07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
1001 format(A)
!ERROR: Format statement must be labeled
diff --git a/test/Semantics/io08.f90 b/test/Semantics/io08.f90
index 7c9f924..c074e15 100644
--- a/test/Semantics/io08.f90
+++ b/test/Semantics/io08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
write(*,*)
write(*,'()')
write(*,'(A)')
diff --git a/test/Semantics/io09.f90 b/test/Semantics/io09.f90
index c9b1948..495cbf0 100644
--- a/test/Semantics/io09.f90
+++ b/test/Semantics/io09.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!ERROR: String edit descriptor in READ format expression
read(*,'("abc")')
diff --git a/test/Semantics/io10.f90 b/test/Semantics/io10.f90
index 6322073..ef7008b 100644
--- a/test/Semantics/io10.f90
+++ b/test/Semantics/io10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -pedantic
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
write(*, '(B0)')
write(*, '(B3)')
diff --git a/test/Semantics/io11.f90 b/test/Semantics/io11.f90
index 4de8b52..35ea874 100644
--- a/test/Semantics/io11.f90
+++ b/test/Semantics/io11.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for defined input/output. See 12.6.4.8 and 15.4.3.2, and C777
module m1
diff --git a/test/Semantics/kinds02.f90 b/test/Semantics/kinds02.f90
index 46cd6eb..b02659e 100644
--- a/test/Semantics/kinds02.f90
+++ b/test/Semantics/kinds02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C712 The value of scalar-int-constant-expr shall be nonnegative and
! shall specify a representation method that exists on the processor.
! C714 The value of kind-param shall be nonnegative.
diff --git a/test/Semantics/kinds04.f90 b/test/Semantics/kinds04.f90
index f03126d..26957d9 100644
--- a/test/Semantics/kinds04.f90
+++ b/test/Semantics/kinds04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C716 If both kind-param and exponent-letter appear, exponent-letter
! shall be E.
! C717 The value of kind-param shall specify an approximation method that
diff --git a/test/Semantics/label11.f90 b/test/Semantics/label11.f90
index 6c45edc..ebd743a 100644
--- a/test/Semantics/label11.f90
+++ b/test/Semantics/label11.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C739 If END TYPE is followed by a type-name, the type-name shall be the
! same as that in the corresponding derived-type-stmt.
! C1401 The program-name shall not be included in the end-program-stmt unless
diff --git a/test/Semantics/label16.f90 b/test/Semantics/label16.f90
index f6cb3d4..7339420 100644
--- a/test/Semantics/label16.f90
+++ b/test/Semantics/label16.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine x(n)
call x1(n)
diff --git a/test/Semantics/misc-declarations.f90 b/test/Semantics/misc-declarations.f90
index 081a497..485b82d 100644
--- a/test/Semantics/misc-declarations.f90
+++ b/test/Semantics/misc-declarations.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Miscellaneous constraint and requirement checking on declarations:
! - 8.5.6.2 & 8.5.6.3 constraints on coarrays
! - 8.5.19 constraints on the VOLATILE attribute
diff --git a/test/Semantics/modfile41.f90 b/test/Semantics/modfile41.f90
index e988e77..caba833 100644
--- a/test/Semantics/modfile41.f90
+++ b/test/Semantics/modfile41.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test USE statements that use same module multiple times mixed with rename
! clauses and ONLY clauses
module m1
diff --git a/test/Semantics/namelist01.f90 b/test/Semantics/namelist01.f90
index d52e5db..b14bf04 100644
--- a/test/Semantics/namelist01.f90
+++ b/test/Semantics/namelist01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test for checking namelist constraints, C8103-C8105
module dup
diff --git a/test/Semantics/null-init.f90 b/test/Semantics/null-init.f90
index d5ed4d1..a1ac29e 100644
--- a/test/Semantics/null-init.f90
+++ b/test/Semantics/null-init.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests valid and invalid NULL initializers
module m1
diff --git a/test/Semantics/null01.f90 b/test/Semantics/null01.f90
index 65af2d9..73ee760 100644
--- a/test/Semantics/null01.f90
+++ b/test/Semantics/null01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! NULL() intrinsic function error tests
subroutine test
diff --git a/test/Semantics/nullify01.f90 b/test/Semantics/nullify01.f90
index 3fdf5d4..21ffa81 100644
--- a/test/Semantics/nullify01.f90
+++ b/test/Semantics/nullify01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test that NULLIFY works
Module share
diff --git a/test/Semantics/nullify02.f90 b/test/Semantics/nullify02.f90
index bccc174..81d108a 100644
--- a/test/Semantics/nullify02.f90
+++ b/test/Semantics/nullify02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in NULLIFY statements
INTEGER, PARAMETER :: maxvalue=1024
diff --git a/test/Semantics/num_images.f90 b/test/Semantics/num_images.f90
index f77fc83..03bd0f4 100644
--- a/test/Semantics/num_images.f90
+++ b/test/Semantics/num_images.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in num_images() function calls
subroutine test
diff --git a/test/Semantics/omp-allocate-directive.f90 b/test/Semantics/omp-allocate-directive.f90
index 4eb1669..00c0f6b 100644
--- a/test/Semantics/omp-allocate-directive.f90
+++ b/test/Semantics/omp-allocate-directive.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! Check OpenMP Allocate directive
use omp_lib
diff --git a/test/Semantics/omp-allocate01.f90 b/test/Semantics/omp-allocate01.f90
index 73d3701..74f8788 100644
--- a/test/Semantics/omp-allocate01.f90
+++ b/test/Semantics/omp-allocate01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! The allocate directive must appear in the same scope as the declarations of
diff --git a/test/Semantics/omp-allocate02.f90 b/test/Semantics/omp-allocate02.f90
index 1abc7b5..ba3957f 100644
--- a/test/Semantics/omp-allocate02.f90
+++ b/test/Semantics/omp-allocate02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! At most one allocator clause can appear on the allocate directive.
diff --git a/test/Semantics/omp-allocate03.f90 b/test/Semantics/omp-allocate03.f90
index 8d3c0cc..3ff6f7a 100644
--- a/test/Semantics/omp-allocate03.f90
+++ b/test/Semantics/omp-allocate03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! A variable that is part of another variable (as an array or
diff --git a/test/Semantics/omp-allocate04.f90 b/test/Semantics/omp-allocate04.f90
index 9f5e0ca..d5d9730 100644
--- a/test/Semantics/omp-allocate04.f90
+++ b/test/Semantics/omp-allocate04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! Only the allocator clause is allowed on the allocate directive
diff --git a/test/Semantics/omp-allocate05.f90 b/test/Semantics/omp-allocate05.f90
index f128358..89cf83d 100644
--- a/test/Semantics/omp-allocate05.f90
+++ b/test/Semantics/omp-allocate05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! allocate directives that appear in a target region must specify an allocator
diff --git a/test/Semantics/omp-allocate06.f90 b/test/Semantics/omp-allocate06.f90
index aa75d47..2265134 100644
--- a/test/Semantics/omp-allocate06.f90
+++ b/test/Semantics/omp-allocate06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! List items specified in the allocate directive must not have the ALLOCATABLE attribute unless the directive is associated with an
diff --git a/test/Semantics/omp-allocate07.f90 b/test/Semantics/omp-allocate07.f90
index 2c79128..067fc42 100644
--- a/test/Semantics/omp-allocate07.f90
+++ b/test/Semantics/omp-allocate07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! A type parameter inquiry cannot appear in an allocate directive.
diff --git a/test/Semantics/omp-allocate08.f90 b/test/Semantics/omp-allocate08.f90
index 8d524ef..2594933 100644
--- a/test/Semantics/omp-allocate08.f90
+++ b/test/Semantics/omp-allocate08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! 2.11.3 allocate Directive
! If list items within the ALLOCATE directive have the SAVE attribute, are a common block name, or are declared in the scope of a
diff --git a/test/Semantics/omp-atomic.f90 b/test/Semantics/omp-atomic.f90
index 6fc500c..86d9457 100644
--- a/test/Semantics/omp-atomic.f90
+++ b/test/Semantics/omp-atomic.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
use omp_lib
! Check OpenMP 2.13.6 atomic Construct
diff --git a/test/Semantics/omp-atomic01.f90 b/test/Semantics/omp-atomic01.f90
index 8a8fa42..9f9e26f 100644
--- a/test/Semantics/omp-atomic01.f90
+++ b/test/Semantics/omp-atomic01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! Semantic checks for OpenMP 5.0 standard 2.17.7 atomic Construct.
use omp_lib
diff --git a/test/Semantics/omp-clause-validity01.f90 b/test/Semantics/omp-clause-validity01.f90
index e4dd150..f6150a2 100644
--- a/test/Semantics/omp-clause-validity01.f90
+++ b/test/Semantics/omp-clause-validity01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
use omp_lib
! Check OpenMP clause validity for the following directives:
!
diff --git a/test/Semantics/omp-combined-constructs.f90 b/test/Semantics/omp-combined-constructs.f90
index c437130..c8d3d26 100644
--- a/test/Semantics/omp-combined-constructs.f90
+++ b/test/Semantics/omp-combined-constructs.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
program main
implicit none
diff --git a/test/Semantics/omp-copyin01.f90 b/test/Semantics/omp-copyin01.f90
index 389e0f7..6aba8a2 100644
--- a/test/Semantics/omp-copyin01.f90
+++ b/test/Semantics/omp-copyin01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.4.1 copyin Clause
! A list item that appears in a copyin clause must be threadprivate
diff --git a/test/Semantics/omp-copyin02.f90 b/test/Semantics/omp-copyin02.f90
index f1d02ff..8c92ccc 100644
--- a/test/Semantics/omp-copyin02.f90
+++ b/test/Semantics/omp-copyin02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.4.1 copyin Clause
! A common block name that appears in a copyin clause must be declared to be
diff --git a/test/Semantics/omp-copyin03.f90 b/test/Semantics/omp-copyin03.f90
index 2d856c7..54a2604 100644
--- a/test/Semantics/omp-copyin03.f90
+++ b/test/Semantics/omp-copyin03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.4.1 copyin Clause
! A list item that appears in a copyin clause must be threadprivate.
diff --git a/test/Semantics/omp-copyin04.f90 b/test/Semantics/omp-copyin04.f90
index c73c628..297d42a 100644
--- a/test/Semantics/omp-copyin04.f90
+++ b/test/Semantics/omp-copyin04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.4.1 copyin Clause
! A list item that appears in a copyin clause must be threadprivate
diff --git a/test/Semantics/omp-copyin05.f90 b/test/Semantics/omp-copyin05.f90
index 5d05a92..8f1ba29 100644
--- a/test/Semantics/omp-copyin05.f90
+++ b/test/Semantics/omp-copyin05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.4.1 copyin Clause
! A common block name that appears in a copyin clause must be declared to be
diff --git a/test/Semantics/omp-copyprivate01.f90 b/test/Semantics/omp-copyprivate01.f90
index 75c9d4a..37912ed 100644
--- a/test/Semantics/omp-copyprivate01.f90
+++ b/test/Semantics/omp-copyprivate01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.4.2 copyprivate Clause
! A list item that appears in a copyprivate clause may not appear in a
diff --git a/test/Semantics/omp-copyprivate02.f90 b/test/Semantics/omp-copyprivate02.f90
index fe62eae..e2d408a 100644
--- a/test/Semantics/omp-copyprivate02.f90
+++ b/test/Semantics/omp-copyprivate02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.4.2 copyprivate Clause
! Pointers with the INTENT(IN) attribute may not appear in a copyprivate clause.
diff --git a/test/Semantics/omp-copyprivate03.f90 b/test/Semantics/omp-copyprivate03.f90
index b19e697..0ca4909 100644
--- a/test/Semantics/omp-copyprivate03.f90
+++ b/test/Semantics/omp-copyprivate03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.4.2 copyprivate Clause
! All list items that appear in the copyprivate clause must be either
diff --git a/test/Semantics/omp-declarative-directive.f90 b/test/Semantics/omp-declarative-directive.f90
index dca3d89..15744d9 100644
--- a/test/Semantics/omp-declarative-directive.f90
+++ b/test/Semantics/omp-declarative-directive.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! Check OpenMP declarative directives
diff --git a/test/Semantics/omp-default.f90 b/test/Semantics/omp-default.f90
index 5955a3a..e4f364c 100644
--- a/test/Semantics/omp-default.f90
+++ b/test/Semantics/omp-default.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.1 default Clause
program omp_default
diff --git a/test/Semantics/omp-default02.f90 b/test/Semantics/omp-default02.f90
index b95e673..f508d6a 100644
--- a/test/Semantics/omp-default02.f90
+++ b/test/Semantics/omp-default02.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.1 default Clause - a positive test case.
diff --git a/test/Semantics/omp-depend01.f90 b/test/Semantics/omp-depend01.f90
index bb42056..aedcb8b 100644
--- a/test/Semantics/omp-depend01.f90
+++ b/test/Semantics/omp-depend01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.13.9 Depend Clause
! List items used in depend clauses cannot be zero-length array sections.
diff --git a/test/Semantics/omp-depend02.f90 b/test/Semantics/omp-depend02.f90
index aa30da4..e00c851 100644
--- a/test/Semantics/omp-depend02.f90
+++ b/test/Semantics/omp-depend02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.13.9 Depend Clause
! A variable that is part of another variable
diff --git a/test/Semantics/omp-depend03.f90 b/test/Semantics/omp-depend03.f90
index 68cff43..9bca93a 100644
--- a/test/Semantics/omp-depend03.f90
+++ b/test/Semantics/omp-depend03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.13.9 Depend Clause
! Coarrays are not supported in depend clause
diff --git a/test/Semantics/omp-device-constructs.f90 b/test/Semantics/omp-device-constructs.f90
index 301b102..d5a1acc 100644
--- a/test/Semantics/omp-device-constructs.f90
+++ b/test/Semantics/omp-device-constructs.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! Check OpenMP clause validity for the following directives:
! 2.10 Device constructs
program main
diff --git a/test/Semantics/omp-do-collapse-positivecases.f90 b/test/Semantics/omp-do-collapse-positivecases.f90
index 3959a35..fecd4d5 100644
--- a/test/Semantics/omp-do-collapse-positivecases.f90
+++ b/test/Semantics/omp-do-collapse-positivecases.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Collapse Clause Positive cases
diff --git a/test/Semantics/omp-do-collapse.f90 b/test/Semantics/omp-do-collapse.f90
index c2af35b..c7404e0 100644
--- a/test/Semantics/omp-do-collapse.f90
+++ b/test/Semantics/omp-do-collapse.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Collapse Clause
program omp_doCollapse
diff --git a/test/Semantics/omp-do-cycle.f90 b/test/Semantics/omp-do-cycle.f90
index f3bc7bf..f01e10f 100644
--- a/test/Semantics/omp-do-cycle.f90
+++ b/test/Semantics/omp-do-cycle.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! Check for cycle statements leaving an OpenMP structured block
diff --git a/test/Semantics/omp-do-ordered-positivecases.f90 b/test/Semantics/omp-do-ordered-positivecases.f90
index bb571bb..e2f9ec0 100644
--- a/test/Semantics/omp-do-ordered-positivecases.f90
+++ b/test/Semantics/omp-do-ordered-positivecases.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Ordered Clause positive cases.
diff --git a/test/Semantics/omp-do-ordered.f90 b/test/Semantics/omp-do-ordered.f90
index adcfa69..77a8476 100644
--- a/test/Semantics/omp-do-ordered.f90
+++ b/test/Semantics/omp-do-ordered.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Ordered Clause
diff --git a/test/Semantics/omp-do-schedule01.f90 b/test/Semantics/omp-do-schedule01.f90
index f513e5f..2c52f96 100644
--- a/test/Semantics/omp-do-schedule01.f90
+++ b/test/Semantics/omp-do-schedule01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Schedule Clause
program omp_doSchedule
diff --git a/test/Semantics/omp-do-schedule02.f90 b/test/Semantics/omp-do-schedule02.f90
index 6272f74..28f84d2 100644
--- a/test/Semantics/omp-do-schedule02.f90
+++ b/test/Semantics/omp-do-schedule02.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Schedule Clause
program omp_doSchedule
diff --git a/test/Semantics/omp-do01.f90 b/test/Semantics/omp-do01.f90
index deb0d50..ee256c8 100644
--- a/test/Semantics/omp-do01.f90
+++ b/test/Semantics/omp-do01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
! The loop iteration variable may not appear in a firstprivate directive.
diff --git a/test/Semantics/omp-do03.f90 b/test/Semantics/omp-do03.f90
index 67002e9..f83cd7c 100644
--- a/test/Semantics/omp-do03.f90
+++ b/test/Semantics/omp-do03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
diff --git a/test/Semantics/omp-do04.f90 b/test/Semantics/omp-do04.f90
index 41709dd..3ef7e7f 100644
--- a/test/Semantics/omp-do04.f90
+++ b/test/Semantics/omp-do04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
! The loop iteration variable may not appear in a threadprivate directive.
diff --git a/test/Semantics/omp-do05.f90 b/test/Semantics/omp-do05.f90
index 3bf7670..a88d50b 100644
--- a/test/Semantics/omp-do05.f90
+++ b/test/Semantics/omp-do05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct restrictions on single directive.
diff --git a/test/Semantics/omp-do06.f90 b/test/Semantics/omp-do06.f90
index f39b0cd..1374e63 100644
--- a/test/Semantics/omp-do06.f90
+++ b/test/Semantics/omp-do06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
! The ordered clause must be present on the loop construct if any ordered
diff --git a/test/Semantics/omp-do08.f90 b/test/Semantics/omp-do08.f90
index 65e94df..f4d6f7d 100644
--- a/test/Semantics/omp-do08.f90
+++ b/test/Semantics/omp-do08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
diff --git a/test/Semantics/omp-do09.f90 b/test/Semantics/omp-do09.f90
index 2c781da..75b1ddc 100644
--- a/test/Semantics/omp-do09.f90
+++ b/test/Semantics/omp-do09.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
! The do-loop cannot be a DO WHILE or a DO loop without loop control.
diff --git a/test/Semantics/omp-do10.f90 b/test/Semantics/omp-do10.f90
index 0c61de2..d14278c 100644
--- a/test/Semantics/omp-do10.f90
+++ b/test/Semantics/omp-do10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
! The DO loop iteration variable must be of type integer.
diff --git a/test/Semantics/omp-do13.f90 b/test/Semantics/omp-do13.f90
index 6e3ac62..2168375 100644
--- a/test/Semantics/omp-do13.f90
+++ b/test/Semantics/omp-do13.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
diff --git a/test/Semantics/omp-do15.f90 b/test/Semantics/omp-do15.f90
index 4cdc2bd..10099d6 100644
--- a/test/Semantics/omp-do15.f90
+++ b/test/Semantics/omp-do15.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
diff --git a/test/Semantics/omp-do16.f90 b/test/Semantics/omp-do16.f90
index 2af5ed4..f312ba6 100644
--- a/test/Semantics/omp-do16.f90
+++ b/test/Semantics/omp-do16.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
diff --git a/test/Semantics/omp-firstprivate01.f90 b/test/Semantics/omp-firstprivate01.f90
index c461cef..507d167 100644
--- a/test/Semantics/omp-firstprivate01.f90
+++ b/test/Semantics/omp-firstprivate01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.4 firstprivate Clause
! Variables that appear in a firstprivate clause on a distribute or
diff --git a/test/Semantics/omp-flush01.f90 b/test/Semantics/omp-flush01.f90
index 03b0268..1eb9680 100644
--- a/test/Semantics/omp-flush01.f90
+++ b/test/Semantics/omp-flush01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! 2.17.8 Flush construct [OpenMP 5.0]
! memory-order-clause ->
diff --git a/test/Semantics/omp-flush02.f90 b/test/Semantics/omp-flush02.f90
index b9602de..a23f634 100644
--- a/test/Semantics/omp-flush02.f90
+++ b/test/Semantics/omp-flush02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! Check OpenMP 5.0 - 2.17.8 flush Construct
! Restriction -
diff --git a/test/Semantics/omp-lastprivate01.f90 b/test/Semantics/omp-lastprivate01.f90
index e9a4be6..1041555 100644
--- a/test/Semantics/omp-lastprivate01.f90
+++ b/test/Semantics/omp-lastprivate01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.5 lastprivate Clause
! A variable that appears in a lastprivate clause must be definable.
diff --git a/test/Semantics/omp-lastprivate02.f90 b/test/Semantics/omp-lastprivate02.f90
index b170318..61e2329 100644
--- a/test/Semantics/omp-lastprivate02.f90
+++ b/test/Semantics/omp-lastprivate02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.5 lastprivate Clause
! A list item that is private within a parallel region, or that appears in
diff --git a/test/Semantics/omp-linear-iter.f90 b/test/Semantics/omp-linear-iter.f90
index bb9dbcb..73389d9 100644
--- a/test/Semantics/omp-linear-iter.f90
+++ b/test/Semantics/omp-linear-iter.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! Various checks with the ordered construct
diff --git a/test/Semantics/omp-loop-association.f90 b/test/Semantics/omp-loop-association.f90
index 5e7dce6..de7c9cb 100644
--- a/test/Semantics/omp-loop-association.f90
+++ b/test/Semantics/omp-loop-association.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! Check the association between OpenMPLoopConstruct and DoConstruct
diff --git a/test/Semantics/omp-loop-simd01.f90 b/test/Semantics/omp-loop-simd01.f90
index 09d812a..0146a01 100644
--- a/test/Semantics/omp-loop-simd01.f90
+++ b/test/Semantics/omp-loop-simd01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.8.3 Loop simd Construct
diff --git a/test/Semantics/omp-nested-barrier.f90 b/test/Semantics/omp-nested-barrier.f90
index 63428b1..14bc36d 100644
--- a/test/Semantics/omp-nested-barrier.f90
+++ b/test/Semantics/omp-nested-barrier.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! Various checks with the nesting of BARRIER construct
diff --git a/test/Semantics/omp-nested-cancel.f90 b/test/Semantics/omp-nested-cancel.f90
index 579d762..97b3dd5 100644
--- a/test/Semantics/omp-nested-cancel.f90
+++ b/test/Semantics/omp-nested-cancel.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 5.0
! Check OpenMP construct validity for the following directives:
diff --git a/test/Semantics/omp-nested-cancellation-point.f90 b/test/Semantics/omp-nested-cancellation-point.f90
index a139bfa..e339e80 100644
--- a/test/Semantics/omp-nested-cancellation-point.f90
+++ b/test/Semantics/omp-nested-cancellation-point.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 5.0
! Check OpenMP construct validity for the following directives:
diff --git a/test/Semantics/omp-nested-distribute.f90 b/test/Semantics/omp-nested-distribute.f90
index 92a1216..7baffdf 100644
--- a/test/Semantics/omp-nested-distribute.f90
+++ b/test/Semantics/omp-nested-distribute.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! Check OpenMP clause validity for the following directives:
! 2.10 Device constructs
program main
diff --git a/test/Semantics/omp-nested-master.f90 b/test/Semantics/omp-nested-master.f90
index 9debac6..0134674 100644
--- a/test/Semantics/omp-nested-master.f90
+++ b/test/Semantics/omp-nested-master.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! Various checks with the nesting of MASTER construct
diff --git a/test/Semantics/omp-nested-simd.f90 b/test/Semantics/omp-nested-simd.f90
index bb1a219..33d5190 100644
--- a/test/Semantics/omp-nested-simd.f90
+++ b/test/Semantics/omp-nested-simd.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! Various checks with the nesting of SIMD construct
diff --git a/test/Semantics/omp-nested-target.f90 b/test/Semantics/omp-nested-target.f90
index da4d161..ea061bd 100644
--- a/test/Semantics/omp-nested-target.f90
+++ b/test/Semantics/omp-nested-target.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 5.0
! Check OpenMP construct validity for the following directives:
diff --git a/test/Semantics/omp-nested-teams.f90 b/test/Semantics/omp-nested-teams.f90
index 4a773b3..465ece4 100644
--- a/test/Semantics/omp-nested-teams.f90
+++ b/test/Semantics/omp-nested-teams.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 5.0
! Check OpenMP construct validity for the following directives:
diff --git a/test/Semantics/omp-nested01.f90 b/test/Semantics/omp-nested01.f90
index a24a99f..602790c 100644
--- a/test/Semantics/omp-nested01.f90
+++ b/test/Semantics/omp-nested01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! Check OpenMP 2.17 Nesting of Regions
diff --git a/test/Semantics/omp-no-dowhile-in-parallel.f90 b/test/Semantics/omp-no-dowhile-in-parallel.f90
index b5bf947..2cab4a4 100644
--- a/test/Semantics/omp-no-dowhile-in-parallel.f90
+++ b/test/Semantics/omp-no-dowhile-in-parallel.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
subroutine bug48308(x,i)
real :: x(:)
diff --git a/test/Semantics/omp-ordered-simd.f90 b/test/Semantics/omp-ordered-simd.f90
index 84ff740..3c544e9 100644
--- a/test/Semantics/omp-ordered-simd.f90
+++ b/test/Semantics/omp-ordered-simd.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! Various checks with the ordered construct
diff --git a/test/Semantics/omp-parallel-private01.f90 b/test/Semantics/omp-parallel-private01.f90
index 504b322..6d851af 100644
--- a/test/Semantics/omp-parallel-private01.f90
+++ b/test/Semantics/omp-parallel-private01.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.3 parallel private Clause
program omp_parallel_private
diff --git a/test/Semantics/omp-parallel-private02.f90 b/test/Semantics/omp-parallel-private02.f90
index f1bfeb5..aafd493 100644
--- a/test/Semantics/omp-parallel-private02.f90
+++ b/test/Semantics/omp-parallel-private02.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.3 parallel private Clause
program omp_parallel_private
diff --git a/test/Semantics/omp-parallel-private03.f90 b/test/Semantics/omp-parallel-private03.f90
index c76ce16..2675b44 100644
--- a/test/Semantics/omp-parallel-private03.f90
+++ b/test/Semantics/omp-parallel-private03.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.3 parallel private Clause
program omp_parallel_private
diff --git a/test/Semantics/omp-parallel-private04.f90 b/test/Semantics/omp-parallel-private04.f90
index 1b4bed5..4448f28 100644
--- a/test/Semantics/omp-parallel-private04.f90
+++ b/test/Semantics/omp-parallel-private04.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.3 parallel private Clause
program omp_parallel_private
diff --git a/test/Semantics/omp-parallel-shared01.f90 b/test/Semantics/omp-parallel-shared01.f90
index e5e3004..2914678 100644
--- a/test/Semantics/omp-parallel-shared01.f90
+++ b/test/Semantics/omp-parallel-shared01.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.2 parallel shared Clause
program omp_parallel_shared
diff --git a/test/Semantics/omp-parallel-shared02.f90 b/test/Semantics/omp-parallel-shared02.f90
index e91e47f..f2eda03 100644
--- a/test/Semantics/omp-parallel-shared02.f90
+++ b/test/Semantics/omp-parallel-shared02.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.2 parallel shared Clause
program omp_parallel_shared
diff --git a/test/Semantics/omp-parallel-shared03.f90 b/test/Semantics/omp-parallel-shared03.f90
index 48465f0..8ae800d 100644
--- a/test/Semantics/omp-parallel-shared03.f90
+++ b/test/Semantics/omp-parallel-shared03.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.2 parallel shared Clause
program omp_parallel_shared
diff --git a/test/Semantics/omp-parallel-shared04.f90 b/test/Semantics/omp-parallel-shared04.f90
index cb63e45..cd18a9e 100644
--- a/test/Semantics/omp-parallel-shared04.f90
+++ b/test/Semantics/omp-parallel-shared04.f90
@@ -1,5 +1,4 @@
-!RUN: %S/test_errors.sh %s %t %flang -fopenmp
-!REQUIRES: shell
+!RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.2 parallel shared Clause
program omp_parallel_shared
diff --git a/test/Semantics/omp-private01.f90 b/test/Semantics/omp-private01.f90
index 32887de..e5cc4ba 100644
--- a/test/Semantics/omp-private01.f90
+++ b/test/Semantics/omp-private01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.3 private Clause
! Pointers with the INTENT(IN) attribute may not appear in a private clause.
diff --git a/test/Semantics/omp-private02.f90 b/test/Semantics/omp-private02.f90
index db8c733..fbc1da8 100644
--- a/test/Semantics/omp-private02.f90
+++ b/test/Semantics/omp-private02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.15.3.3 private Clause
! Variables that appear in namelist statements may not appear in a private clause.
diff --git a/test/Semantics/omp-private03.f90 b/test/Semantics/omp-private03.f90
index addca11..a0cf829 100644
--- a/test/Semantics/omp-private03.f90
+++ b/test/Semantics/omp-private03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! Variables that appear in expressions for statement function definitions
! may not appear in private, firstprivate or lastprivate clauses.
diff --git a/test/Semantics/omp-reduction01.f90 b/test/Semantics/omp-reduction01.f90
index b7793b9..85e8669 100644
--- a/test/Semantics/omp-reduction01.f90
+++ b/test/Semantics/omp-reduction01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
program omp_reduction
diff --git a/test/Semantics/omp-reduction02.f90 b/test/Semantics/omp-reduction02.f90
index 8cac4fb..6343814 100644
--- a/test/Semantics/omp-reduction02.f90
+++ b/test/Semantics/omp-reduction02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
program omp_reduction
diff --git a/test/Semantics/omp-reduction03.f90 b/test/Semantics/omp-reduction03.f90
index 0019d44..7741579 100644
--- a/test/Semantics/omp-reduction03.f90
+++ b/test/Semantics/omp-reduction03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
diff --git a/test/Semantics/omp-reduction04.f90 b/test/Semantics/omp-reduction04.f90
index 75ff094..0a8a306 100644
--- a/test/Semantics/omp-reduction04.f90
+++ b/test/Semantics/omp-reduction04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
program omp_Reduction
diff --git a/test/Semantics/omp-reduction05.f90 b/test/Semantics/omp-reduction05.f90
index 1e1f7f1..2281060 100644
--- a/test/Semantics/omp-reduction05.f90
+++ b/test/Semantics/omp-reduction05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
diff --git a/test/Semantics/omp-reduction06.f90 b/test/Semantics/omp-reduction06.f90
index 6b71bd6..50b1736 100644
--- a/test/Semantics/omp-reduction06.f90
+++ b/test/Semantics/omp-reduction06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
diff --git a/test/Semantics/omp-reduction07.f90 b/test/Semantics/omp-reduction07.f90
index e1f1d86..74178a9 100644
--- a/test/Semantics/omp-reduction07.f90
+++ b/test/Semantics/omp-reduction07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
program omp_reduction
diff --git a/test/Semantics/omp-reduction10.f90 b/test/Semantics/omp-reduction10.f90
index 9c733da..96e0b50 100644
--- a/test/Semantics/omp-reduction10.f90
+++ b/test/Semantics/omp-reduction10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause
program omp_reduction
diff --git a/test/Semantics/omp-resolve01.f90 b/test/Semantics/omp-resolve01.f90
index daa5582..b716c4a 100644
--- a/test/Semantics/omp-resolve01.f90
+++ b/test/Semantics/omp-resolve01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! 2.4 An array section designates a subset of the elements in an array. Although
! Substring shares similar syntax but cannot be treated as valid array section.
diff --git a/test/Semantics/omp-resolve02.f90 b/test/Semantics/omp-resolve02.f90
index f16c51a..0bbf779 100644
--- a/test/Semantics/omp-resolve02.f90
+++ b/test/Semantics/omp-resolve02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! Test the effect to name resolution from illegal clause
diff --git a/test/Semantics/omp-resolve03.f90 b/test/Semantics/omp-resolve03.f90
index 6efb70d..58fc4d5 100644
--- a/test/Semantics/omp-resolve03.f90
+++ b/test/Semantics/omp-resolve03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! 2.15.3 Although variables in common blocks can be accessed by use association
! or host association, common block names cannot. As a result, a common block
diff --git a/test/Semantics/omp-resolve04.f90 b/test/Semantics/omp-resolve04.f90
index 6082276..147dc1a 100644
--- a/test/Semantics/omp-resolve04.f90
+++ b/test/Semantics/omp-resolve04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! 2.15.3 Data-Sharing Attribute Clauses
! A list item that specifies a given variable may not appear in more than
diff --git a/test/Semantics/omp-resolve05.f90 b/test/Semantics/omp-resolve05.f90
index 580f8a1..a54feae 100644
--- a/test/Semantics/omp-resolve05.f90
+++ b/test/Semantics/omp-resolve05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! 2.15.3 Data-Sharing Attribute Clauses
! 2.15.3.1 default Clause
diff --git a/test/Semantics/omp-resolve06.f90 b/test/Semantics/omp-resolve06.f90
index 87191b6..4711b00 100644
--- a/test/Semantics/omp-resolve06.f90
+++ b/test/Semantics/omp-resolve06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
use omp_lib
!2.11.4 Allocate Clause
!For any list item that is specified in the allocate
diff --git a/test/Semantics/omp-sections01.f90 b/test/Semantics/omp-sections01.f90
index 0a40337..4ea7593 100644
--- a/test/Semantics/omp-sections01.f90
+++ b/test/Semantics/omp-sections01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.2 sections Construct
diff --git a/test/Semantics/omp-simd-aligned.f90 b/test/Semantics/omp-simd-aligned.f90
index f4424aa..3870e21 100644
--- a/test/Semantics/omp-simd-aligned.f90
+++ b/test/Semantics/omp-simd-aligned.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.8.1 simd Construct
diff --git a/test/Semantics/omp-simd02.f90 b/test/Semantics/omp-simd02.f90
index dcaed43..0ac71c6 100644
--- a/test/Semantics/omp-simd02.f90
+++ b/test/Semantics/omp-simd02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.8.1 simd Construct
diff --git a/test/Semantics/omp-single01.f90 b/test/Semantics/omp-single01.f90
index 07b827b..a129409 100644
--- a/test/Semantics/omp-single01.f90
+++ b/test/Semantics/omp-single01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.3 single Construct
! Symbol present on multiple clauses
diff --git a/test/Semantics/omp-single02.f90 b/test/Semantics/omp-single02.f90
index e39ce25..cd80e7c 100644
--- a/test/Semantics/omp-single02.f90
+++ b/test/Semantics/omp-single02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.3 single Construct
! Copyprivate variable is not thread private or private in outer context
diff --git a/test/Semantics/omp-taskgroup01.f90 b/test/Semantics/omp-taskgroup01.f90
index c8de9f2..c220c66 100644
--- a/test/Semantics/omp-taskgroup01.f90
+++ b/test/Semantics/omp-taskgroup01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
use omp_lib
implicit none
diff --git a/test/Semantics/omp-taskloop-simd01.f90 b/test/Semantics/omp-taskloop-simd01.f90
index 7cfa384..e0ca7cf 100644
--- a/test/Semantics/omp-taskloop-simd01.f90
+++ b/test/Semantics/omp-taskloop-simd01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 5.0
! 2.10.3 taskloop simd Construct
diff --git a/test/Semantics/omp-taskloop01.f90 b/test/Semantics/omp-taskloop01.f90
index 699d4c9..14be62e 100644
--- a/test/Semantics/omp-taskloop01.f90
+++ b/test/Semantics/omp-taskloop01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.9.2 taskloop Construct
diff --git a/test/Semantics/omp-workshare01.f90 b/test/Semantics/omp-workshare01.f90
index 0b6a3a1..52d65bb 100644
--- a/test/Semantics/omp-workshare01.f90
+++ b/test/Semantics/omp-workshare01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.4 workshare Construct
! Invalid do construct inside !$omp workshare
diff --git a/test/Semantics/omp-workshare02.f90 b/test/Semantics/omp-workshare02.f90
index 996c384..c53b323 100644
--- a/test/Semantics/omp-workshare02.f90
+++ b/test/Semantics/omp-workshare02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.4 workshare Construct
! The !omp workshare construct must not contain any user defined
diff --git a/test/Semantics/omp-workshare03.f90 b/test/Semantics/omp-workshare03.f90
index 1c6e00d..e8e2241 100644
--- a/test/Semantics/omp-workshare03.f90
+++ b/test/Semantics/omp-workshare03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.4 workshare Construct
! All array assignments, scalar assignments, and masked array assignments
diff --git a/test/Semantics/omp-workshare04.f90 b/test/Semantics/omp-workshare04.f90
index 745dc9f..0c1e2b1 100644
--- a/test/Semantics/omp-workshare04.f90
+++ b/test/Semantics/omp-workshare04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.4 workshare Construct
! Checks for OpenMP Workshare construct
diff --git a/test/Semantics/omp-workshare05.f90 b/test/Semantics/omp-workshare05.f90
index 5f73119..70a8426 100644
--- a/test/Semantics/omp-workshare05.f90
+++ b/test/Semantics/omp-workshare05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -fopenmp
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -fopenmp
! OpenMP Version 4.5
! 2.7.4 workshare Construct
! Checks for OpenMP Parallel constructs enclosed in Workshare constructs
diff --git a/test/Semantics/random-seed.f90 b/test/Semantics/random-seed.f90
index defc0af..20e3088 100644
--- a/test/Semantics/random-seed.f90
+++ b/test/Semantics/random-seed.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! NULL() intrinsic function error tests
program test_random_seed
integer :: size_arg
diff --git a/test/Semantics/reshape.f90 b/test/Semantics/reshape.f90
index 4077e72..8113bff 100644
--- a/test/Semantics/reshape.f90
+++ b/test/Semantics/reshape.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!Tests for RESHAPE
program reshaper
diff --git a/test/Semantics/resolve01.f90 b/test/Semantics/resolve01.f90
index 09066a2..7a79994 100644
--- a/test/Semantics/resolve01.f90
+++ b/test/Semantics/resolve01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
integer :: x
!ERROR: The type of 'x' has already been declared
real :: x
diff --git a/test/Semantics/resolve02.f90 b/test/Semantics/resolve02.f90
index a66e8b5..3323866 100644
--- a/test/Semantics/resolve02.f90
+++ b/test/Semantics/resolve02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s
!ERROR: Declaration of 'x' conflicts with its use as internal procedure
real :: x
diff --git a/test/Semantics/resolve03.f90 b/test/Semantics/resolve03.f90
index 4fbc616..2593779 100644
--- a/test/Semantics/resolve03.f90
+++ b/test/Semantics/resolve03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
implicit none
integer :: x
!ERROR: No explicit type declared for 'y'
diff --git a/test/Semantics/resolve04.f90 b/test/Semantics/resolve04.f90
index 3bcd614..890a901 100644
--- a/test/Semantics/resolve04.f90
+++ b/test/Semantics/resolve04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!ERROR: No explicit type declared for 'f'
function f()
implicit none
diff --git a/test/Semantics/resolve05.f90 b/test/Semantics/resolve05.f90
index 34c88a7..5c045aa 100644
--- a/test/Semantics/resolve05.f90
+++ b/test/Semantics/resolve05.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
program p
integer :: p ! this is ok
end
diff --git a/test/Semantics/resolve06.f90 b/test/Semantics/resolve06.f90
index b2a385b..8c324a9 100644
--- a/test/Semantics/resolve06.f90
+++ b/test/Semantics/resolve06.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
implicit none
allocatable :: x
integer :: x
diff --git a/test/Semantics/resolve07.f90 b/test/Semantics/resolve07.f90
index e5dda5b..481094a 100644
--- a/test/Semantics/resolve07.f90
+++ b/test/Semantics/resolve07.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
integer :: x(2)
!ERROR: The dimensions of 'x' have already been declared
diff --git a/test/Semantics/resolve08.f90 b/test/Semantics/resolve08.f90
index 2a7f68d..b485f4c 100644
--- a/test/Semantics/resolve08.f90
+++ b/test/Semantics/resolve08.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
integer :: g(10)
f(i) = i + 1 ! statement function
g(i) = i + 2 ! mis-parsed array assignment
diff --git a/test/Semantics/resolve09.f90 b/test/Semantics/resolve09.f90
index c669b60..2954b14 100644
--- a/test/Semantics/resolve09.f90
+++ b/test/Semantics/resolve09.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
integer :: y
procedure() :: a
procedure(real) :: b
diff --git a/test/Semantics/resolve10.f90 b/test/Semantics/resolve10.f90
index 740195d..4f2949b 100644
--- a/test/Semantics/resolve10.f90
+++ b/test/Semantics/resolve10.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
public
type t
diff --git a/test/Semantics/resolve101.f90 b/test/Semantics/resolve101.f90
index 359807e..b1c259e 100644
--- a/test/Semantics/resolve101.f90
+++ b/test/Semantics/resolve101.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Ensure that spurious errors do not arise from FinishSpecificationPart
! checking on a nested specification part.
diff --git a/test/Semantics/resolve102.f90 b/test/Semantics/resolve102.f90
index 77b5e10..07f12d7 100644
--- a/test/Semantics/resolve102.f90
+++ b/test/Semantics/resolve102.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for circularly defined procedures
!ERROR: Procedure 'sub' is recursively defined. Procedures in the cycle: 'sub', 'p2'
diff --git a/test/Semantics/resolve104.f90 b/test/Semantics/resolve104.f90
index 48fe965..3b5bea4 100644
--- a/test/Semantics/resolve104.f90
+++ b/test/Semantics/resolve104.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test constant folding of type parameter values both a base value and a
! parameter name are supplied.
!
diff --git a/test/Semantics/resolve105.f90 b/test/Semantics/resolve105.f90
index 2e2feb8..ab294d4 100644
--- a/test/Semantics/resolve105.f90
+++ b/test/Semantics/resolve105.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test instantiation of components that are procedure pointers.
!
program test
diff --git a/test/Semantics/resolve11.f90 b/test/Semantics/resolve11.f90
index ec96727..2d93c63 100644
--- a/test/Semantics/resolve11.f90
+++ b/test/Semantics/resolve11.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
public i
integer, private :: j
diff --git a/test/Semantics/resolve12.f90 b/test/Semantics/resolve12.f90
index a04d7e6..aa9dbd7 100644
--- a/test/Semantics/resolve12.f90
+++ b/test/Semantics/resolve12.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
end
diff --git a/test/Semantics/resolve13.f90 b/test/Semantics/resolve13.f90
index a5647d0..1d7ec1a 100644
--- a/test/Semantics/resolve13.f90
+++ b/test/Semantics/resolve13.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
integer :: x
integer, private :: y
diff --git a/test/Semantics/resolve14.f90 b/test/Semantics/resolve14.f90
index c69b4d6..67cb5b2 100644
--- a/test/Semantics/resolve14.f90
+++ b/test/Semantics/resolve14.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
integer :: x
integer :: y
diff --git a/test/Semantics/resolve15.f90 b/test/Semantics/resolve15.f90
index f3bc8be..3a2f3d7 100644
--- a/test/Semantics/resolve15.f90
+++ b/test/Semantics/resolve15.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
real :: var
interface i
diff --git a/test/Semantics/resolve16.f90 b/test/Semantics/resolve16.f90
index 775af38..d5725f6 100644
--- a/test/Semantics/resolve16.f90
+++ b/test/Semantics/resolve16.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
interface
subroutine sub0
diff --git a/test/Semantics/resolve17.f90 b/test/Semantics/resolve17.f90
index 064340d..96ab5cd 100644
--- a/test/Semantics/resolve17.f90
+++ b/test/Semantics/resolve17.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
integer :: foo
!Note: PGI, Intel, and GNU allow this; NAG and Sun do not
diff --git a/test/Semantics/resolve18.f90 b/test/Semantics/resolve18.f90
index c917a68..1f59794 100644
--- a/test/Semantics/resolve18.f90
+++ b/test/Semantics/resolve18.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
implicit none
contains
diff --git a/test/Semantics/resolve19.f90 b/test/Semantics/resolve19.f90
index 7f2252e..d3bd38d 100644
--- a/test/Semantics/resolve19.f90
+++ b/test/Semantics/resolve19.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
interface a
subroutine s(x)
diff --git a/test/Semantics/resolve20.f90 b/test/Semantics/resolve20.f90
index 6908aeb..4d1c638 100644
--- a/test/Semantics/resolve20.f90
+++ b/test/Semantics/resolve20.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
abstract interface
subroutine foo
diff --git a/test/Semantics/resolve21.f90 b/test/Semantics/resolve21.f90
index bee368c..3be7602 100644
--- a/test/Semantics/resolve21.f90
+++ b/test/Semantics/resolve21.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
type :: t
integer :: i
diff --git a/test/Semantics/resolve22.f90 b/test/Semantics/resolve22.f90
index c35f057..6f2d009 100644
--- a/test/Semantics/resolve22.f90
+++ b/test/Semantics/resolve22.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
!OK: interface followed by type with same name
interface t
diff --git a/test/Semantics/resolve23.f90 b/test/Semantics/resolve23.f90
index 8a876b0..5bb2691 100644
--- a/test/Semantics/resolve23.f90
+++ b/test/Semantics/resolve23.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
type :: t
real :: y
diff --git a/test/Semantics/resolve24.f90 b/test/Semantics/resolve24.f90
index c6306fb..0b61a50 100644
--- a/test/Semantics/resolve24.f90
+++ b/test/Semantics/resolve24.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine test1
!ERROR: Generic interface 'foo' has both a function and a subroutine
interface foo
diff --git a/test/Semantics/resolve25.f90 b/test/Semantics/resolve25.f90
index e3fd2c2..9e717d5 100644
--- a/test/Semantics/resolve25.f90
+++ b/test/Semantics/resolve25.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
interface foo
real function s1(x)
diff --git a/test/Semantics/resolve26.f90 b/test/Semantics/resolve26.f90
index 96c7eef..5e77cc4 100644
--- a/test/Semantics/resolve26.f90
+++ b/test/Semantics/resolve26.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
interface
module subroutine s()
diff --git a/test/Semantics/resolve27.f90 b/test/Semantics/resolve27.f90
index 83ad408..cda39ea 100644
--- a/test/Semantics/resolve27.f90
+++ b/test/Semantics/resolve27.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
interface
module subroutine s()
diff --git a/test/Semantics/resolve28.f90 b/test/Semantics/resolve28.f90
index 2b5cc2f..d04e60a 100644
--- a/test/Semantics/resolve28.f90
+++ b/test/Semantics/resolve28.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s
type t
end type
diff --git a/test/Semantics/resolve29.f90 b/test/Semantics/resolve29.f90
index 96ec9d7..9e97569 100644
--- a/test/Semantics/resolve29.f90
+++ b/test/Semantics/resolve29.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
type t1
end type
diff --git a/test/Semantics/resolve30.f90 b/test/Semantics/resolve30.f90
index f34ad5f..c594cce 100644
--- a/test/Semantics/resolve30.f90
+++ b/test/Semantics/resolve30.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
integer x
block
diff --git a/test/Semantics/resolve31.f90 b/test/Semantics/resolve31.f90
index b99d081..57fa5e0 100644
--- a/test/Semantics/resolve31.f90
+++ b/test/Semantics/resolve31.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C735 If EXTENDS appears, SEQUENCE shall not appear.
! C738 The same private-or-sequence shall not appear more than once in a
! given derived-type-def .
diff --git a/test/Semantics/resolve32.f90 b/test/Semantics/resolve32.f90
index 542cd7e..060b29e 100644
--- a/test/Semantics/resolve32.f90
+++ b/test/Semantics/resolve32.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m2
public s2, s4
private s3
diff --git a/test/Semantics/resolve33.f90 b/test/Semantics/resolve33.f90
index 1144792..4b27a8d 100644
--- a/test/Semantics/resolve33.f90
+++ b/test/Semantics/resolve33.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Derived type parameters
! C731 The same type-param-name shall not appear more than once in a given
! derived-type-stmt.
diff --git a/test/Semantics/resolve34.f90 b/test/Semantics/resolve34.f90
index 9d816e5..e0c6168 100644
--- a/test/Semantics/resolve34.f90
+++ b/test/Semantics/resolve34.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Extended derived types
module m1
diff --git a/test/Semantics/resolve35.f90 b/test/Semantics/resolve35.f90
index bbefe27..1dcfd06 100644
--- a/test/Semantics/resolve35.f90
+++ b/test/Semantics/resolve35.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Construct names
subroutine s1
diff --git a/test/Semantics/resolve36.f90 b/test/Semantics/resolve36.f90
index ac8595c..bdb1b22 100644
--- a/test/Semantics/resolve36.f90
+++ b/test/Semantics/resolve36.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1568 The procedure-name shall have been declared to be a separate module
! procedure in the containing program unit or an ancestor of that program unit.
diff --git a/test/Semantics/resolve37.f90 b/test/Semantics/resolve37.f90
index 19c09fb..bd94e12 100644
--- a/test/Semantics/resolve37.f90
+++ b/test/Semantics/resolve37.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C701 The type-param-value for a kind type parameter shall be a constant
! expression. This constraint looks like a mistake in the standard.
integer, parameter :: k = 8
diff --git a/test/Semantics/resolve38.f90 b/test/Semantics/resolve38.f90
index 44f5f77..d1612eb 100644
--- a/test/Semantics/resolve38.f90
+++ b/test/Semantics/resolve38.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C772
module m1
type t1
diff --git a/test/Semantics/resolve39.f90 b/test/Semantics/resolve39.f90
index 6f27ab2..b456b3f 100644
--- a/test/Semantics/resolve39.f90
+++ b/test/Semantics/resolve39.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
implicit none
real(8) :: x = 2.0
diff --git a/test/Semantics/resolve40.f90 b/test/Semantics/resolve40.f90
index 32d247d..331c5eb 100644
--- a/test/Semantics/resolve40.f90
+++ b/test/Semantics/resolve40.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
namelist /nl/x
block
diff --git a/test/Semantics/resolve41.f90 b/test/Semantics/resolve41.f90
index 15eb1b9..d2a991c 100644
--- a/test/Semantics/resolve41.f90
+++ b/test/Semantics/resolve41.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
implicit none
real, parameter :: a = 8.0
diff --git a/test/Semantics/resolve42.f90 b/test/Semantics/resolve42.f90
index 6138a3e..a807d80 100644
--- a/test/Semantics/resolve42.f90
+++ b/test/Semantics/resolve42.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
!ERROR: Array 'z' without ALLOCATABLE or POINTER attribute must have explicit shape
common x, y(4), z(:)
diff --git a/test/Semantics/resolve43.f90 b/test/Semantics/resolve43.f90
index 27677de..5555f5e 100644
--- a/test/Semantics/resolve43.f90
+++ b/test/Semantics/resolve43.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Error tests for structure constructors.
! Errors caught by expression resolution are tested elsewhere; these are the
! errors meant to be caught by name resolution, as well as acceptable use
diff --git a/test/Semantics/resolve44.f90 b/test/Semantics/resolve44.f90
index 34c4d81..a251840 100644
--- a/test/Semantics/resolve44.f90
+++ b/test/Semantics/resolve44.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Error tests for recursive use of derived types.
! C744 If neither the POINTER nor the ALLOCATABLE attribute is specified, the
! declaration-type-spec in the component-def-stmt shall specify an intrinsic
diff --git a/test/Semantics/resolve45.f90 b/test/Semantics/resolve45.f90
index fb9ef37..b3a09d2 100644
--- a/test/Semantics/resolve45.f90
+++ b/test/Semantics/resolve45.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
function f1(x, y)
integer x
!ERROR: SAVE attribute may not be applied to dummy argument 'x'
diff --git a/test/Semantics/resolve46.f90 b/test/Semantics/resolve46.f90
index c762435..716d72f 100644
--- a/test/Semantics/resolve46.f90
+++ b/test/Semantics/resolve46.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C1030 - pointers to intrinsic procedures
program main
intrinsic :: cos ! a specific & generic intrinsic name
diff --git a/test/Semantics/resolve47.f90 b/test/Semantics/resolve47.f90
index 339fc61..b839cf9 100644
--- a/test/Semantics/resolve47.f90
+++ b/test/Semantics/resolve47.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
!ERROR: Logical constant '.true.' may not be used as a defined operator
interface operator(.TRUE.)
diff --git a/test/Semantics/resolve48.f90 b/test/Semantics/resolve48.f90
index 66e1eaa..e4e35c7 100644
--- a/test/Semantics/resolve48.f90
+++ b/test/Semantics/resolve48.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test correct use-association of a derived type.
module m1
implicit none
diff --git a/test/Semantics/resolve49.f90 b/test/Semantics/resolve49.f90
index 424f99a..8a6a09b 100644
--- a/test/Semantics/resolve49.f90
+++ b/test/Semantics/resolve49.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test section subscript
program p1
real :: a(10,10)
diff --git a/test/Semantics/resolve50.f90 b/test/Semantics/resolve50.f90
index a23cd19..cc4dc03 100644
--- a/test/Semantics/resolve50.f90
+++ b/test/Semantics/resolve50.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test coarray association in CHANGE TEAM statement
subroutine s1
diff --git a/test/Semantics/resolve51.f90 b/test/Semantics/resolve51.f90
index 4e8ab5e..232d8bc 100644
--- a/test/Semantics/resolve51.f90
+++ b/test/Semantics/resolve51.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test SELECT TYPE errors: C1157
subroutine s1()
diff --git a/test/Semantics/resolve52.f90 b/test/Semantics/resolve52.f90
index c69fa68..c9ee0b8 100644
--- a/test/Semantics/resolve52.f90
+++ b/test/Semantics/resolve52.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for C760:
! The passed-object dummy argument shall be a scalar, nonpointer, nonallocatable
! dummy data object with the same declared type as the type being defined;
diff --git a/test/Semantics/resolve53.f90 b/test/Semantics/resolve53.f90
index 357a9d0..d871848 100644
--- a/test/Semantics/resolve53.f90
+++ b/test/Semantics/resolve53.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! 15.4.3.4.5 Restrictions on generic declarations
! Specific procedures of generic interfaces must be distinguishable.
diff --git a/test/Semantics/resolve54.f90 b/test/Semantics/resolve54.f90
index bb53d05..8f48e3f 100644
--- a/test/Semantics/resolve54.f90
+++ b/test/Semantics/resolve54.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests based on examples in C.10.6
! C.10.6(10)
diff --git a/test/Semantics/resolve55.f90 b/test/Semantics/resolve55.f90
index b66099d..1133e79 100644
--- a/test/Semantics/resolve55.f90
+++ b/test/Semantics/resolve55.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for C1128:
! A variable-name that appears in a LOCAL or LOCAL_INIT locality-spec shall not
! have the ALLOCATABLE; INTENT (IN); or OPTIONAL attribute; shall not be of
diff --git a/test/Semantics/resolve56.f90 b/test/Semantics/resolve56.f90
index 0de93ef..e92a43d 100644
--- a/test/Semantics/resolve56.f90
+++ b/test/Semantics/resolve56.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test that associations constructs can be correctly combined. The intrinsic
! functions are not what is tested here, they are only use to reveal the types
! of local variables.
diff --git a/test/Semantics/resolve57.f90 b/test/Semantics/resolve57.f90
index 2b917b8..526bdc5 100644
--- a/test/Semantics/resolve57.f90
+++ b/test/Semantics/resolve57.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for the last sentence of C1128:
!A variable-name that is not permitted to appear in a variable definition
!context shall not appear in a LOCAL or LOCAL_INIT locality-spec.
diff --git a/test/Semantics/resolve58.f90 b/test/Semantics/resolve58.f90
index 7444379..447e14a 100644
--- a/test/Semantics/resolve58.f90
+++ b/test/Semantics/resolve58.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1(x, y)
!ERROR: Array pointer 'x' must have deferred shape or assumed rank
real, pointer :: x(1:) ! C832
diff --git a/test/Semantics/resolve59.f90 b/test/Semantics/resolve59.f90
index 09085fa..0eeb117 100644
--- a/test/Semantics/resolve59.f90
+++ b/test/Semantics/resolve59.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Testing 15.6.2.2 point 4 (What function-name refers to depending on the
! presence of RESULT).
diff --git a/test/Semantics/resolve60.f90 b/test/Semantics/resolve60.f90
index 336d8e9..bf81db6 100644
--- a/test/Semantics/resolve60.f90
+++ b/test/Semantics/resolve60.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Testing 7.6 enum
! OK
diff --git a/test/Semantics/resolve61.f90 b/test/Semantics/resolve61.f90
index 031aee2..7fa7998 100644
--- a/test/Semantics/resolve61.f90
+++ b/test/Semantics/resolve61.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
program p1
integer(8) :: a, b, c, d
pointer(a, b)
diff --git a/test/Semantics/resolve62.f90 b/test/Semantics/resolve62.f90
index 7de82d4..ef565dd 100644
--- a/test/Semantics/resolve62.f90
+++ b/test/Semantics/resolve62.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Resolve generic based on number of arguments
subroutine s1
interface f
diff --git a/test/Semantics/resolve63.f90 b/test/Semantics/resolve63.f90
index 2d38e90..adc3010 100644
--- a/test/Semantics/resolve63.f90
+++ b/test/Semantics/resolve63.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Invalid operand types when user-defined operator is available
module m1
type :: t
diff --git a/test/Semantics/resolve64.f90 b/test/Semantics/resolve64.f90
index 40d16ce..5a6bdc1 100644
--- a/test/Semantics/resolve64.f90
+++ b/test/Semantics/resolve64.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang -flogical-abbreviations -fxor-operator
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang -flogical-abbreviations -fxor-operator
! Like m4 in resolve63 but compiled with different options.
! Alternate operators are enabled so treat these as intrinsic.
diff --git a/test/Semantics/resolve65.f90 b/test/Semantics/resolve65.f90
index 701c53a..d1fb26d 100644
--- a/test/Semantics/resolve65.f90
+++ b/test/Semantics/resolve65.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test restrictions on what subprograms can be used for defined assignment.
module m1
diff --git a/test/Semantics/resolve66.f90 b/test/Semantics/resolve66.f90
index 7474f7f..acc4701 100644
--- a/test/Semantics/resolve66.f90
+++ b/test/Semantics/resolve66.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test that user-defined assignment is used in the right places
module m1
diff --git a/test/Semantics/resolve67.f90 b/test/Semantics/resolve67.f90
index 2c554af..6ecc738 100644
--- a/test/Semantics/resolve67.f90
+++ b/test/Semantics/resolve67.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test restrictions on what subprograms can be used for defined operators.
! See: 15.4.3.4.2
diff --git a/test/Semantics/resolve68.f90 b/test/Semantics/resolve68.f90
index a88ab00..0221fbc 100644
--- a/test/Semantics/resolve68.f90
+++ b/test/Semantics/resolve68.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test resolution of type-bound generics.
module m1
diff --git a/test/Semantics/resolve69.f90 b/test/Semantics/resolve69.f90
index f6ce5c7..e3f00e2 100644
--- a/test/Semantics/resolve69.f90
+++ b/test/Semantics/resolve69.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1()
! C701 (R701) The type-param-value for a kind type parameter shall be a
! constant expression.
diff --git a/test/Semantics/resolve70.f90 b/test/Semantics/resolve70.f90
index 60c488d..b01469c 100644
--- a/test/Semantics/resolve70.f90
+++ b/test/Semantics/resolve70.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C703 (R702) The derived-type-spec shall not specify an abstract type (7.5.7).
! This constraint refers to the derived-type-spec in a type-spec. A type-spec
! can appear in an ALLOCATE statement, an ac-spec for an array constructor, and
diff --git a/test/Semantics/resolve71.f90 b/test/Semantics/resolve71.f90
index 5bdbbda..51e8f07 100644
--- a/test/Semantics/resolve71.f90
+++ b/test/Semantics/resolve71.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C708 An entity declared with the CLASS keyword shall be a dummy argument
! or have the ALLOCATABLE or POINTER attribute.
subroutine s()
diff --git a/test/Semantics/resolve72.f90 b/test/Semantics/resolve72.f90
index 6f70e9a..cf0d54a 100644
--- a/test/Semantics/resolve72.f90
+++ b/test/Semantics/resolve72.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C709 An assumed-type entity shall be a dummy data object that does not have
! the ALLOCATABLE, CODIMENSION, INTENT (OUT), POINTER, or VALUE attribute and
! is not an explicit-shape array.
diff --git a/test/Semantics/resolve73.f90 b/test/Semantics/resolve73.f90
index 9065696..1ec9f09 100644
--- a/test/Semantics/resolve73.f90
+++ b/test/Semantics/resolve73.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C721 A type-param-value of * shall be used only
! * to declare a dummy argument,
! * to declare a named constant,
diff --git a/test/Semantics/resolve74.f90 b/test/Semantics/resolve74.f90
index 12be78f..14d1c8a 100644
--- a/test/Semantics/resolve74.f90
+++ b/test/Semantics/resolve74.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C722 A function name shall not be declared with an asterisk type-param-value
! unless it is of type CHARACTER and is the name of a dummy function or the
! name of the result of an external function.
diff --git a/test/Semantics/resolve75.f90 b/test/Semantics/resolve75.f90
index 2326903..b0d9072 100644
--- a/test/Semantics/resolve75.f90
+++ b/test/Semantics/resolve75.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C726 The length specified for a character statement function or for a
! statement function dummy argument of type character shall be a constant
! expression.
diff --git a/test/Semantics/resolve76.f90 b/test/Semantics/resolve76.f90
index 2e594aa..6b182d1 100644
--- a/test/Semantics/resolve76.f90
+++ b/test/Semantics/resolve76.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! 15.6.2.5(3)
diff --git a/test/Semantics/resolve77.f90 b/test/Semantics/resolve77.f90
index 3c41384..d762781 100644
--- a/test/Semantics/resolve77.f90
+++ b/test/Semantics/resolve77.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests valid and invalid usage of forward references to procedures
! in specification expressions.
module m
diff --git a/test/Semantics/resolve78.f90 b/test/Semantics/resolve78.f90
index 296c198..8c25f32 100644
--- a/test/Semantics/resolve78.f90
+++ b/test/Semantics/resolve78.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
! C743 No component-attr-spec shall appear more than once in a
! given component-def-stmt.
diff --git a/test/Semantics/resolve79.f90 b/test/Semantics/resolve79.f90
index 8f828fc..037e107 100644
--- a/test/Semantics/resolve79.f90
+++ b/test/Semantics/resolve79.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
! C755 The same proc-component-attr-spec shall not appear more than once in a
! given proc-component-def-stmt.
diff --git a/test/Semantics/resolve80.f90 b/test/Semantics/resolve80.f90
index dcc544f..e787a4b 100644
--- a/test/Semantics/resolve80.f90
+++ b/test/Semantics/resolve80.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
!C778 The same binding-attr shall not appear more than once in a given
!binding-attr-list.
diff --git a/test/Semantics/resolve81.f90 b/test/Semantics/resolve81.f90
index cd74e10..2a0b961 100644
--- a/test/Semantics/resolve81.f90
+++ b/test/Semantics/resolve81.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C801 The same attr-spec shall not appear more than once in a given
! type-declaration-stmt.
!
diff --git a/test/Semantics/resolve82.f90 b/test/Semantics/resolve82.f90
index 461bd3c..ef216ab 100644
--- a/test/Semantics/resolve82.f90
+++ b/test/Semantics/resolve82.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C815 An entity shall not be explicitly given any attribute more than once in
! a scoping unit.
!
diff --git a/test/Semantics/resolve83.f90 b/test/Semantics/resolve83.f90
index 8d28f7f..fc18f28 100644
--- a/test/Semantics/resolve83.f90
+++ b/test/Semantics/resolve83.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
! For C1543
diff --git a/test/Semantics/resolve84.f90 b/test/Semantics/resolve84.f90
index 6a7ff3e..8562a0c 100644
--- a/test/Semantics/resolve84.f90
+++ b/test/Semantics/resolve84.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C729 A derived type type-name shall not be DOUBLEPRECISION or the same as
! the name of any intrinsic type defined in this document.
subroutine s()
diff --git a/test/Semantics/resolve85.f90 b/test/Semantics/resolve85.f90
index c1817b9..d1720bd 100644
--- a/test/Semantics/resolve85.f90
+++ b/test/Semantics/resolve85.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m
! C730 The same type-attr-spec shall not appear more than once in a given
! derived-type-stmt.
diff --git a/test/Semantics/resolve86.f90 b/test/Semantics/resolve86.f90
index c4950b4..15969c7 100644
--- a/test/Semantics/resolve86.f90
+++ b/test/Semantics/resolve86.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C736 If EXTENDS appears and the type being defined has a coarray ultimate
! component, its parent type shall have a coarray ultimate component.
!
diff --git a/test/Semantics/resolve87.f90 b/test/Semantics/resolve87.f90
index abdc388..5275e6f 100644
--- a/test/Semantics/resolve87.f90
+++ b/test/Semantics/resolve87.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C737 If EXTENDS appears and the type being defined has a potential
! subobject component of type EVENT_TYPE or LOCK_TYPE from the intrinsic
! module ISO_FORTRAN_ENV, its parent type shall be EVENT_TYPE or LOCK_TYPE
diff --git a/test/Semantics/resolve88.f90 b/test/Semantics/resolve88.f90
index a0cb96b..c02561f 100644
--- a/test/Semantics/resolve88.f90
+++ b/test/Semantics/resolve88.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C746, C747, and C748
module m
use ISO_FORTRAN_ENV
diff --git a/test/Semantics/resolve89.f90 b/test/Semantics/resolve89.f90
index f37ce1e..a15e545 100644
--- a/test/Semantics/resolve89.f90
+++ b/test/Semantics/resolve89.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C750 Each bound in the explicit-shape-spec shall be a specification
! expression in which there are no references to specification functions or
! the intrinsic functions ALLOCATED, ASSOCIATED, EXTENDS_TYPE_OF, PRESENT,
diff --git a/test/Semantics/resolve90.f90 b/test/Semantics/resolve90.f90
index c0aa420..1246734 100644
--- a/test/Semantics/resolve90.f90
+++ b/test/Semantics/resolve90.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Testing for pointer constant, along with :
! C751 A component shall not have both the ALLOCATABLE and POINTER attributes.
! C752 If the CONTIGUOUS attribute is specified, the component shall be an
diff --git a/test/Semantics/resolve91.f90 b/test/Semantics/resolve91.f90
index 44b1dc5..f458823 100644
--- a/test/Semantics/resolve91.f90
+++ b/test/Semantics/resolve91.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for duplicate definitions and initializations, mostly of procedures
module m
procedure(real), pointer :: p
diff --git a/test/Semantics/resolve92.f90 b/test/Semantics/resolve92.f90
index 4b7e795..a149454 100644
--- a/test/Semantics/resolve92.f90
+++ b/test/Semantics/resolve92.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
implicit none
diff --git a/test/Semantics/resolve93.f90 b/test/Semantics/resolve93.f90
index 5454267..71e0e40 100644
--- a/test/Semantics/resolve93.f90
+++ b/test/Semantics/resolve93.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1()
character(10) str
character(10) str1
diff --git a/test/Semantics/resolve94.f90 b/test/Semantics/resolve94.f90
index bec63f3..e47ab4a 100644
--- a/test/Semantics/resolve94.f90
+++ b/test/Semantics/resolve94.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! C929 No specifier shall appear more than once in a given
! image-selector-spec-list.
! C930 TEAM and TEAM_NUMBER shall not both appear in the same
diff --git a/test/Semantics/resolve95.f90 b/test/Semantics/resolve95.f90
index 38103c3..b3ddb2d 100644
--- a/test/Semantics/resolve95.f90
+++ b/test/Semantics/resolve95.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test SELECT TYPE and ASSOCIATE errors: C1103
subroutine s1()
diff --git a/test/Semantics/resolve96.f90 b/test/Semantics/resolve96.f90
index 6cb6180..680d6b7 100644
--- a/test/Semantics/resolve96.f90
+++ b/test/Semantics/resolve96.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check distinguishability for specific procedures of defined operators and
! assignment. These are different from names because there a normal generic
diff --git a/test/Semantics/resolve97.f90 b/test/Semantics/resolve97.f90
index fff143e..f9f545e 100644
--- a/test/Semantics/resolve97.f90
+++ b/test/Semantics/resolve97.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Check errors from illegal (10.1.12 para 2) forward references
! in specification expressions to entities declared later in the
diff --git a/test/Semantics/resolve98.f90 b/test/Semantics/resolve98.f90
index c5fe441..108bfda 100644
--- a/test/Semantics/resolve98.f90
+++ b/test/Semantics/resolve98.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Errors when comparing LOGICAL operands
program testCompare
diff --git a/test/Semantics/resolve99.f90 b/test/Semantics/resolve99.f90
index ae10d56..a2dd41c 100644
--- a/test/Semantics/resolve99.f90
+++ b/test/Semantics/resolve99.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for the index-name of a FORALL statement
module m1
diff --git a/test/Semantics/save01.f90 b/test/Semantics/save01.f90
index beffcc9..2d435af 100644
--- a/test/Semantics/save01.f90
+++ b/test/Semantics/save01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
MODULE test
SAVE
CONTAINS
diff --git a/test/Semantics/select-rank.f90 b/test/Semantics/select-rank.f90
index 6058287..d0cd931 100644
--- a/test/Semantics/select-rank.f90
+++ b/test/Semantics/select-rank.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!Tests for SELECT RANK Construct(R1148)
program select_rank
diff --git a/test/Semantics/select-rank02.f90 b/test/Semantics/select-rank02.f90
index acf789c..b39a75c 100644
--- a/test/Semantics/select-rank02.f90
+++ b/test/Semantics/select-rank02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
!Shape analysis related tests for SELECT RANK Construct(R1148)
program select_rank
diff --git a/test/Semantics/selecttype01.f90 b/test/Semantics/selecttype01.f90
index a564bd8..62b3504 100644
--- a/test/Semantics/selecttype01.f90
+++ b/test/Semantics/selecttype01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test for checking select type constraints,
module m1
use ISO_C_BINDING
diff --git a/test/Semantics/selecttype02.f90 b/test/Semantics/selecttype02.f90
index 3094250..54127c0 100644
--- a/test/Semantics/selecttype02.f90
+++ b/test/Semantics/selecttype02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
use ISO_C_BINDING
type shape
diff --git a/test/Semantics/selecttype03.f90 b/test/Semantics/selecttype03.f90
index c4f4143..73274e2 100644
--- a/test/Semantics/selecttype03.f90
+++ b/test/Semantics/selecttype03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test various conditions in C1158.
implicit none
diff --git a/test/Semantics/separate-mp01.f90 b/test/Semantics/separate-mp01.f90
index 03b27e1..27bf2a2 100644
--- a/test/Semantics/separate-mp01.f90
+++ b/test/Semantics/separate-mp01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! case 1: ma_create_new_fun' was not declared a separate module procedure
module m1
diff --git a/test/Semantics/separate-mp02.f90 b/test/Semantics/separate-mp02.f90
index 2c0ac61..576a3b4 100644
--- a/test/Semantics/separate-mp02.f90
+++ b/test/Semantics/separate-mp02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! When a module subprogram has the MODULE prefix the following must match
! with the corresponding separate module procedure interface body:
diff --git a/test/Semantics/shape.f90 b/test/Semantics/shape.f90
index 00c7bfd..f43b81f 100644
--- a/test/Semantics/shape.f90
+++ b/test/Semantics/shape.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Test comparisons that use the intrinsic SHAPE() as an operand
program testShape
contains
diff --git a/test/Semantics/spec-expr.f90 b/test/Semantics/spec-expr.f90
index c88483a..41e82d7 100644
--- a/test/Semantics/spec-expr.f90
+++ b/test/Semantics/spec-expr.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Tests for the 14 items that specify a "specification expression" in section
! 10.1.11
diff --git a/test/Semantics/stop01.f90 b/test/Semantics/stop01.f90
index 540cec5..cf7b005 100644
--- a/test/Semantics/stop01.f90
+++ b/test/Semantics/stop01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
program main
implicit none
integer :: i = -1
diff --git a/test/Semantics/structconst01.f90 b/test/Semantics/structconst01.f90
index c225d26..bdf400c 100644
--- a/test/Semantics/structconst01.f90
+++ b/test/Semantics/structconst01.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Error tests for structure constructors.
! Errors caught by name resolution are tested elsewhere; these are the
! errors meant to be caught by expression semantic analysis, as well as
diff --git a/test/Semantics/structconst02.f90 b/test/Semantics/structconst02.f90
index ff523c2..c3494b2 100644
--- a/test/Semantics/structconst02.f90
+++ b/test/Semantics/structconst02.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Error tests for structure constructors: per-component type
! (in)compatibility.
diff --git a/test/Semantics/structconst03.f90 b/test/Semantics/structconst03.f90
index 70694f0..64fc500 100644
--- a/test/Semantics/structconst03.f90
+++ b/test/Semantics/structconst03.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Error tests for structure constructors: C1594 violations
! from assigning globally-visible data to POINTER components.
! test/Semantics/structconst04.f90 is this same test without type
diff --git a/test/Semantics/structconst04.f90 b/test/Semantics/structconst04.f90
index 728a4c7..5a168fa 100644
--- a/test/Semantics/structconst04.f90
+++ b/test/Semantics/structconst04.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! Error tests for structure constructors: C1594 violations
! from assigning globally-visible data to POINTER components.
! This test is structconst03.f90 with the type parameters removed.
diff --git a/test/Semantics/test_errors.py b/test/Semantics/test_errors.py
new file mode 100755
index 0000000..ce176e2
--- /dev/null
+++ b/test/Semantics/test_errors.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python3
+
+"""Compiles a source file and checks errors against those listed in the file.
+
+Parameters:
+ sys.argv[1]: a source file with contains the input and expected output
+ sys.argv[2]: the Flang frontend driver
+ sys.argv[3:]: Optional arguments to the Flang frontend driver"""
+
+import sys
+import re
+import tempfile
+import subprocess
+import common as cm
+
+from difflib import unified_diff
+
+cm.check_args(sys.argv)
+srcdir = cm.set_source(sys.argv[1])
+with open(srcdir, 'r') as f:
+ src = f.readlines()
+actual = ""
+expect = ""
+diffs = ""
+log = ""
+
+flang_fc1 = cm.set_executable(sys.argv[2])
+flang_fc1_args = sys.argv[3:]
+flang_fc1_options = "-fsyntax-only"
+
+# Compiles, and reads in the output from the compilation process
+cmd = [flang_fc1, *flang_fc1_args, flang_fc1_options, str(srcdir)]
+with tempfile.TemporaryDirectory() as tmpdir:
+ try:
+ proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ check=True, universal_newlines=True, cwd=tmpdir)
+ except subprocess.CalledProcessError as e:
+ log = e.stderr
+ if e.returncode >= 128:
+ print(f"{log}")
+ sys.exit(1)
+
+# Cleans up the output from the compilation process to be easier to process
+for line in log.split('\n'):
+ m = re.search(r"[^:]*:(\d+:).*(?:error:)(.*)", line)
+ if m:
+ actual += m.expand(r"\1\2\n")
+
+# Gets the expected errors and their line number
+errors = []
+for i, line in enumerate(src, 1):
+ m = re.search(r"(?:^\s*!ERROR: )(.*)", line)
+ if m:
+ errors.append(m.group(1))
+ continue
+ if errors:
+ for x in errors:
+ expect += f"{i}: {x}\n"
+ errors = []
+
+# Compares the expected errors with the compiler errors
+for line in unified_diff(actual.split("\n"), expect.split("\n"), n=0):
+ line = re.sub(r"(^\-)(\d+:)", r"\nactual at \g<2>", line)
+ line = re.sub(r"(^\+)(\d+:)", r"\nexpect at \g<2>", line)
+ diffs += line
+
+if diffs != "":
+ print(diffs)
+ print()
+ print("FAIL")
+ sys.exit(1)
+else:
+ print()
+ print("PASS")
+
diff --git a/test/Semantics/test_errors.sh b/test/Semantics/test_errors.sh
deleted file mode 100755
index 20486b3..0000000
--- a/test/Semantics/test_errors.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env bash
-# Compile a source file and check errors against those listed in the file.
-# Change the compiler by setting the FLANG_FC1 environment variable.
-
-FLANG_FC1_OPTIONS="-fsyntax-only"
-srcdir=$(dirname $0)
-source $srcdir/common.sh
-[[ ! -f $src ]] && die "File not found: $src"
-
-log=$temp/log
-actual=$temp/actual
-expect=$temp/expect
-diffs=$temp/diffs
-
-cmd="$FLANG_FC1 $FLANG_FC1_OPTIONS $src"
-( cd $temp; $cmd ) > $log 2>&1
-if [[ $? -ge 128 ]]; then
- cat $log
- exit 1
-fi
-
-# $actual has errors from the compiler; $expect has them from !ERROR comments in source
-# Format both as "<line>: <text>" so they can be diffed.
-sed -n 's=^[^:]*:\([^:]*\):[^:]*: error: =\1: =p' $log > $actual
-awk '
- BEGIN { FS = "!ERROR: "; }
- /^ *!ERROR: / { errors[nerrors++] = $2; next; }
- { for (i = 0; i < nerrors; ++i) printf "%d: %s\n", NR, errors[i]; nerrors = 0; }
-' $src > $expect
-
-if diff -U0 $actual $expect > $diffs; then
- echo PASS
-else
- echo "$cmd"
- < $diffs \
- sed -n -e 's/^-\([0-9]\)/actual at \1/p' -e 's/^+\([0-9]\)/expect at \1/p' \
- | sort -n -k 3
- die FAIL
-fi
diff --git a/test/Semantics/unpack.f90 b/test/Semantics/unpack.f90
index 71bd21c..32c313d 100644
--- a/test/Semantics/unpack.f90
+++ b/test/Semantics/unpack.f90
@@ -1,5 +1,4 @@
-! RUN: %S/test_errors.sh %s %t %flang_fc1
-! REQUIRES: shell
+! RUN: %python %S/test_errors.py %s %flang_fc1
! UNPACK() intrinsic function error tests
program test_unpack
integer, dimension(2) :: vector = [343, 512]