Skip to content

Commit 0dafd67

Browse files
authored
Merge pull request #528 from sourceryinstitute/issue-427-fix-sendget
Fix #427 on gcc-8 and above.
2 parents 8737658 + 8875bde commit 0dafd67

File tree

7 files changed

+504
-241
lines changed

7 files changed

+504
-241
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ env:
1515
- BUILD_TYPES="Debug RelWithDebInfo Release CodeCoverage"
1616
matrix:
1717
- GCC=6 OSX_PACKAGES="gcc@6 shellcheck" BUILD_TYPE="InstallScript"
18-
- GCC="6 7" OSX_PACKAGES="gcc gcc@6 cmake shellcheck" BUILD_TYPE="cmake"
18+
# - GCC="6 7" OSX_PACKAGES="gcc@7 gcc@6 cmake shellcheck" BUILD_TYPE="cmake"
1919

2020
matrix:
2121
fast_finish: true
@@ -83,7 +83,7 @@ before_install:
8383

8484
install:
8585
- pwd
86-
- developer-scripts/travis/install.${TRAVIS_OS_NAME}.sh
86+
- travis_wait 40 developer-scripts/travis/install.${TRAVIS_OS_NAME}.sh
8787

8888
script:
8989
- pwd

developer-scripts/travis/install.linux.sh

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,15 @@ if [[ "${BUILD_TYPE:-}" != InstallScript ]]; then # Ubuntu on Travis-CI, NOT tes
3232
export CC=gcc-${GCC}
3333
export FC=gfortran-${GCC}
3434
(
35-
cd "${MPICH_URL_TAIL%.tar.gz}"
35+
cd "${MPICH_URL_TAIL%.tar.gz}" || exit 4
3636
echo "Configuring MPICH ..."
37-
${TRAVIS:+travis_wait} ./configure --prefix="${CACHE}" > configure_mpich.log 2>&1 || cat configure_mpich.log
37+
pwd
38+
./configure --prefix="${CACHE}"
3839
echo "Building MPICH ..."
39-
${TRAVIS:+travis_wait 30} make -j 4 > make_mpich.log 2>&1 || cat make_mpich.log
40+
make -j 4
4041
echo "Installing MPICH ..."
41-
${TRAVIS:+travis_wait} make install > install_mpich.log 2>&1 || cat install_mpich.log
42-
)
42+
make install
43+
)
4344
fi
4445
fi
4546

prerequisites/build-functions/patches/gcc/8.1.0/partially-revert-rev259385.diff

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,36 +26,4 @@ index 00edd447bb2..87b3ca72c05 100644
2626
+ may_require_tmp = gfc_check_dependency (lhs_expr, rhs_expr, true) == 0
2727
? boolean_false_node : boolean_true_node;
2828
gfc_init_block (&block);
29-
30-
diff --git a/gcc/testsuite/gfortran.dg/coarray_dependency_1.f90 b/gcc/testsuite/gfortran.dg/coarray_dependency_1.f90
31-
new file mode 100644
32-
index 00000000000..dc4cbacba1e
33-
--- /dev/null
34-
+++ b/gcc/testsuite/gfortran.dg/coarray_dependency_1.f90
35-
@@ -0,0 +1,11 @@
36-
+! { dg-do compile }
37-
+! { dg-options "-fcoarray=lib -lcaf_single" }
38-
+!
39-
+! Check that reffing x on both sides of a coarray send does not ICE.
40-
+! PR 85507
41-
+
42-
+program check_dependency
43-
+ integer :: x[*]
44-
+ x[42] = x
45-
+end program check_dependency
46-
+
47-
diff --git a/gcc/testsuite/gfortran.dg/coarray_lib_comm_1.f90 b/gcc/testsuite/gfortran.dg/coarray_lib_comm_1.f90
48-
index a7567af7b8f..171a27bd4c3 100644
49-
--- a/gcc/testsuite/gfortran.dg/coarray_lib_comm_1.f90
50-
+++ b/gcc/testsuite/gfortran.dg/coarray_lib_comm_1.f90
51-
@@ -38,9 +38,8 @@ B(1:5) = B(3:7)
52-
if (any (A-B /= 0)) STOP 4
53-
end
54-
55-
-! { dg-final { scan-tree-dump-times "_gfortran_caf_get \\\(caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, &parm.\[0-9\]+, 4, 4, 0, 0B\\\);" 1 "original" } }
56-
-! { dg-final { scan-tree-dump-times "_gfortran_caf_get \\\(caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, &parm.\[0-9\]+, 4, 4, 1, 0B\\\);" 1 "original" } }
57-
+! { dg-final { scan-tree-dump-times "_gfortran_caf_get \\\(caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, &parm.\[0-9\]+, 4, 4, 1, 0B\\\);" 2 "original" } }
58-
! { dg-final { scan-tree-dump-times "_gfortran_caf_get \\\(caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, &p, 4, 4, 1, 0B\\\);" 1 "original" } }
59-
! { dg-final { scan-tree-dump-times "_gfortran_caf_get \\\(caf_token.1, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) b, 1, &parm.\[0-9\]+, 0B, &p, 4, 4, 0, 0B\\\);" 1 "original" } }
60-
-! { dg-final { scan-tree-dump-times "_gfortran_caf_sendget \\\(caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, 4, 4, 0, 0B\\\);" 1 "original" } }
61-
+! { dg-final { scan-tree-dump-times "_gfortran_caf_sendget \\\(caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, caf_token.0, \\\(integer\\\(kind=\[48\]\\\)\\\) parm.\[0-9\]+.data - \\\(integer\\\(kind=\[48\]\\\)\\\) a, 1, &parm.\[0-9\]+, 0B, 4, 4, 1, 0B\\\);" 1 "original" } }
29+

