summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 63463dbbc7f..f3010dbac5d 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -991,12 +991,22 @@ make_pure_float (num)
double num;
{
register Lisp_Object new;
+ int alignment;
/* Make sure that pureptr is aligned on at least a sizeof (double)
boundary. Some architectures (like the sparc) require this, and
I suspect that floats are rare enough that it's no tragedy for
those that do. */
- pureptr = (pureptr + sizeof (num) - 1) & - sizeof (num);
+#ifdef __GNUC__
+#if __GNUC__ >= 2
+ alignment = __alignof (struct Lisp_Float);
+#else
+ alignment = sizeof (struct Lisp_Float);
+#endif
+#else
+ alignment = sizeof (struct Lisp_Float);
+#endif
+ pureptr = (pureptr + alignment - 1) & - alignment;
if (pureptr + sizeof (struct Lisp_Float) > PURESIZE)
error ("Pure Lisp storage exhausted");