|  | // RUN: %clang_analyze_cc1 -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.}} | 
|  | } |