]> git.kaiwu.me - quickjs.git/commitdiff
fixed compilation with clang
authorFabrice Bellard <fabrice@bellard.org>
Thu, 21 May 2026 17:02:15 +0000 (19:02 +0200)
committerFabrice Bellard <fabrice@bellard.org>
Thu, 21 May 2026 17:02:15 +0000 (19:02 +0200)
quickjs.c

index 9b47f18d2e62115401e40f715eee1349dcfebb8b..9c78960f9593876d16bf89131b0be8a00f052be4 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -299,7 +299,7 @@ typedef struct {
 #ifdef JS_MALLOC_USE_ITER
     struct list_head large_block_list; /* list of JSMallocLargeBlockHeader.link */
 #endif
-    JSMallocBlockHeader zero_size_block;
+    __attribute__((aligned(JS_MALLOC_ALIGN))) uint8_t zero_size_block[sizeof(JSMallocBlockHeader)];
 
     /* callbacks to the host malloc */
     JSMallocFunctions mf;
@@ -1457,11 +1457,16 @@ static int get_block_size_index(size_t size)
     }
 }
 
+static JSMallocBlockHeader *get_zero_size_block(JSMallocContext *s)
+{
+    return (JSMallocBlockHeader *)s->zero_size_block;
+}
+
 static void js_malloc_init(JSMallocContext *s)
 {
     int i;
     memset(s, 0, sizeof(*s));
-    s->zero_size_block.u.block_idx = FREE_NIL;
+    get_zero_size_block(s)->u.block_idx = FREE_NIL;
     for(i = 0; i < JS_MALLOC_BLOCK_SIZE_COUNT; i++) {
         init_list_head(&s->arena_list[i]);
         init_list_head(&s->free_arena_list[i]);
@@ -1537,7 +1542,7 @@ static void *__js_malloc(JSMallocContext *s, size_t size)
 {
     size_t total_size;
     if (unlikely(size == 0)) {
-        JSMallocBlockHeader *b = &s->zero_size_block;
+        JSMallocBlockHeader *b = get_zero_size_block(s);
         return b->user_data;
     } else {
         total_size = ((size + JS_MALLOC_ALIGN - 1) & ~(JS_MALLOC_ALIGN - 1)) +
@@ -1587,7 +1592,7 @@ static void __js_free(JSMallocContext *s, void *ptr)
     b = container_of(ptr, JSMallocBlockHeader, user_data);
     if (unlikely(b->u.block_idx == FREE_NIL)) {
         /* large or zero size block */
-        if (b == &s->zero_size_block) {
+        if (b == get_zero_size_block(s)) {
             /* nothing to do */
         } else {
             JSMallocLargeBlockHeader *lb = container_of(ptr, JSMallocLargeBlockHeader, header.user_data);
@@ -1630,7 +1635,7 @@ static void *__js_realloc(JSMallocContext *s, void *ptr, size_t size)
     }
     b = container_of(ptr, JSMallocBlockHeader, user_data);
     if (b->u.block_idx == FREE_NIL) {
-        if (b == &s->zero_size_block) {
+        if (b == get_zero_size_block(s)) {
             return __js_malloc(s, size);
         } else {
             JSMallocLargeBlockHeader *lb, *new_lb;
@@ -1689,7 +1694,7 @@ static size_t __js_malloc_usable_size(JSMallocContext *s, const char *ptr)
         return 0;
     b = container_of(ptr, JSMallocBlockHeader, user_data);
     if (b->u.block_idx == FREE_NIL) {
-        if (b == &s->zero_size_block) {
+        if (b == get_zero_size_block(s)) {
             return 0;
         } else {
             JSMallocLargeBlockHeader *lb;