From cacced7e507f7603bacc03ae2616e58f0ede122a Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Thu, 24 Aug 2017 22:58:51 +0200 Subject: Convert Object::cast_to() to the static version Currently we rely on some undefined behavior when Object->cast_to() gets called with a Null pointer. This used to work fine with GCC < 6 but newer versions of GCC remove all codepaths in which the this pointer is Null. However, the non-static cast_to() was supposed to be null safe. This patch makes cast_to() Null safe and removes the now redundant Null checks where they existed. It is explained in this article: https://www.viva64.com/en/b/0226/ --- scene/3d/mesh_instance.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'scene/3d/mesh_instance.cpp') diff --git a/scene/3d/mesh_instance.cpp b/scene/3d/mesh_instance.cpp index da25afbf5..578e3900f 100644 --- a/scene/3d/mesh_instance.cpp +++ b/scene/3d/mesh_instance.cpp @@ -148,7 +148,7 @@ void MeshInstance::_resolve_skeleton_path() { if (skeleton_path.is_empty()) return; - Skeleton *skeleton = get_node(skeleton_path) ? get_node(skeleton_path)->cast_to() : NULL; + Skeleton *skeleton = Object::cast_to(get_node(skeleton_path)); if (skeleton) VisualServer::get_singleton()->instance_attach_skeleton(get_instance(), skeleton->get_skeleton()); } @@ -202,13 +202,13 @@ Node *MeshInstance::create_trimesh_collision_node() { void MeshInstance::create_trimesh_collision() { - StaticBody *static_body = create_trimesh_collision_node()->cast_to(); + StaticBody *static_body = Object::cast_to(create_trimesh_collision_node()); ERR_FAIL_COND(!static_body); static_body->set_name(String(get_name()) + "_col"); add_child(static_body); if (get_owner()) { - CollisionShape *cshape = static_body->get_child(0)->cast_to(); + CollisionShape *cshape = Object::cast_to(static_body->get_child(0)); static_body->set_owner(get_owner()); cshape->set_owner(get_owner()); } @@ -232,13 +232,13 @@ Node *MeshInstance::create_convex_collision_node() { void MeshInstance::create_convex_collision() { - StaticBody *static_body = create_convex_collision_node()->cast_to(); + StaticBody *static_body = Object::cast_to(create_convex_collision_node()); ERR_FAIL_COND(!static_body); static_body->set_name(String(get_name()) + "_col"); add_child(static_body); if (get_owner()) { - CollisionShape *cshape = static_body->get_child(0)->cast_to(); + CollisionShape *cshape = Object::cast_to(static_body->get_child(0)); static_body->set_owner(get_owner()); cshape->set_owner(get_owner()); } -- cgit v1.3.1