diff options
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 12 |
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) | |||
| 991 | double num; | 991 | double num; |
| 992 | { | 992 | { |
| 993 | register Lisp_Object new; | 993 | register Lisp_Object new; |
| 994 | int alignment; | ||
| 994 | 995 | ||
| 995 | /* Make sure that pureptr is aligned on at least a sizeof (double) | 996 | /* Make sure that pureptr is aligned on at least a sizeof (double) |
| 996 | boundary. Some architectures (like the sparc) require this, and | 997 | boundary. Some architectures (like the sparc) require this, and |
| 997 | I suspect that floats are rare enough that it's no tragedy for | 998 | I suspect that floats are rare enough that it's no tragedy for |
| 998 | those that do. */ | 999 | those that do. */ |
| 999 | pureptr = (pureptr + sizeof (num) - 1) & - sizeof (num); | 1000 | #ifdef __GNUC__ |
| 1001 | #if __GNUC__ >= 2 | ||
| 1002 | alignment = __alignof (struct Lisp_Float); | ||
| 1003 | #else | ||
| 1004 | alignment = sizeof (struct Lisp_Float); | ||
| 1005 | #endif | ||
| 1006 | #else | ||
| 1007 | alignment = sizeof (struct Lisp_Float); | ||
| 1008 | #endif | ||
| 1009 | pureptr = (pureptr + alignment - 1) & - alignment; | ||
| 1000 | 1010 | ||
| 1001 | if (pureptr + sizeof (struct Lisp_Float) > PURESIZE) | 1011 | if (pureptr + sizeof (struct Lisp_Float) > PURESIZE) |
| 1002 | error ("Pure Lisp storage exhausted"); | 1012 | error ("Pure Lisp storage exhausted"); |