Incorrect C11 / cannot build with clang 3.6
Dmitry Marakasov
amdmi3 at amdmi3.ru
Wed Feb 4 21:33:14 CET 2015
Hi!
I'm testing new version of clang (3.6) on various software, and
libev doesn't build with it:
---
libtool: compile: clang36 -DHAVE_CONFIG_H -I. -O2 -pipe -march=nocona -fstack-protector -fno-strict-aliasing -MT ev.lo -MD -MP -MF .deps/ev.Tpo -c ev.c -fPIC -DPIC -o .libs/ev.o
ev.c:477:48: warning: '/*' within block comment [-Wcomment]
/*#define MIN_INTERVAL 0.00000095367431640625 /* 1/2**20, good till 2200 */
^
ev.c:970:42: error: '_Noreturn' keyword must precede function declarator
ecb_inline void ecb_unreachable (void) ecb_noreturn;
^~~~~~~~~~~~
_Noreturn
ev.c:773:26: note: expanded from macro 'ecb_noreturn'
#define ecb_noreturn _Noreturn
---
Seems like C11 is now the default, however libev code is incorrect
C11-wise, as ecb_noreturn which expands to _Noreturn follows function
definition, while _Noreturn should preceed it.
Depending on whether it's allowed to place __attribute__ before
function, either ecb_noreturn should be moved before ecb_unreachable
declaration, or it should be split to e.g. ecb_pre_noreturn and
ecb_post_noreturn to work for both cases.
Full log with clang 3.4:
https://people.freebsd.org/~amdmi3/libev-clang34.log
Full log with clang 3.6:
https://people.freebsd.org/~amdmi3/libev-clang36.log
--
Dmitry Marakasov . 55B5 0596 FF1E 8D84 5F56 9510 D35A 80DD F9D2 F77D
amdmi3 at amdmi3.ru ..: jabber: amdmi3 at jabber.ru http://www.amdmi3.ru
More information about the libev
mailing list