// RUN: %check_clang_tidy %s mpi-type-mismatch %t -- -- -I %S/Inputs/mpi-type-mismatch #include "mpimock.h" void charNegativeTest() { int buf; MPI_Send(&buf, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'int' does not match the MPI datatype 'MPI_CHAR' short buf2; MPI_Send(&buf2, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'short' does not match the MPI datatype 'MPI_CHAR' long buf3; MPI_Send(&buf3, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'long' does not match the MPI datatype 'MPI_CHAR' int8_t buf4; MPI_Send(&buf4, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'int8_t' does not match the MPI datatype 'MPI_CHAR' uint16_t buf5; MPI_Send(&buf5, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint16_t' does not match the MPI datatype 'MPI_CHAR' long double _Complex buf6; MPI_Send(&buf6, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'long double _Complex' does not match the MPI datatype 'MPI_CHAR' std::complex buf7; MPI_Send(&buf7, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'complex' does not match the MPI datatype 'MPI_CHAR' } void intNegativeTest() { unsigned char buf; MPI_Send(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned char' does not match the MPI datatype 'MPI_INT' unsigned buf2; MPI_Send(&buf2, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned int' does not match the MPI datatype 'MPI_INT' short buf3; MPI_Send(&buf3, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'short' does not match the MPI datatype 'MPI_INT' long buf4; MPI_Send(&buf4, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'long' does not match the MPI datatype 'MPI_INT' int8_t buf5; MPI_Send(&buf5, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'int8_t' does not match the MPI datatype 'MPI_INT' uint16_t buf6; MPI_Send(&buf6, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint16_t' does not match the MPI datatype 'MPI_INT' long double _Complex buf7; MPI_Send(&buf7, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'long double _Complex' does not match the MPI datatype 'MPI_INT' std::complex buf8; MPI_Send(&buf8, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'complex' does not match the MPI datatype 'MPI_INT' } void longNegativeTest() { char buf; MPI_Send(&buf, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'char' does not match the MPI datatype 'MPI_LONG' unsigned buf2; MPI_Send(&buf2, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned int' does not match the MPI datatype 'MPI_LONG' unsigned short buf3; MPI_Send(&buf3, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned short' does not match the MPI datatype 'MPI_LONG' unsigned long buf4; MPI_Send(&buf4, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned long' does not match the MPI datatype 'MPI_LONG' int8_t buf5; MPI_Send(&buf5, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'int8_t' does not match the MPI datatype 'MPI_LONG' uint16_t buf6; MPI_Send(&buf6, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint16_t' does not match the MPI datatype 'MPI_LONG' long double _Complex buf7; MPI_Send(&buf7, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'long double _Complex' does not match the MPI datatype 'MPI_LONG' std::complex buf8; MPI_Send(&buf8, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'complex' does not match the MPI datatype 'MPI_LONG' } void int8_tNegativeTest() { char buf; MPI_Send(&buf, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'char' does not match the MPI datatype 'MPI_INT8_T' unsigned buf2; MPI_Send(&buf2, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned int' does not match the MPI datatype 'MPI_INT8_T' short buf3; MPI_Send(&buf3, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'short' does not match the MPI datatype 'MPI_INT8_T' unsigned long buf4; MPI_Send(&buf4, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned long' does not match the MPI datatype 'MPI_INT8_T' uint8_t buf5; MPI_Send(&buf5, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint8_t' does not match the MPI datatype 'MPI_INT8_T' uint16_t buf6; MPI_Send(&buf6, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint16_t' does not match the MPI datatype 'MPI_INT8_T' long double _Complex buf7; MPI_Send(&buf7, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'long double _Complex' does not match the MPI datatype 'MPI_INT8_T' std::complex buf8; MPI_Send(&buf8, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'complex' does not match the MPI datatype 'MPI_INT8_T' } void complex_c_long_double_complexNegativeTest() { char buf; MPI_Send(&buf, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'char' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' unsigned buf2; MPI_Send(&buf2, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned int' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' short buf3; MPI_Send(&buf3, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'short' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' unsigned long buf4; MPI_Send(&buf4, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned long' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' uint8_t buf5; MPI_Send(&buf5, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint8_t' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' uint16_t buf6; MPI_Send(&buf6, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint16_t' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' double _Complex buf7; MPI_Send(&buf7, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'double _Complex' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' std::complex buf8; MPI_Send(&buf8, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'complex' does not match the MPI datatype 'MPI_C_LONG_DOUBLE_COMPLEX' } void complex_cxx_float_complexNegativeTest() { char buf; MPI_Send(&buf, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'char' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' unsigned buf2; MPI_Send(&buf2, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned int' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' short buf3; MPI_Send(&buf3, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'short' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' unsigned long buf4; MPI_Send(&buf4, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'unsigned long' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' uint8_t buf5; MPI_Send(&buf5, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint8_t' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' uint16_t buf6; MPI_Send(&buf6, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'uint16_t' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' double _Complex buf7; MPI_Send(&buf7, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'double _Complex' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' std::complex buf8; MPI_Send(&buf8, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: buffer type 'complex' does not match the MPI datatype 'MPI_CXX_FLOAT_COMPLEX' } void skippedTypesTests() { // typedefs, user defined MPI and nullptr types are skipped typedef char CHAR; CHAR buf; MPI_Send(&buf, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); typedef unsigned UNSIGNED; UNSIGNED buf2; MPI_Send(&buf2, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); #define _MPI_LONG MPI_LONG int buf3; MPI_Send(&buf3, 1, _MPI_LONG, 0, 0, MPI_COMM_WORLD); #define _MPI_CXX_FLOAT_COMPLEX MPI_CXX_FLOAT_COMPLEX short buf4; MPI_Send(&buf4, 1, _MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); MPI_Send(NULL, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); } void positiveTests() { char buf; MPI_Send(&buf, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); int buf2; MPI_Send(&buf2, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); long buf3; MPI_Send(&buf3, 1, MPI_LONG, 0, 0, MPI_COMM_WORLD); int8_t buf4; MPI_Send(&buf4, 1, MPI_INT8_T, 0, 0, MPI_COMM_WORLD); long double _Complex buf5; MPI_Send(&buf5, 1, MPI_C_LONG_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD); std::complex buf6; MPI_Send(&buf6, 1, MPI_CXX_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD); uint8_t buf7; MPI_Send(&buf7, 1, MPI_UINT8_T, 0, 0, MPI_COMM_WORLD); uint16_t buf8; MPI_Send(&buf8, 1, MPI_UINT16_T, 0, 0, MPI_COMM_WORLD); // On some systems like PPC or ARM, 'char' is unsigned by default which is why // distinct signedness for the buffer and MPI type is tolerated. unsigned char buf9; MPI_Send(&buf9, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); }