summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2023-02-25 01:03:54 +0100
committerGitHub <noreply@github.com>2023-02-25 01:03:54 +0100
commitadbabfbaa9e7560be279b6824ca725c8cad995bf (patch)
tree5c701c53224a48d8ec31c5a0eba7cf078c1d4cc8
parent75c0027e5aa0e7f9929c931ed75eb3388be1b6c1 (diff)
parentc5f7a89b0f557c9540fa2c6af2cbb3a0fb5096a3 (diff)
Merge pull request #73892 from vonagam/fix-objects-indentity-compare
Core: Identity compare objects by id, not by pointers
-rw-r--r--core/variant/variant.cpp2
-rw-r--r--tests/core/variant/test_variant.h8
2 files changed, 9 insertions, 1 deletions
diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp
index 04e1561a0c..2da9559873 100644
--- a/core/variant/variant.cpp
+++ b/core/variant/variant.cpp
@@ -3499,7 +3499,7 @@ bool Variant::identity_compare(const Variant &p_variant) const {
switch (type) {
case OBJECT: {
- return _get_obj().obj == p_variant._get_obj().obj;
+ return _get_obj().id == p_variant._get_obj().id;
} break;
case DICTIONARY: {
diff --git a/tests/core/variant/test_variant.h b/tests/core/variant/test_variant.h
index dfbaa36af8..024fcf53c4 100644
--- a/tests/core/variant/test_variant.h
+++ b/tests/core/variant/test_variant.h
@@ -1056,6 +1056,14 @@ TEST_CASE("[Variant] Identity comparison") {
Variant obj_null_two_var = Variant((Object *)nullptr);
CHECK(obj_null_one_var.identity_compare(obj_null_one_var));
CHECK(obj_null_one_var.identity_compare(obj_null_two_var));
+
+ Object *freed_one = new Object();
+ Variant freed_one_var = freed_one;
+ delete freed_one;
+ Object *freed_two = new Object();
+ Variant freed_two_var = freed_two;
+ delete freed_two;
+ CHECK_FALSE(freed_one_var.identity_compare(freed_two_var));
}
TEST_CASE("[Variant] Nested array comparison") {