OSDN Git Service

PR rtl-optimization/48496
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Jan 2012 10:47:59 +0000 (10:47 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Jan 2012 10:47:59 +0000 (10:47 +0000)
* src/ia64/ffi.c (ffi_call): Fix up aliasing violations.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183301 138bc75d-0d04-0410-961f-82ee72b054a4

libffi/ChangeLog
libffi/src/ia64/ffi.c

index a13e39c..75ce3bf 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/48496
+       * src/ia64/ffi.c (ffi_call): Fix up aliasing violations.
+
 2012-01-09  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * configure.ac (i?86-*-*): Set TARGET to X86_64.
 2012-01-09  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * configure.ac (i?86-*-*): Set TARGET to X86_64.
index 84b1448..79e29b4 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------
 /* -----------------------------------------------------------------------
-   ffi.c - Copyright (c) 1998, 2007, 2008 Red Hat, Inc.
+   ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc.
           Copyright (c) 2000 Hewlett Packard Company
    
    IA64 Foreign Function Interface 
           Copyright (c) 2000 Hewlett Packard Company
    
    IA64 Foreign Function Interface 
@@ -324,13 +324,17 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
        case FFI_TYPE_FLOAT:
          if (gpcount < 8 && fpcount < 8)
            stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]);
        case FFI_TYPE_FLOAT:
          if (gpcount < 8 && fpcount < 8)
            stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]);
-         stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i];
+         {
+           UINT32 tmp;
+           memcpy (&tmp, avalue[i], sizeof (UINT32));
+           stack->gp_regs[gpcount++] = tmp;
+         }
          break;
 
        case FFI_TYPE_DOUBLE:
          if (gpcount < 8 && fpcount < 8)
            stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]);
          break;
 
        case FFI_TYPE_DOUBLE:
          if (gpcount < 8 && fpcount < 8)
            stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]);
-         stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i];
+         memcpy (&stack->gp_regs[gpcount++], avalue[i], sizeof (UINT64));
          break;
 
        case FFI_TYPE_LONGDOUBLE:
          break;
 
        case FFI_TYPE_LONGDOUBLE: