On Tue, Sep 18, 2012 at 8:28 AM, Garrett Cooper <yanegomi_at_gmail.com> wrote: > On Sep 18, 2012, at 5:53 AM, David Wolfskill <david_at_catwhisker.org> wrote: > >> This was on: >> >> FreeBSD g1-227.catwhisker.org 10.0-CURRENT FreeBSD 10.0-CURRENT #681 240597M: Mon Sep 17 15:34:41 PDT 2012 root_at_d134.dwolf.juniper.net.:/usr/obj/usr/src/sys/CANARY i386 >> >> using clang as the C compiler: >> >> ... >> ===> sbin/nvmecontrol (all) >> clang -O2 -pipe -std=gnu99 -Qunused-arguments -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wold-style-definition -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int -c /usr/src/sbin/nvmecontrol/nvmecontrol.c >> /usr/src/sbin/nvmecontrol/nvmecontrol.c:77:6: error: cast from 'struct nvme_controller_data *' to 'uint32_t *' (aka 'unsigned int *') increases required alignment from 1 to 4 [-Werror,-Wcast-align] >> p = (uint32_t *)cdata; >> ^~~~~~~~~~~~~~~~~ >> 1 error generated. >> *** [nvmecontrol.o] Error code 1 >> 1 error >> *** [all] Error code 2 >> 1 error >> *** [sbin.all__D] Error code 2 > > Probably should be using memcpy for that. > Thanks! > -Garrett I think adding __aligned(4) to struct nvme_controller_data is the better way to go. This structure is already marked as __packed which seems to cause clang to think the structure could be unaligned. I've confirmed this fixes the issue. An an FYI - If I remove the __packed specifier (and do not add __aligned), clang compiles without nvmecontrol without warning as well. Regards, -JimReceived on Tue Sep 18 2012 - 15:09:55 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:30 UTC