grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] zfs: fix compilation failure with clang due to alignment


From: Andrei Borzenkov
Subject: [PATCH] zfs: fix compilation failure with clang due to alignment
Date: Fri, 3 Jul 2015 22:05:47 +0300

I do not claim I understand why clang complains, but this patch does
fix it.

fs/xfs.c:452:25: error: cast from 'struct grub_xfs_btree_node *' to
      'grub_uint64_t *' (aka 'unsigned long long *') increases required
      alignment from 1 to 8 [-Werror,-Wcast-align]
  grub_uint64_t *keys = (grub_uint64_t *)(leaf + 1);
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

---

Jan, do you have any idea what's wrong and whether this is proper fix?
Or should I raise it with clang?

 grub-core/fs/xfs.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
index 7249291..ea8cf7e 100644
--- a/grub-core/fs/xfs.c
+++ b/grub-core/fs/xfs.c
@@ -445,14 +445,14 @@ grub_xfs_next_de(struct grub_xfs_data *data, struct 
grub_xfs_dir2_entry *de)
   return (struct grub_xfs_dir2_entry *)(((char *)de) + ALIGN_UP(size, 8));
 }
 
-static grub_uint64_t *
+static void *
 grub_xfs_btree_keys(struct grub_xfs_data *data,
                    struct grub_xfs_btree_node *leaf)
 {
-  grub_uint64_t *keys = (grub_uint64_t *)(leaf + 1);
+  char *keys = (char *)leaf + sizeof (*leaf);
 
   if (data->hascrc)
-    keys += 6; /* skip crc, uuid, ... */
+    keys += 6 * sizeof (grub_uint64_t);        /* skip crc, uuid, ... */
   return keys;
 }
 
-- 
tg: (7a21030..) u/xfs-clang-align (depends on: master)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]