Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Initialize pointers with a known invalid (out-of-bound) value.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 17 Aug 2021 20:29:40 +0000 (22:29 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 18 Aug 2021 22:02:41 +0000 (00:02 +0200)
sonar-project.properties
teshsuite/smpi/replay-ti-colls/replay-ti-colls.c

index 53fee57..4194ed5 100644 (file)
@@ -168,10 +168,6 @@ sonar.issue.ignore.multicriteria.s4.resourceKey=src/smpi/**/*.cpp
 sonar.issue.ignore.multicriteria.s5.ruleKey=cpp:S995
 sonar.issue.ignore.multicriteria.s5.resourceKey=src/smpi/bindings/*.cpp
 
-#There is an intentional uninitialized variable in this test, to check SMPI does not use irrelevant values for some ranks
-sonar.issue.ignore.multicriteria.s6.ruleKey=c:S836
-sonar.issue.ignore.multicriteria.s6.resourceKey=teshsuite/smpi/replay-ti-colls/replay-ti-colls.c
-
 # Exclude some files from the analysis:
 #  - our unit tests
 #  - the tests that we borrowed elsewhere (MPICH and ISP)
index 4e0cb63..b7d24b0 100644 (file)
@@ -1,6 +1,3 @@
-//exclude from clang static analysis, as there is an intentional uninitialized value passed to MPI calls.
-#ifndef __clang_analyzer__
-
 #include "mpi.h"
 #include <stdio.h>
 #include <string.h>
@@ -42,10 +39,12 @@ int main(int argc, char** argv)
   for (int i = 0; i < nprocs; i++)
     alltoallvcounts[i] = BOUNDED(i + rank);
 
-  int* recvbuf;
-  int* displs;
-  int* counts;
-  int* rcounts;
+  int* dummy_buffer = malloc(sizeof(int));
+  // initialize buffers with an invalid value (we want to trigger a valgrind error if they are used)
+  int* recvbuf      = dummy_buffer + 1;
+  int* displs       = dummy_buffer + 1;
+  int* counts       = dummy_buffer + 1;
+  int* rcounts      = dummy_buffer + 1;
   if (rank == 0)
     setup_recvbuf(nprocs, &recvbuf, &displs, &counts, &rcounts);
 
@@ -58,6 +57,7 @@ int main(int argc, char** argv)
   MPI_Scatterv(recvbuf, counts, displs, MPI_INT, sendbuf, BOUNDED(rank), MPI_INT, 0, MPI_COMM_WORLD);
   MPI_Reduce(sendbuf, recvbuf, BUFSIZE, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
 
+  free(dummy_buffer);
   if (rank != 0)
     setup_recvbuf(nprocs, &recvbuf, &displs, &counts, &rcounts);
 
@@ -88,5 +88,3 @@ int main(int argc, char** argv)
   MPI_Finalize();
   return 0;
 }
-
-#endif