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/navigation_mesh.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'scene/3d/navigation_mesh.cpp') diff --git a/scene/3d/navigation_mesh.cpp b/scene/3d/navigation_mesh.cpp index 5d4568f5d..46d177df7 100644 --- a/scene/3d/navigation_mesh.cpp +++ b/scene/3d/navigation_mesh.cpp @@ -247,7 +247,7 @@ void NavigationMeshInstance::set_enabled(bool p_enabled) { } if (debug_view) { - MeshInstance *dm = debug_view->cast_to(); + MeshInstance *dm = Object::cast_to(debug_view); if (is_enabled()) { dm->set_material_override(get_tree()->get_debug_navigation_material()); } else { @@ -273,7 +273,7 @@ void NavigationMeshInstance::_notification(int p_what) { Spatial *c = this; while (c) { - navigation = c->cast_to(); + navigation = Object::cast_to(c); if (navigation) { if (enabled && navmesh.is_valid()) { @@ -342,7 +342,7 @@ void NavigationMeshInstance::set_navigation_mesh(const Ref &p_na } if (debug_view && navmesh.is_valid()) { - debug_view->cast_to()->set_mesh(navmesh->get_debug_mesh()); + Object::cast_to(debug_view)->set_mesh(navmesh->get_debug_mesh()); } update_gizmo(); @@ -365,10 +365,10 @@ String NavigationMeshInstance::get_configuration_warning() const { const Spatial *c = this; while (c) { - if (c->cast_to()) + if (Object::cast_to(c)) return String(); - c = c->get_parent()->cast_to(); + c = Object::cast_to(c->get_parent()); } return TTR("NavigationMeshInstance must be a child or grandchild to a Navigation node. It only provides navigation data."); -- cgit v1.2.3-70-g09d2