summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorDevin Coughlin <dcoughlin@apple.com>2016-06-06 18:29:43 +0000
committerDevin Coughlin <dcoughlin@apple.com>2016-06-06 18:29:43 +0000
commit917a42d8b5d1be30e3602ff19bfc394327a6a756 (patch)
tree35896c3038bee9a62feee3bb5b4c2dffa38d21d9 /clang/test
parent217cf69b92c403a23e337bbd754de1e1c0244a3b (diff)
downloadbcm5719-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.h55
-rw-r--r--clang/test/Analysis/MemRegion.cpp47
-rw-r--r--clang/test/Analysis/mpichecker.cpp342
-rw-r--r--clang/test/Analysis/mpicheckernotes.cpp34
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);
-}
OpenPOWER on IntegriCloud