From 83d1d065df01e4f21afd763c17f1d48e0a1161aa Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Wed, 18 Dec 2019 18:01:33 +0100 Subject: [PATCH] Assert in 'libgomp/target.c:gomp_unmap_vars_internal' that we're not unmapping 'tgt' while it's still in use libgomp/ * target.c (gomp_unmap_vars_internal): Add a safeguard to 'gomp_remove_var'. From-SVN: r279534 --- libgomp/ChangeLog | 3 +++ libgomp/target.c | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 472519c7e3e..541a2c7610c 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,5 +1,8 @@ 2019-12-18 Thomas Schwinge + * target.c (gomp_unmap_vars_internal): Add a safeguard to + 'gomp_remove_var'. + * target.c (gomp_to_device_kind_p): Handle 'GOMP_MAP_FORCE_FROM' like 'GOMP_MAP_FROM'. diff --git a/libgomp/target.c b/libgomp/target.c index a3cdb34bd51..67cd80a3c35 100644 --- a/libgomp/target.c +++ b/libgomp/target.c @@ -1225,7 +1225,15 @@ gomp_unmap_vars_internal (struct target_mem_desc *tgt, bool do_copyfrom, + tgt->list[i].offset), tgt->list[i].length); if (do_unmap) - gomp_remove_var (devicep, k); + { + struct target_mem_desc *k_tgt = k->tgt; + bool is_tgt_unmapped = gomp_remove_var (devicep, k); + /* It would be bad if TGT got unmapped while we're still iterating + over its LIST_COUNT, and also expect to use it in the following + code. */ + assert (!is_tgt_unmapped + || k_tgt != tgt); + } } if (aq) -- 2.30.2