]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
Fix strict-alias-rules in return struct tests.
authorKlaus Treichel <ktreichel@web.de>
Sat, 15 May 2010 17:32:36 +0000 (19:32 +0200)
committerKlaus Treichel <ktreichel@web.de>
Sat, 15 May 2010 17:32:36 +0000 (19:32 +0200)
ChangeLog
tools/gen-apply.c

index 0293a4952e44959f8b0a888a9219f8ff28339d86..ed0e7cf6b1c9bbb315a0b22e42694c881645082d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -22,7 +22,9 @@
        constant conversions.
 
        * jit/jit-block.c (jit_block_get_next_label): Fix comment for texinfo.
-  
+
+       * tools/gen-apply.c: Fix strict-alias-rules in returning struct tests.
+
 2010-05-08  Klaus Treichel  <ktreichel@web.de>
 
        * jit/jit-block.c (_jit_block_clean_cfg): Don't merge an empty block
index 21512003c49173790cc491e9fba27735594e69ec..295180249357ea7f09d1578d8a764ecb0ab41d35 100644 (file)
@@ -954,6 +954,11 @@ void detect_float_return(void)
        { \
                jit_sbyte value[(n)]; \
        }; \
+       union detect_un_##n \
+       { \
+               struct detect_##n d; \
+               jit_nint value[64 / sizeof(jit_nint)]; \
+       }; \
        struct detect_##n detect_struct_##n(void) \
        { \
                struct detect_##n d; \
@@ -964,23 +969,23 @@ void detect_float_return(void)
        { \
                jit_nint *args; \
                volatile jit_nint stack[1]; \
-               jit_nint buffer[64 / sizeof(jit_nint)]; \
+               union detect_un_##n buffer; \
                void *apply_return; \
                jit_builtin_apply_args(jit_nint *, args); \
                args[0] = (jit_nint)stack; \
-               stack[0] = (jit_nint)buffer; \
+               stack[0] = (jit_nint)&buffer; \
                if(struct_return_special_reg || num_word_regs > 0) \
                { \
-                       args[1] = (jit_nint)buffer; \
+                       args[1] = (jit_nint)&buffer; \
                        if(struct_reg_overlaps_word_reg) \
                        { \
-                               args[2] = (jit_nint)buffer; \
+                               args[2] = (jit_nint)&buffer; \
                        } \
                } \
-               mem_set(buffer, 0, sizeof(buffer)); \
+               mem_set(&buffer, 0, sizeof(buffer)); \
                jit_builtin_apply(detect_struct_##n, args, \
                                                  sizeof(jit_nint), 0, apply_return); \
-               if(((struct detect_##n *)buffer)->value[0] == 0x00) \
+               if(buffer.d.value[0] == 0x00) \
                { \
                        struct_return_in_reg[(n) - 1] = 1; \
                } \