memcachedをgcc4.5.0でmakeするとエラー

memcachedをconfigure,makeするとこんなエラーが。

$ make
make  all-recursive
(中略)
gcc -std=gnu99 -DHAVE_CONFIG_H -I.  -DNDEBUG   -g -O2 -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -MT memcached-memcached.o -MD -MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f 'memcached.c' || echo './'`memcached.c
cc1: warnings being treated as errors
memcached.c: In function 'complete_incr_bin':
memcached.c:1023:16: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c:1044:13: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c:1061:17: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c: In function 'process_bin_get':
memcached.c:1193:9: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c: In function 'process_bin_update':
memcached.c:1889:5: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c:1905:5: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c: In function 'process_bin_append_prepend':
memcached.c:1949:5: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c: In function 'process_bin_delete':
memcached.c:2014:9: error: dereferencing type-punned pointer will break strict-aliasing rules
memcached.c: In function 'do_store_item':
memcached.c:2127:9: error: dereferencing type-punned pointer will break strict-aliasing rules
(後略)

手持ちの環境でgccのそれぞれ4.1.2,3.4.3で試してみたけれど、エラーにはならない。
該当ソースはたとえばこんなところ。

  ITEM_set_cas(it, c->binary_header.request.cas);

このITEM_set_cas()または、ITEM_get_cas()というマクロを使っているところで上記のエラーがでています。
このマクロはmemcached.hで定義されています。

#define ITEM_get_cas(i) ((uint64_t)(((i)->it_flags & ITEM_CAS) ? \
                                    *(uint64_t*)&((i)->end[0]) : 0x0))
#define ITEM_set_cas(i,v) { if ((i)->it_flags & ITEM_CAS) { \
                          *(uint64_t*)&((i)->end[0]) = v; } }

うーん、多分型が違うポインタへキャストしてつかっているところがまずいのかな。4.5から仕様がかわったのか、それともチェックが厳しくなっただけなのか。
通常ならwarningですんでるはずが、-Werrorがついてるからエラー扱いになって、コンパイルが中断されてしまっています。
仕方ないので、configureファイルを書き換えて、-Werrorを外して再configure,make。

$ diff configure configure.bak 
7917c7917
<   CFLAGS="$CFLAGS -Wall -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls"
---
>   CFLAGS="$CFLAGS -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls"

まぁ、無事にmakeはできたんだけど使ってて平気かなって気にはなる。