Wow. This bug has existed for '''YEARS''' (probably ever since Open
MPI started!). The FLAG argument to fortran attribute copy functions is a LOGICAL, meaning that it can only return .TRUE. or .FALSE. The corresponding C argument is an int, and the MPI spec says that it must return 1 or 0. However, in Fortran, .TRUE. is not always necessarily == 1. So we need to expand the test to see if it's a Fortran callback. If so, check for the Fortran .TRUE. value (not 1). If it's a C callback, then check for 1. This commit was SVN r25965.
Этот коммит содержится в:
родитель
765de087ef
Коммит
b10ebf4b2d
@ -946,19 +946,21 @@ int ompi_attr_copy_all(ompi_attribute_type_t type, void *old_object,
|
|||||||
so that no comparison is done for prdefined at all and it
|
so that no comparison is done for prdefined at all and it
|
||||||
just falls off the error checking loop in attr_set */
|
just falls off the error checking loop in attr_set */
|
||||||
|
|
||||||
if (1 == flag) {
|
if (0 != (hash_value->attr_flag & OMPI_KEYVAL_F77) &&
|
||||||
if (0 != (hash_value->attr_flag & OMPI_KEYVAL_F77)) {
|
OMPI_FORTRAN_VALUE_TRUE == flag) {
|
||||||
if (0 != (hash_value->attr_flag & OMPI_KEYVAL_F77_MPI1)) {
|
if (0 != (hash_value->attr_flag & OMPI_KEYVAL_F77_MPI1)) {
|
||||||
new_attr->av_set_from = OMPI_ATTRIBUTE_FORTRAN_MPI1;
|
new_attr->av_set_from = OMPI_ATTRIBUTE_FORTRAN_MPI1;
|
||||||
} else {
|
|
||||||
new_attr->av_set_from = OMPI_ATTRIBUTE_FORTRAN_MPI2;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
new_attr->av_set_from = OMPI_ATTRIBUTE_C;
|
new_attr->av_set_from = OMPI_ATTRIBUTE_FORTRAN_MPI2;
|
||||||
}
|
}
|
||||||
|
flag = 1;
|
||||||
|
} else if (1 == flag) {
|
||||||
|
new_attr->av_set_from = OMPI_ATTRIBUTE_C;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (1 == flag) {
|
||||||
set_value(type, new_object, &newattr_hash, key,
|
set_value(type, new_object, &newattr_hash, key,
|
||||||
new_attr, true);
|
new_attr, true);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
OBJ_RELEASE(new_attr);
|
OBJ_RELEASE(new_attr);
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user