diff -Nur glib-2.28.6/gio/gdbusmessage.c glib-2.28.6-gdbusmessage-alignment/gio/gdbusmessage.c
--- glib-2.28.6/gio/gdbusmessage.c	2011-04-13 23:55:29.000000000 +0100
+++ glib-2.28.6-gdbusmessage-alignment/gio/gdbusmessage.c	2011-06-09 15:29:02.000000000 +0100
@@ -1185,13 +1185,13 @@
       if (!just_align)
         {
           guint64 v;
-          gdouble *encoded;
+          gdouble encoded;
           G_STATIC_ASSERT (sizeof (gdouble) == sizeof (guint64));
           v = g_data_input_stream_read_uint64 (dis, NULL, &local_error);
           if (local_error != NULL)
             goto fail;
-          encoded = (gdouble *) &v;
-          ret = g_variant_new_double (*encoded);
+          memcpy (&encoded, &v, sizeof (encoded));
+          ret = g_variant_new_double (encoded);
         }
     }
   else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING))
@@ -1939,11 +1939,11 @@
       padding_added = ensure_output_padding (mos, dos, 8);
       if (value != NULL)
         {
-          guint64 *encoded;
+          guint64 encoded;
           gdouble v = g_variant_get_double (value);
           G_STATIC_ASSERT (sizeof (gdouble) == sizeof (guint64));
-          encoded = (guint64 *) &v;
-          g_data_output_stream_put_uint64 (dos, *encoded, NULL, NULL);
+          memcpy (&encoded, &v, sizeof (encoded));
+          g_data_output_stream_put_uint64 (dos, encoded, NULL, NULL);
         }
     }
   else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING))
