// 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.}} }