From 4f254876d76822ab035e36eae944b0886ea12bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Amatria=20Barral?= Date: Thu, 5 Sep 2024 22:55:13 +0200 Subject: [PATCH] fix: use a bigger real transfering `mask_val` this change ensures the type of `mask_val` is big enough to satisfy the `transfer`; otherwise, we risk transfering a 4-byte value to 2-element arrays of 4-byte elements (i.e., `i4tmp(2)` and `r4tmp(2)`) I encountered this issue compiling the project with Flang; see https://godbolt.org/z/91EfY154n --- mpp/include/mpp_chksum_int.fh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mpp/include/mpp_chksum_int.fh b/mpp/include/mpp_chksum_int.fh index 1d511a2381..0fbe342819 100644 --- a/mpp/include/mpp_chksum_int.fh +++ b/mpp/include/mpp_chksum_int.fh @@ -52,6 +52,7 @@ function MPP_CHKSUM_INT_RMASK_( var, pelist, mask_val ) MPP_TYPE_, intent(in) :: var MPP_RANK_ integer, optional :: pelist(:) real, intent(in) :: mask_val + real(KIND=r8_kind) :: tmp_mask_val integer(KIND(var))::imask_val integer(KIND=i4_kind)::i4tmp(2)=0 real(KIND=r4_kind)::r4tmp(2)=0 @@ -74,9 +75,10 @@ function MPP_CHKSUM_INT_RMASK_( var, pelist, mask_val ) ! Secondary Logic: !! We've done something dangerous else - i8tmp = TRANSFER(mask_val , i8tmp ) - i4tmp = TRANSFER(mask_val , i4tmp ) - r4tmp = TRANSFER(mask_val , r4tmp ) + tmp_mask_val = mask_val + i8tmp = TRANSFER(tmp_mask_val , i8tmp ) + i4tmp = TRANSFER(tmp_mask_val , i4tmp ) + r4tmp = TRANSFER(tmp_mask_val , r4tmp ) if ( i8tmp == MPP_FILL_INT ) then ! we've packed an MPP_FILL_ imask_val = MPP_FILL_INT