src/libcaf.h

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -238,35 +238,54 @@ void PREFIX (register) (size_t, caf_register_t, caf_token_t *,
238238
gfc_descriptor_t *, int *, char *, charlen_t);
239239
void PREFIX (deregister) (caf_token_t *, int, int *, char *, charlen_t);
240240
#else
241-
void * PREFIX (register) (size_t, caf_register_t, caf_token_t *,
242-
int *, char *, int);
241+
void * PREFIX (register) (size_t, caf_register_t, caf_token_t *, int *, char *,
242+
int);
243243
void PREFIX (deregister) (caf_token_t *, int *, char *, int);
244244
#endif
245245

246246
void PREFIX (caf_get) (caf_token_t, size_t, int, gfc_descriptor_t *,
247-
caf_vector_t *, gfc_descriptor_t *, int, int, bool, int *);
247+
caf_vector_t *, gfc_descriptor_t *, int, int, bool,
248+
int *);
248249
void PREFIX (caf_send) (caf_token_t, size_t, int, gfc_descriptor_t *,
249250
caf_vector_t *, gfc_descriptor_t *, int, int, bool,
250251
int *);
251252

252253
void PREFIX (caf_sendget) (caf_token_t, size_t, int, gfc_descriptor_t *,
253-
caf_vector_t *, caf_token_t, size_t, int,
254-
gfc_descriptor_t *, caf_vector_t *, int, int, bool,
255-
int *);
254+
caf_vector_t *, caf_token_t, size_t, int,
255+
gfc_descriptor_t *, caf_vector_t *, int, int, bool,
256+
int *);
256257

257-
#ifdef GCC_GE_7
258+
#ifdef GCC_GE_8
258259
void PREFIX(get_by_ref) (caf_token_t, int,
259-
gfc_descriptor_t *dst, caf_reference_t *refs,
260-
int dst_kind, int src_kind, bool may_require_tmp,
261-
bool dst_reallocatable, int *stat);
260+
gfc_descriptor_t *dst, caf_reference_t *refs,
261+
int dst_kind, int src_kind, bool may_require_tmp,
262+
bool dst_reallocatable, int *stat, int src_type);
262263
void PREFIX(send_by_ref) (caf_token_t token, int image_index,
263-
gfc_descriptor_t *src, caf_reference_t *refs,
264-
int dst_kind, int src_kind, bool may_require_tmp,
265-
bool dst_reallocatable, int *stat);
264+
gfc_descriptor_t *src, caf_reference_t *refs,
265+
int dst_kind, int src_kind, bool may_require_tmp,
266+
bool dst_reallocatable, int *stat, int dst_type);
266267
void PREFIX(sendget_by_ref) (caf_token_t dst_token, int dst_image_index,
267-
caf_reference_t *dst_refs, caf_token_t src_token, int src_image_index,
268-
caf_reference_t *src_refs, int dst_kind, int src_kind,
269-
bool may_require_tmp, int *dst_stat, int *src_stat);
268+
caf_reference_t *dst_refs, caf_token_t src_token,
269+
int src_image_index, caf_reference_t *src_refs,
270+
int dst_kind, int src_kind, bool may_require_tmp,
271+
int *dst_stat, int *src_stat, int dst_type,
272+
int src_type);
273+
#elif defined(GCC_GE_7)
274+
void PREFIX(get_by_ref) (caf_token_t, int,
275+
gfc_descriptor_t *dst, caf_reference_t *refs,
276+
int dst_kind, int src_kind, bool may_require_tmp,
277+
bool dst_reallocatable, int *stat);
278+
void PREFIX(send_by_ref) (caf_token_t token, int image_index,
279+
gfc_descriptor_t *src, caf_reference_t *refs,
280+
int dst_kind, int src_kind, bool may_require_tmp,
281+
bool dst_reallocatable, int *stat);
282+
void PREFIX(sendget_by_ref) (caf_token_t dst_token, int dst_image_index,
283+
caf_reference_t *dst_refs, caf_token_t src_token,
284+
int src_image_index, caf_reference_t *src_refs,
285+
int dst_kind, int src_kind, bool may_require_tmp,
286+
int *dst_stat, int *src_stat);
287+
#endif
288+
#ifdef GCC_GE_7
270289
int PREFIX(is_present) (caf_token_t, int, caf_reference_t *refs);
271290
#endif
272291

0 commit comments

Comments
 (0)