| 1 | // REQUIRES: static-analyzer |
| 2 | // RUN: %check_clang_tidy %s mpi-buffer-deref %t -- -- -I %S/Inputs/type-mismatch |
| 3 | |
| 4 | #include "mpimock.h" |
| 5 | |
| 6 | void negativeTests() { |
| 7 | char *buf; |
| 8 | MPI_Send(&buf, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); |
| 9 | // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer is insufficiently dereferenced: pointer->pointer [mpi-buffer-deref] |
| 10 | |
| 11 | unsigned **buf2; |
| 12 | MPI_Send(buf2, 1, MPI_UNSIGNED, 0, 0, MPI_COMM_WORLD); |
| 13 | // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer is insufficiently dereferenced: pointer->pointer |
| 14 | |
| 15 | short buf3[1][1]; |
| 16 | MPI_Send(buf3, 1, MPI_SHORT, 0, 0, MPI_COMM_WORLD); |
| 17 | // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer is insufficiently dereferenced: array->array |
| 18 | |
| 19 | long double _Complex *buf4[1]; |
| 20 | MPI_Send(buf4, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); |
| 21 | // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer is insufficiently dereferenced: pointer->array |
| 22 | |
| 23 | std::complex<float> *buf5[1][1]; |
| 24 | MPI_Send(&buf5, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); |
| 25 | // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer is insufficiently dereferenced: pointer->array->array->pointer |
| 26 | } |
| 27 | |
| 28 | void positiveTests() { |
| 29 | char buf; |
| 30 | MPI_Send(&buf, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); |
| 31 | |
| 32 | unsigned *buf2; |
| 33 | MPI_Send(buf2, 1, MPI_UNSIGNED, 0, 0, MPI_COMM_WORLD); |
| 34 | |
| 35 | short buf3[1][1]; |
| 36 | MPI_Send(buf3[0], 1, MPI_SHORT, 0, 0, MPI_COMM_WORLD); |
| 37 | |
| 38 | long double _Complex *buf4[1]; |
| 39 | MPI_Send(*buf4, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); |
| 40 | |
| 41 | long double _Complex buf5[1]; |
| 42 | MPI_Send(buf5, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); |
| 43 | |
| 44 | std::complex<float> *buf6[1][1]; |
| 45 | MPI_Send(*buf6[0], 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); |
| 46 | |
| 47 | // Referencing an array with '&' is valid, as this also points to the |
| 48 | // beginning of the array. |
| 49 | long double _Complex buf7[1]; |
| 50 | MPI_Send(&buf7, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); |
| 51 | } |
| 52 | |