From f0e73013d1bc56733c7a3181bfcc52dae7a8d7cb Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 5 Dec 2007 16:13:24 +0000 Subject: [PATCH] avoid over-strict aliasing assumptions in gcc for amd64 svn: r7901 --- src/mzscheme/src/jit.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index 7a5402b1ae..c22c5d6650 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -1037,12 +1037,20 @@ static void *prepare_retry_alloc(void *p, void *p2) return p; } +long scheme_read_first_word(void *sp) +/* Not declared static, to avoid inlining. This procedure + helps avoid bugs in C compiler alias analysis, since we are + intentially aliasing. */ +{ + return *(long *)sp; +} + static long initial_tag_word(Scheme_Type tag) { - Scheme_Small_Object s; - memset(&s, 0, sizeof(Scheme_Small_Object)); - s.iso.so.type = tag; - return *(long *)(void *)&s; + GC_CAN_IGNORE Scheme_Small_Object sp; + memset(&sp, 0, sizeof(Scheme_Small_Object)); + sp.iso.so.type = tag; + return scheme_read_first_word((void *)&sp); } static int inline_alloc(mz_jit_state *jitter, int amt, Scheme_Type ty, int keep_r0_r1)