Skip to content

Commit

Permalink
Fix Clang deprecated builtins
Browse files Browse the repository at this point in the history
It seems that Clang and GCC have different interpretations of certain
builtins. So this PR uses std <type_traits> functions just as cowdata.h
does in the godot project.
  • Loading branch information
adamscott committed Aug 15, 2023
1 parent df55005 commit 5c26284
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions include/godot_cpp/templates/cowdata.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

#include <cstring>
#include <new>
#include <type_traits>

namespace godot {

Expand Down Expand Up @@ -210,9 +211,9 @@ void CowData<T>::_unref(void *p_data) {
if (refc->decrement() > 0) {
return; // still in use
}
// clean up

if (!__has_trivial_destructor(T)) {
// clean up
if (std::is_trivially_destructible<T>::value) {
uint32_t *count = _get_size();
T *data = (T *)(count + 1);

Expand Down Expand Up @@ -247,7 +248,7 @@ uint32_t CowData<T>::_copy_on_write() {
T *_data = (T *)(mem_new);

// initialize new elements
if (__has_trivial_copy(T)) {
if (std::is_trivially_copyable<T>::value) {
memcpy(mem_new, _ptr, current_size * sizeof(T));

} else {
Expand Down Expand Up @@ -310,7 +311,7 @@ Error CowData<T>::resize(int p_size) {

// construct the newly created elements

if (!__has_trivial_constructor(T)) {
if (!std::is_trivially_constructible<T>::value) {
T *elems = _get_data();

for (int i = *_get_size(); i < p_size; i++) {
Expand All @@ -321,7 +322,7 @@ Error CowData<T>::resize(int p_size) {
*_get_size() = p_size;

} else if (p_size < current_size) {
if (!__has_trivial_destructor(T)) {
if (!std::is_trivially_destructible<T>::value) {
// deinitialize no longer needed elements
for (uint32_t i = p_size; i < *_get_size(); i++) {
T *t = &_get_data()[i];
Expand Down

0 comments on commit 5c26284

Please sign in to comment.