diff options
| author | Devin Coughlin <dcoughlin@apple.com> | 2016-06-06 18:29:43 +0000 |
|---|---|---|
| committer | Devin Coughlin <dcoughlin@apple.com> | 2016-06-06 18:29:43 +0000 |
| commit | 917a42d8b5d1be30e3602ff19bfc394327a6a756 (patch) | |
| tree | 35896c3038bee9a62feee3bb5b4c2dffa38d21d9 /clang/test | |
| parent | 217cf69b92c403a23e337bbd754de1e1c0244a3b (diff) | |
| download | bcm5719-llvm-917a42d8b5d1be30e3602ff19bfc394327a6a756.tar.gz bcm5719-llvm-917a42d8b5d1be30e3602ff19bfc394327a6a756.zip | |
Revert "Reapply "[analyzer] Add checker for correct usage of MPI API in C and C++.""
This reverts commit r271914. It is still breaking bots.
llvm-svn: 271920
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Analysis/MPIMock.h | 55 | ||||
| -rw-r--r-- | clang/test/Analysis/MemRegion.cpp | 47 | ||||
| -rw-r--r-- | clang/test/Analysis/mpichecker.cpp | 342 | ||||
| -rw-r--r-- | clang/test/Analysis/mpicheckernotes.cpp | 34 |
4 files changed, 0 insertions, 478 deletions
diff --git a/clang/test/Analysis/MPIMock.h b/clang/test/Analysis/MPIMock.h deleted file mode 100644 index 01d2d42fc58..00000000000 --- a/clang/test/Analysis/MPIMock.h +++ /dev/null @@ -1,55 +0,0 @@ -// Message Passing Interface mock header. Mocks MPI constants and functions, in -// order to make them available in distinct integration test files. - -#define NULL 0 - -// mock types -typedef int MPI_Datatype; -typedef int MPI_Comm; -typedef int MPI_Request; -typedef int MPI_Status; -typedef int MPI_Op; -typedef int int8_t; -typedef int uint8_t; -typedef int uint16_t; -typedef int int64_t; -namespace std { template<class T> struct complex { T real; T imag; }; } - -// mock constants -#define MPI_DATATYPE_NULL 0 -#define MPI_CHAR 0 -#define MPI_BYTE 0 -#define MPI_INT 0 -#define MPI_LONG 0 -#define MPI_LONG_DOUBLE 0 -#define MPI_UNSIGNED 0 -#define MPI_INT8_T 0 -#define MPI_UINT8_T 0 -#define MPI_UINT16_T 0 -#define MPI_C_LONG_DOUBLE_COMPLEX 0 -#define MPI_FLOAT 0 -#define MPI_DOUBLE 0 -#define MPI_CXX_BOOL 0 -#define MPI_CXX_FLOAT_COMPLEX 0 -#define MPI_CXX_DOUBLE_COMPLEX 0 -#define MPI_CXX_LONG_DOUBLE_COMPLEX 0 -#define MPI_IN_PLACE 0 -#define MPI_COMM_WORLD 0 -#define MPI_STATUS_IGNORE 0 -#define MPI_STATUSES_IGNORE 0 -#define MPI_SUM 0 - -// mock functions -int MPI_Comm_size(MPI_Comm, int *); -int MPI_Comm_rank(MPI_Comm, int *); -int MPI_Send(const void *, int, MPI_Datatype, int, int, MPI_Comm); -int MPI_Recv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *); -int MPI_Isend(const void *, int, MPI_Datatype, int, int, MPI_Comm, - MPI_Request *); -int MPI_Irecv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *); -int MPI_Wait(MPI_Request *, MPI_Status *); -int MPI_Waitall(int, MPI_Request[], MPI_Status[]); -int MPI_Reduce(const void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm); -int MPI_Ireduce(const void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm, - MPI_Request *); -int MPI_Bcast(void *, int count, MPI_Datatype, int, MPI_Comm); diff --git a/clang/test/Analysis/MemRegion.cpp b/clang/test/Analysis/MemRegion.cpp deleted file mode 100644 index 992b7f1f976..00000000000 --- a/clang/test/Analysis/MemRegion.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=optin.mpi.MPI-Checker -verify %s - -#include "MPIMock.h" - -// Use MPI-Checker to test 'getDescriptiveName', as the checker uses the -// function for diagnostics. -void testGetDescriptiveName() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request sendReq1; - MPI_Wait(&sendReq1, MPI_STATUS_IGNORE); // expected-warning{{Request 'sendReq1' has no matching nonblocking call.}} -} - -void testGetDescriptiveName2() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request sendReq1[10][10][10]; - MPI_Wait(&sendReq1[1][7][9], MPI_STATUS_IGNORE); // expected-warning{{Request 'sendReq1[1][7][9]' has no matching nonblocking call.}} -} - -void testGetDescriptiveName3() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - typedef struct { MPI_Request req; } ReqStruct; - ReqStruct rs; - MPI_Request *r = &rs.req; - MPI_Wait(r, MPI_STATUS_IGNORE); // expected-warning{{Request 'rs.req' has no matching nonblocking call.}} -} - -void testGetDescriptiveName4() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - typedef struct { MPI_Request req[2][2]; } ReqStruct; - ReqStruct rs; - MPI_Request *r = &rs.req[0][1]; - MPI_Wait(r, MPI_STATUS_IGNORE); // expected-warning{{Request 'rs.req[0][1]' has no matching nonblocking call.}} -} - -void testGetDescriptiveName5() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - typedef struct { MPI_Request req; } ReqStructInner; - typedef struct { ReqStructInner req; } ReqStruct; - ReqStruct rs; - MPI_Request *r = &rs.req.req; - MPI_Wait(r, MPI_STATUS_IGNORE); // expected-warning{{Request 'rs.req.req' has no matching nonblocking call.}} -} diff --git a/clang/test/Analysis/mpichecker.cpp b/clang/test/Analysis/mpichecker.cpp deleted file mode 100644 index a7f1763855a..00000000000 --- a/clang/test/Analysis/mpichecker.cpp +++ /dev/null @@ -1,342 +0,0 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=optin.mpi.MPI-Checker -verify %s - -#include "MPIMock.h" - -void matchedWait1() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - if (rank >= 0) { - MPI_Request sendReq1, recvReq1; - MPI_Isend(&buf, 1, MPI_DOUBLE, rank + 1, 0, MPI_COMM_WORLD, &sendReq1); - MPI_Irecv(&buf, 1, MPI_DOUBLE, rank - 1, 0, MPI_COMM_WORLD, &recvReq1); - - MPI_Wait(&sendReq1, MPI_STATUS_IGNORE); - MPI_Wait(&recvReq1, MPI_STATUS_IGNORE); - } -} // no error - -void matchedWait2() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - if (rank >= 0) { - MPI_Request sendReq1, recvReq1; - MPI_Isend(&buf, 1, MPI_DOUBLE, rank + 1, 0, MPI_COMM_WORLD, &sendReq1); - MPI_Irecv(&buf, 1, MPI_DOUBLE, rank - 1, 0, MPI_COMM_WORLD, &recvReq1); - MPI_Wait(&sendReq1, MPI_STATUS_IGNORE); - MPI_Wait(&recvReq1, MPI_STATUS_IGNORE); - } -} // no error - -void matchedWait3() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - if (rank >= 0) { - MPI_Request sendReq1, recvReq1; - MPI_Isend(&buf, 1, MPI_DOUBLE, rank + 1, 0, MPI_COMM_WORLD, &sendReq1); - MPI_Irecv(&buf, 1, MPI_DOUBLE, rank - 1, 0, MPI_COMM_WORLD, &recvReq1); - - if (rank > 1000) { - MPI_Wait(&sendReq1, MPI_STATUS_IGNORE); - MPI_Wait(&recvReq1, MPI_STATUS_IGNORE); - } else { - MPI_Wait(&sendReq1, MPI_STATUS_IGNORE); - MPI_Wait(&recvReq1, MPI_STATUS_IGNORE); - } - } -} // no error - -void missingWait1() { // Check missing wait for dead region. - double buf = 0; - MPI_Request sendReq1; - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, &sendReq1); -} // expected-warning{{Request 'sendReq1' has no matching wait.}} - -void missingWait2() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - if (rank == 0) { - } else { - MPI_Request sendReq1, recvReq1; - - MPI_Isend(&buf, 1, MPI_DOUBLE, rank + 1, 0, MPI_COMM_WORLD, &sendReq1); - MPI_Irecv(&buf, 1, MPI_DOUBLE, rank - 1, 0, MPI_COMM_WORLD, &recvReq1); // expected-warning{{Request 'sendReq1' has no matching wait.}} - MPI_Wait(&recvReq1, MPI_STATUS_IGNORE); - } -} - -void doubleNonblocking() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - if (rank == 1) { - } else { - MPI_Request sendReq1; - - MPI_Isend(&buf, 1, MPI_DOUBLE, rank + 1, 0, MPI_COMM_WORLD, &sendReq1); - MPI_Irecv(&buf, 1, MPI_DOUBLE, rank - 1, 0, MPI_COMM_WORLD, &sendReq1); // expected-warning{{Double nonblocking on request 'sendReq1'.}} - MPI_Wait(&sendReq1, MPI_STATUS_IGNORE); - } -} - -void doubleNonblocking2() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Request req; - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, &req); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, &req); // expected-warning{{Double nonblocking on request 'req'.}} - MPI_Wait(&req, MPI_STATUS_IGNORE); -} - -void doubleNonblocking3() { - typedef struct { MPI_Request req; } ReqStruct; - - ReqStruct rs; - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, &rs.req); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, &rs.req); // expected-warning{{Double nonblocking on request 'rs.req'.}} - MPI_Wait(&rs.req, MPI_STATUS_IGNORE); -} - -void doubleNonblocking4() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Request req; - for (int i = 0; i < 2; ++i) { - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, &req); // expected-warning{{Double nonblocking on request 'req'.}} - } - MPI_Wait(&req, MPI_STATUS_IGNORE); -} - -void tripleNonblocking() { - double buf = 0; - MPI_Request sendReq; - MPI_Isend(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); - MPI_Irecv(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); // expected-warning{{Double nonblocking on request 'sendReq'.}} - MPI_Isend(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); // expected-warning{{Double nonblocking on request 'sendReq'.}} - MPI_Wait(&sendReq, MPI_STATUS_IGNORE); -} - -void missingNonBlocking() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request sendReq1[10][10][10]; - MPI_Wait(&sendReq1[1][7][9], MPI_STATUS_IGNORE); // expected-warning{{Request 'sendReq1[1][7][9]' has no matching nonblocking call.}} -} - -void missingNonBlocking2() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - typedef struct { MPI_Request req[2][2]; } ReqStruct; - ReqStruct rs; - MPI_Request *r = &rs.req[0][1]; - MPI_Wait(r, MPI_STATUS_IGNORE); // expected-warning{{Request 'rs.req[0][1]' has no matching nonblocking call.}} -} - -void missingNonBlocking3() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request sendReq; - MPI_Wait(&sendReq, MPI_STATUS_IGNORE); // expected-warning{{Request 'sendReq' has no matching nonblocking call.}} -} - -void missingNonBlockingMultiple() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request sendReq[4]; - for (int i = 0; i < 4; ++i) { - MPI_Wait(&sendReq[i], MPI_STATUS_IGNORE); // expected-warning-re 1+{{Request {{.*}} has no matching nonblocking call.}} - } -} - -void missingNonBlockingWaitall() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request req[4]; - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req[0]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req[1]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req[3]); - - MPI_Waitall(4, req, MPI_STATUSES_IGNORE); // expected-warning{{Request 'req[2]' has no matching nonblocking call.}} -} - -void missingNonBlockingWaitall2() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request req[4]; - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req[0]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req[3]); - - MPI_Waitall(4, req, MPI_STATUSES_IGNORE); // expected-warning-re 2{{Request '{{(.*)[[1-2]](.*)}}' has no matching nonblocking call.}} -} - -void missingNonBlockingWaitall3() { - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request req[4]; - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req[0]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req[2]); - - MPI_Waitall(4, req, MPI_STATUSES_IGNORE); // expected-warning-re 2{{Request '{{(.*)[[1,3]](.*)}}' has no matching nonblocking call.}} -} - -void missingNonBlockingWaitall4() { - int rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Request req[4]; - MPI_Waitall(4, req, MPI_STATUSES_IGNORE); // expected-warning-re 4{{Request '{{(.*)[[0-3]](.*)}}' has no matching nonblocking call.}} -} - -void noDoubleRequestUsage() { - typedef struct { - MPI_Request req; - MPI_Request req2; - } ReqStruct; - - ReqStruct rs; - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req2); - MPI_Wait(&rs.req, MPI_STATUS_IGNORE); - MPI_Wait(&rs.req2, MPI_STATUS_IGNORE); -} // no error - -void noDoubleRequestUsage2() { - typedef struct { - MPI_Request req[2]; - MPI_Request req2; - } ReqStruct; - - ReqStruct rs; - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req[0]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req[1]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req2); - MPI_Wait(&rs.req[0], MPI_STATUS_IGNORE); - MPI_Wait(&rs.req[1], MPI_STATUS_IGNORE); - MPI_Wait(&rs.req2, MPI_STATUS_IGNORE); -} // no error - -void nestedRequest() { - typedef struct { - MPI_Request req[2]; - MPI_Request req2; - } ReqStruct; - - ReqStruct rs; - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req[0]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req[1]); - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &rs.req2); - MPI_Waitall(2, rs.req, MPI_STATUSES_IGNORE); - MPI_Wait(&rs.req2, MPI_STATUS_IGNORE); -} // no error - -void singleRequestInWaitall() { - MPI_Request r; - int rank = 0; - double buf = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &r); - MPI_Waitall(1, &r, MPI_STATUSES_IGNORE); -} // no error - -void multiRequestUsage() { - double buf = 0; - MPI_Request req; - - MPI_Isend(&buf, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD, &req); - MPI_Wait(&req, MPI_STATUS_IGNORE); - - MPI_Irecv(&buf, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD, &req); - MPI_Wait(&req, MPI_STATUS_IGNORE); -} // no error - -void multiRequestUsage2() { - double buf = 0; - MPI_Request req; - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req); - MPI_Wait(&req, MPI_STATUS_IGNORE); - - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req); - MPI_Wait(&req, MPI_STATUS_IGNORE); -} // no error - -// wrapper function -void callNonblocking(MPI_Request *req) { - double buf = 0; - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - req); -} - -// wrapper function -void callWait(MPI_Request *req) { - MPI_Wait(req, MPI_STATUS_IGNORE); -} - -// Call nonblocking, wait wrapper functions. -void callWrapperFunctions() { - MPI_Request req; - callNonblocking(&req); - callWait(&req); -} // no error - -void externFunctions1() { - double buf = 0; - MPI_Request req; - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, - &req); - void callWaitExtern(MPI_Request *req); - callWaitExtern(&req); -} // expected-warning{{Request 'req' has no matching wait.}} - -void externFunctions2() { - MPI_Request req; - void callNonblockingExtern(MPI_Request *req); - callNonblockingExtern(&req); -} diff --git a/clang/test/Analysis/mpicheckernotes.cpp b/clang/test/Analysis/mpicheckernotes.cpp deleted file mode 100644 index be312fdf5fd..00000000000 --- a/clang/test/Analysis/mpicheckernotes.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=optin.mpi.MPI-Checker -analyzer-output=text -verify %s - -// MPI-Checker test file to test note diagnostics. - -#include "MPIMock.h" - -void doubleNonblocking() { - double buf = 0; - MPI_Request sendReq; - MPI_Isend(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); // expected-note{{Request is previously used by nonblocking call here.}} - MPI_Irecv(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); // expected-warning{{Double nonblocking on request 'sendReq'.}} expected-note{{Double nonblocking on request 'sendReq'.}} - MPI_Wait(&sendReq, MPI_STATUS_IGNORE); -} - -void missingWait() { - double buf = 0; - MPI_Request sendReq; - MPI_Ireduce(MPI_IN_PLACE, &buf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD, &sendReq); // expected-note{{Request is previously used by nonblocking call here.}} -} // expected-warning{{Request 'sendReq' has no matching wait.}} expected-note{{Request 'sendReq' has no matching wait.}} - -// If more than 2 nonblocking calls are using a request in a sequence, they all -// point to the first call as the 'previous' call. This is because the -// BugReporterVisitor only checks for differences in state or existence of an -// entity. -void tripleNonblocking() { - double buf = 0; - MPI_Request sendReq; - MPI_Isend(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); // expected-note 2{{Request is previously used by nonblocking call here.}} - MPI_Irecv(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); // expected-warning{{Double nonblocking on request 'sendReq'.}} expected-note{{Double nonblocking on request 'sendReq'.}} - - MPI_Isend(&buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &sendReq); // expected-warning{{Double nonblocking on request 'sendReq'.}} expected-note{{Double nonblocking on request 'sendReq'.}} - - MPI_Wait(&sendReq, MPI_STATUS_IGNORE); -} |

