Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnkit Meel <ankitjmeel@gmail.com>2020-10-26 12:32:20 +0300
committerAnkit Meel <ankitjmeel@gmail.com>2020-10-26 12:32:20 +0300
commit2ddecfffc3d3a3a1db4ae45e8665caa2a85ab43a (patch)
tree1f48d4ee7187feec35a2bdff1b215c764b6014f6 /source/blender/blenkernel/intern/lib_id_delete.c
parent4b7abde11df9bd6ed759a28286ce3a05147e08c8 (diff)
Fix T81077 id_management test on macOS
This looks like a optimizer bug where it makes wrong assumptions. The code inside lib_id_delete:264 on rBafd13710b897cc1c11b `for (id = last_remapped_id->next; id; id = id->next) {..}` is not executed in release/relwithdebinfo builds. This can be "fixed" by several ways: - Adding a line that prints the `last_remapped_id->name` right before the said for-loop starts. - Turning off optimization for the whole function `id_delete`: `#pragma clang optimize off/on` Ray Molenkamp - Marking `last_remapped_id` volatile. Julian Eisel - Marking `tagged_deleted_ids` volatile. But it adds a warning when calling `BLI_addtail`: discards volatile qualifier. Discovered by accident. Fix T81077 Reviewed By: mont29 Maniphest Tasks: T81077 Differential Revision: https://developer.blender.org/D9315
Diffstat (limited to 'source/blender/blenkernel/intern/lib_id_delete.c')
-rw-r--r--source/blender/blenkernel/intern/lib_id_delete.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/lib_id_delete.c b/source/blender/blenkernel/intern/lib_id_delete.c
index 1e45a3c1163..25c48479ef9 100644
--- a/source/blender/blenkernel/intern/lib_id_delete.c
+++ b/source/blender/blenkernel/intern/lib_id_delete.c
@@ -261,7 +261,9 @@ static void id_delete(Main *bmain, const bool do_tagged_deletion)
bool keep_looping = true;
while (keep_looping) {
ID *id, *id_next;
- ID *last_remapped_id = tagged_deleted_ids.last;
+ /* Marked volatile to avoid a macOS Clang optimization bug. See T81077.
+ * #last_remapped_id.next is assumed to be NULL by optimizer which is wrong. */
+ volatile ID *last_remapped_id = tagged_deleted_ids.last;
keep_looping = false;
/* First tag and remove from Main all datablocks directly from target lib.