Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix a dead store reported by infer
[simgrid.git] / teshsuite / smpi / MBI / RMARemoteRemoteConcurrencyGenerator.py
index c856c6d115b679206f0bc2b087f64594d7c8d4b2..9361187b4154e97a4fa4e740f68719fa1e95e4c6 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/python3
 import os
 import sys
-from generator_utils import *
+import generator_utils as gen
 
 template = """// @{generatedby}@
 /* ///////////////////////// The MPI Bugs Initiative ////////////////////////
@@ -11,21 +11,21 @@ template = """// @{generatedby}@
   Description: @{shortdesc}@
     @{longdesc}@
 
-       Version of MPI: Conforms to MPI 2, requires MPI 3 implementation (for lock_all/unlock_all epochs)
+  Version of MPI: Conforms to MPI 2, requires MPI 3 implementation (for lock_all/unlock_all epochs)
 
 BEGIN_MPI_FEATURES
-       P2P!basic: Lacking 
-       P2P!nonblocking: Lacking
-       P2P!persistent: Lacking
-       COLL!basic: Lacking
-       COLL!nonblocking: Lacking
-       COLL!persistent: Lacking
-       COLL!tools: Lacking
-       RMA: @{rmafeature}@
+  P2P!basic: Lacking
+  P2P!nonblocking: Lacking
+  P2P!persistent: Lacking
+  COLL!basic: Lacking
+  COLL!nonblocking: Lacking
+  COLL!persistent: Lacking
+  COLL!tools: Lacking
+  RMA: @{rmafeature}@
 END_MPI_FEATURES
 
 BEGIN_MBI_TESTS
-  $ mpirun -np 2 ${EXE}
+  $ mpirun -np 3 ${EXE}
   | @{outcome}@
   | @{errormsg}@
 END_MBI_TESTS
@@ -40,7 +40,7 @@ END_MBI_TESTS
 int main(int argc, char **argv) {
   int nprocs = -1;
   int rank = -1;
-       MPI_Win win;
+  MPI_Win win;
   int winbuf[100] = {0};
 
   MPI_Init(&argc, &argv);
@@ -51,18 +51,22 @@ int main(int argc, char **argv) {
   if (nprocs < 2)
     printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n");
 
-       MPI_Datatype type = MPI_INT;
-       int target = 1;
+  MPI_Datatype type = MPI_INT;
+  int target = 1;
 
   MPI_Win_create(&winbuf, 100 * sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
 
-       @{init1}@ 
+  @{init1}@
+  @{init2}@
 
   @{epoch}@
 
-       if (rank == 0 || rank == 2) {
-       @{operation1}@ /* MBIERROR1 */
-       }
+  if (rank == 0) {
+    @{operation1}@ /* MBIERROR1 */
+  }
+  else if (rank == 2) {
+    @{operation2}@ /* MBIERROR2 */
+  }
 
   @{finEpoch}@
 
@@ -74,24 +78,27 @@ int main(int argc, char **argv) {
 """
 
 
-for e in epoch:
-    for p1 in get + put: 
-        patterns = {}
-        patterns = {'e': e, 'p1': p1}
-        patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.'  
-        patterns['rmafeature'] = 'Yes'
-        patterns['p1'] = p1 
-        patterns['e'] = e 
-        patterns['epoch'] = epoch[e]("1") 
-        patterns['finEpoch'] = finEpoch[e]("1") 
-        patterns['init1'] = init[p1]("1") 
-        patterns['operation1'] = operation[p1]("1") 
-
-               # Generate a data race (Get + Get/load/store/Put)
-        replace = patterns 
-        replace['shortdesc'] = 'Global Concurrency error.' 
-        replace['longdesc'] = 'Global Concurrency error. Both processes 0 and 2 access the window in process 1 with @{p1}@'
-        replace['outcome'] = 'ERROR: GlobalConcurrency' 
-        replace['errormsg'] = 'Global Concurrency error. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ conflicts in process 1'
-        make_file(template, f'GlobalConcurrency_rr_{e}_{p1}_nok.c', replace)
-
+for e in gen.epoch:
+    for p1 in gen.get + gen.put:
+        for p2 in gen.put:
+            patterns = {}
+            patterns = {'e': e, 'p1': p1, 'p2': p2}
+            patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.'
+            patterns['rmafeature'] = 'Yes'
+            patterns['p1'] = p1
+            patterns['p2'] = p2
+            patterns['e'] = e
+            patterns['epoch'] = gen.epoch[e]("1")
+            patterns['finEpoch'] = gen.finEpoch[e]("1")
+            patterns['init1'] = gen.init[p1]("1")
+            patterns['operation1'] = gen.operation[p1]("1")
+            patterns['init2'] = gen.init[p2]("2")
+            patterns['operation2'] = gen.operation[p2]("2")
+
+            # Generate a data race
+            replace = patterns.copy()
+            replace['shortdesc'] = 'Global Concurrency error.'
+            replace['longdesc'] = 'Global Concurrency error. Both processes 0 and 2 access the window in process 1 with @{p1}@'
+            replace['outcome'] = 'ERROR: GlobalConcurrency'
+            replace['errormsg'] = 'Global Concurrency error. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ conflicts in process 1'
+            gen.make_file(template, f'GlobalConcurrency_rr_{e}_{p1}_{p2}_nok.c', replace)