diff --git a/CMakeLists.txt b/CMakeLists.txt index fd62e985f0..4aa20bc88b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -410,6 +410,15 @@ set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Timeout multiplier to account set_option(SDL_EXAMPLES "Build the examples directory") dep_option(SDL_EXAMPLES_LINK_SHARED "link examples to shared SDL library" "${SDL_SHARED}" "SDL_SHARED;SDL_STATIC" "${SDL_SHARED}") +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(SDL_OBJECT_VALIDITY_CHECK_DEFAULT ON) +else() + set(SDL_OBJECT_VALIDITY_CHECK_DEFAULT OFF) +endif() + +set_option(SDL_OBJECT_VALIDITY_CHECK "Enable object validity check" ${SDL_OBJECT_VALIDITY_CHECK_DEFAULT}) +set(HAVE_OBJECT_VALIDITY_CHECK ${SDL_OBJECT_VALIDITY_CHECK}) + if(VITA) set_option(VIDEO_VITA_PIB "Build with PSVita piglet gles2 support" OFF) set_option(VIDEO_VITA_PVR "Build with PSVita PVR gles/gles2 support" OFF) diff --git a/include/build_config/SDL_build_config.h.cmake b/include/build_config/SDL_build_config.h.cmake index 76916aff72..90aeacecdd 100644 --- a/include/build_config/SDL_build_config.h.cmake +++ b/include/build_config/SDL_build_config.h.cmake @@ -550,6 +550,9 @@ #cmakedefine SDL_DISABLE_WINDOWS_IME 1 #cmakedefine SDL_GDK_TEXTINPUT 1 +/* Enable object validity check */ +#cmakedefine SDL_OBJECT_VALIDITY_CHECK + /* Platform specific definitions */ #cmakedefine SDL_IPHONE_KEYBOARD 1 #cmakedefine SDL_IPHONE_LAUNCHSCREEN 1 diff --git a/src/SDL_utils.c b/src/SDL_utils.c index f2090747a8..dc3c5c5820 100644 --- a/src/SDL_utils.c +++ b/src/SDL_utils.c @@ -150,6 +150,7 @@ static bool SDL_KeyMatchObject(void *unused, const void *a, const void *b) void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid) { +#ifdef SDL_OBJECT_VALIDITY_CHECK SDL_assert(object != NULL); if (SDL_ShouldInit(&SDL_objects_init)) { @@ -166,6 +167,7 @@ void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid) } else { SDL_RemoveFromHashTable(SDL_objects, object); } +#endif } bool SDL_ObjectValid(void *object, SDL_ObjectType type) @@ -174,12 +176,15 @@ bool SDL_ObjectValid(void *object, SDL_ObjectType type) return false; } +#ifdef SDL_OBJECT_VALIDITY_CHECK const void *object_type; if (!SDL_FindInHashTable(SDL_objects, object, &object_type)) { return false; } - return (((SDL_ObjectType)(uintptr_t)object_type) == type); +#else + return true; +#endif } typedef struct GetOneObjectData