forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| // 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.}}
 | |
| }
 |