aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/libffi/src/types.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8/libffi/src/types.c')
-rw-r--r--gcc-4.8/libffi/src/types.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc-4.8/libffi/src/types.c b/gcc-4.8/libffi/src/types.c
index 0a11eb0fb..0de599423 100644
--- a/gcc-4.8/libffi/src/types.c
+++ b/gcc-4.8/libffi/src/types.c
@@ -44,6 +44,17 @@ const ffi_type ffi_type_##name = { \
id, NULL \
}
+#define FFI_NONCONST_TYPEDEF(name, type, id) \
+struct struct_align_##name { \
+ char c; \
+ type x; \
+}; \
+ffi_type ffi_type_##name = { \
+ sizeof(type), \
+ offsetof(struct struct_align_##name, x), \
+ id, NULL \
+}
+
/* Size and alignment are fake here. They must not be 0. */
const ffi_type ffi_type_void = {
1, 1, FFI_TYPE_VOID, NULL
@@ -73,5 +84,9 @@ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE);
# endif
const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL };
#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+# if HAVE_LONG_DOUBLE_VARIANT
+FFI_NONCONST_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
+# else
FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
+# endif
#endif