vhacd: Fix -fpermissive build issue with MinGW

Fixes #27926.
This commit is contained in:
Rémi Verschelde 2019-04-11 18:01:04 +02:00
parent 668439d16a
commit 74ab31b7f7
3 changed files with 82 additions and 2 deletions

View file

@ -0,0 +1,53 @@
diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h
index 487205062..52297cd78 100644
--- a/thirdparty/vhacd/inc/btScalar.h
+++ b/thirdparty/vhacd/inc/btScalar.h
@@ -535,6 +535,29 @@ struct btTypedObject {
}
};
+// -- GODOT start --
+// Cherry-picked from Bullet 2.88 to fix GH-27926
+///align a pointer to the provided alignment, upwards
+template <typename T>
+T *btAlignPointer(T *unalignedPtr, size_t alignment)
+{
+ struct btConvertPointerSizeT
+ {
+ union {
+ T *ptr;
+ size_t integer;
+ };
+ };
+ btConvertPointerSizeT converter;
+
+ const size_t bit_mask = ~(alignment - 1);
+ converter.ptr = unalignedPtr;
+ converter.integer += alignment - 1;
+ converter.integer &= bit_mask;
+ return converter.ptr;
+}
+// -- GODOT end --
+
// -- GODOT start --
}; // namespace VHACD
// -- GODOT end --
diff --git a/thirdparty/vhacd/src/btAlignedAllocator.cpp b/thirdparty/vhacd/src/btAlignedAllocator.cpp
index ce0e7f26f..8dee31e7e 100644
--- a/thirdparty/vhacd/src/btAlignedAllocator.cpp
+++ b/thirdparty/vhacd/src/btAlignedAllocator.cpp
@@ -72,8 +72,12 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment)
real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1));
if (real) {
- offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
- ret = (void*)((real + sizeof(void*)) + offset);
+ // -- GODOT start --
+ // Synced with Bullet 2.88 to fix GH-27926
+ //offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
+ //ret = (void*)((real + sizeof(void*)) + offset);
+ ret = btAlignPointer(real + sizeof(void *), alignment);
+ // -- GODOT end --
*((void**)(ret)-1) = (void*)(real);
}
else {

View file

@ -543,6 +543,29 @@ struct btTypedObject {
} }
}; };
// -- GODOT start --
// Cherry-picked from Bullet 2.88 to fix GH-27926
///align a pointer to the provided alignment, upwards
template <typename T>
T *btAlignPointer(T *unalignedPtr, size_t alignment)
{
struct btConvertPointerSizeT
{
union {
T *ptr;
size_t integer;
};
};
btConvertPointerSizeT converter;
const size_t bit_mask = ~(alignment - 1);
converter.ptr = unalignedPtr;
converter.integer += alignment - 1;
converter.integer &= bit_mask;
return converter.ptr;
}
// -- GODOT end --
// -- GODOT start -- // -- GODOT start --
}; // namespace VHACD }; // namespace VHACD
// -- GODOT end -- // -- GODOT end --

View file

@ -72,8 +72,12 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment)
real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1)); real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1));
if (real) { if (real) {
offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1); // -- GODOT start --
ret = (void*)((real + sizeof(void*)) + offset); // Synced with Bullet 2.88 to fix GH-27926
//offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
//ret = (void*)((real + sizeof(void*)) + offset);
ret = btAlignPointer(real + sizeof(void *), alignment);
// -- GODOT end --
*((void**)(ret)-1) = (void*)(real); *((void**)(ret)-1) = (void*)(real);
} }
else { else {