Build failure due to block_abi.h
David, The definition of DECLARE_BLOCK seems to trip over GCC 4.2.1 here at Juniper. This is how we run the compiler: /volume/fwtools/gcc/jnpr/4.2.1/amd64-juniper-junos.5/bin/amd64-juniper-junos-gcc -O2 -pipe -I/b/marcelm/fbsd-head/src/lib/libc/include -I/b/marcelm/fbsd-head/src/lib/libc/../../include -I/b/marcelm/fbsd-head/src/lib/libc/amd64 -DNLS -D__DBINTERFACE_PRIVATE -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/gdtoa -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/libc-vis -DINET6 -I/b/marcelm/fbsd-head/obj/amd64/lib/libc -I/b/marcelm/fbsd-head/src/lib/libc/resolv -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/jemalloc/include -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/tzcode/stdtime -I/b/marcelm/fbsd-head/src/lib/libc/stdtime -I/b/marcelm/fbsd-head/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN -I/b/marcelm/fbsd-head/src/lib/libc/rpc -DNS_CACHING -DSYMBOL_VERSIONING -D__ELF__ -Dunix -D__unix -D__unix__-D__FreeBSD__=9 --sysroot /volume/sisyphus/occam/sysroot/projects_tp5/20131031.611483/amd64 -fno-builtin-printf -g -nostdinc -isystem/b/marcelm/fbsd-head/obj/stage/amd64/usr/include -isystem/b/marcelm/fbsd-head/obj/stage/amd64/include -std=gnu99 -Wsystem-headers -Werror -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -I/b/marcelm/fbsd-head/src/lib/libutil -I/b/marcelm/fbsd-head/src/lib/msun/src -I/b/marcelm/fbsd-head/src/lib/msun/x86 -c /b/marcelm/fbsd-head/src/lib/libc/stdlib/atexit.c -o atexit.o whatever set of flags we use here at Juniper: This is the error: Building /b/marcelm/fbsd-head/obj/amd64/lib/libc/atexit.o cc1: warnings being treated as errors /b/marcelm/fbsd-head/src/lib/libc/stdlib/atexit.c:144: warning: anonymous struct declared inside parameter list /b/marcelm/fbsd-head/src/lib/libc/stdlib/atexit.c:144: warning: its scope is only this definition or declaration, which is probably not what you want *** Error code 1 This hurdle is a bit higher than the hurdles I normally run into when syncing with ^/head, so I could use your expertise. We need to continue to be able to build the sources with compilers outside of the tree as much as possible and I haven't found a way yet (one I don't dislike to be precise) to get this blocks stuff to compile. It's a huge blocker right now. Thanks, -- Marcel Moolenaar mar...@xcllnt.net signature.asc Description: Message signed with OpenPGP using GPGMail
Re: Build failure due to block_abi.h
Hi Marcel, This error is a warning for me with gcc 4.7.3 when I try. With 4.2.1 in the tree, it appears to be silenced by something (or possibly we're using the native blocks code path with gcc and clang doesn't emit that warning in non-blocks mode). We could pull out the structure definitions - this is what I've done in the GNUstep versions of these macros, which provide separate macros for declaring the type. It will clutter the code a bit, but if it's not possible to silence the warnings with your compiler then I can make that change. Unfortunately, the warning actually is spurious here - the structure really is expected to be only for the scope of the function, because any compiler that can actually generate those structure in a useful way will give the type a different internal name. I'll try to send you a patch to test tomorrow - in the meantime, removing the -Werror should make it build. Unfortunately, gcc (especially 4.2) doesn't provide very fine-grained control over warnings and it doesn't seem to be possible (or, at least, not documented) to disable the ones that are part of their default set. David On 4 Apr 2014, at 18:42, Marcel Moolenaar mar...@xcllnt.net wrote: David, The definition of DECLARE_BLOCK seems to trip over GCC 4.2.1 here at Juniper. This is how we run the compiler: /volume/fwtools/gcc/jnpr/4.2.1/amd64-juniper-junos.5/bin/amd64-juniper-junos-gcc -O2 -pipe -I/b/marcelm/fbsd-head/src/lib/libc/include -I/b/marcelm/fbsd-head/src/lib/libc/../../include -I/b/marcelm/fbsd-head/src/lib/libc/amd64 -DNLS -D__DBINTERFACE_PRIVATE -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/gdtoa -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/libc-vis -DINET6 -I/b/marcelm/fbsd-head/obj/amd64/lib/libc -I/b/marcelm/fbsd-head/src/lib/libc/resolv -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/jemalloc/include -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/tzcode/stdtime -I/b/marcelm/fbsd-head/src/lib/libc/stdtime -I/b/marcelm/fbsd-head/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN -I/b/marcelm/fbsd-head/src/lib/libc/rpc -DNS_CACHING -DSYMBOL_VERSIONING -D__ELF__ -Dunix -D__unix -D__unix__ -D__FreeBSD__=9 --sysroot /volume/sisyphus/occam/sysroot/projects_tp5/20131031.611483/amd64 -fno-builtin-printf -g -nos tdinc -isystem/b/marcelm/fbsd-head/obj/stage/amd64/usr/include -isystem/b/marcelm/fbsd-head/obj/stage/amd64/include -std=gnu99 -Wsystem-headers -Werror -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -I/b/marcelm/fbsd-head/src/lib/libutil -I/b/marcelm/fbsd-head/src/lib/msun/src -I/b/marcelm/fbsd-head/src/lib/msun/x86 -c /b/marcelm/fbsd-head/src/lib/libc/stdlib/atexit.c -o atexit.o whatever set of flags we use here at Juniper: This is the error: Building /b/marcelm/fbsd-head/obj/amd64/lib/libc/atexit.o cc1: warnings being treated as errors /b/marcelm/fbsd-head/src/lib/libc/stdlib/atexit.c:144: warning: anonymous struct declared inside parameter list /b/marcelm/fbsd-head/src/lib/libc/stdlib/atexit.c:144: warning: its scope is only this definition or declaration, which is probably not what you want *** Error code 1 This hurdle is a bit higher than the hurdles I normally run into when syncing with ^/head, so I could use your expertise. We need to continue to be able to build the sources with compilers outside of the tree as much as possible and I haven't found a way yet (one I don't dislike to be precise) to get this blocks stuff to compile. It's a huge blocker right now. Thanks, -- Marcel Moolenaar mar...@xcllnt.net ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: Build failure due to block_abi.h
It turns out that tomorrow happened 12 minutes after this email... The attached diff lets it build with -Werror for me with FreeBSD clang and gcc (with -fblocks and -fno-blocks) and with ports gcc 4.7.3 and doesn't clutter the code. Please can you test it with Juniper's gcc? David Index: stdlib/atexit.c === --- stdlib/atexit.c (revision 264068) +++ stdlib/atexit.c (working copy) @@ -80,6 +80,7 @@ }; static struct atexit *__atexit;/* points to head of LIFO stack */ +typedef DECLARE_BLOCK(void, atexit_block, void); /* * Register the function described by 'fptr' to be called at application @@ -141,7 +142,7 @@ * Register a block to be performed at exit. */ int -atexit_b(DECLARE_BLOCK(void, func, void)) +atexit_b(atexit_block func) { struct atexit_fn fn; int error; Index: stdlib/heapsort.c === --- stdlib/heapsort.c (revision 264068) +++ stdlib/heapsort.c (working copy) @@ -45,6 +45,7 @@ #ifdef I_AM_HEAPSORT_B #include block_abi.h #define COMPAR(x, y) CALL_BLOCK(compar, x, y) +typedef DECLARE_BLOCK(int, heapsort_block, const void *, const void *); #else #define COMPAR(x, y) compar(x, y) #endif @@ -149,7 +150,7 @@ heapsort_b(vbase, nmemb, size, compar) void *vbase; size_t nmemb, size; - DECLARE_BLOCK(int, compar, const void *, const void *); + heapsort_block compar; #else int heapsort(vbase, nmemb, size, compar) Index: stdlib/qsort_r.c === --- stdlib/qsort_r.c(revision 264068) +++ stdlib/qsort_r.c(working copy) @@ -8,9 +8,10 @@ #define I_AM_QSORT_R #include qsort.c +typedef DECLARE_BLOCK(int, qsort_block, const void *, const void *); + void -qsort_b(void *base, size_t nel, size_t width, - DECLARE_BLOCK(int, compar, const void *, const void *)) +qsort_b(void *base, size_t nel, size_t width, qsort_block compar) { qsort_r(base, nel, width, compar, (int (*)(void *, const void *, const void *)) On 4 Apr 2014, at 23:48, David Chisnall thera...@freebsd.org wrote: Hi Marcel, This error is a warning for me with gcc 4.7.3 when I try. With 4.2.1 in the tree, it appears to be silenced by something (or possibly we're using the native blocks code path with gcc and clang doesn't emit that warning in non-blocks mode). We could pull out the structure definitions - this is what I've done in the GNUstep versions of these macros, which provide separate macros for declaring the type. It will clutter the code a bit, but if it's not possible to silence the warnings with your compiler then I can make that change. Unfortunately, the warning actually is spurious here - the structure really is expected to be only for the scope of the function, because any compiler that can actually generate those structure in a useful way will give the type a different internal name. I'll try to send you a patch to test tomorrow - in the meantime, removing the -Werror should make it build. Unfortunately, gcc (especially 4.2) doesn't provide very fine-grained control over warnings and it doesn't seem to be possible (or, at least, not documented) to disable the ones that are part of their default set. David On 4 Apr 2014, at 18:42, Marcel Moolenaar mar...@xcllnt.net wrote: David, The definition of DECLARE_BLOCK seems to trip over GCC 4.2.1 here at Juniper. This is how we run the compiler: /volume/fwtools/gcc/jnpr/4.2.1/amd64-juniper-junos.5/bin/amd64-juniper-junos-gcc -O2 -pipe -I/b/marcelm/fbsd-head/src/lib/libc/include -I/b/marcelm/fbsd-head/src/lib/libc/../../include -I/b/marcelm/fbsd-head/src/lib/libc/amd64 -DNLS -D__DBINTERFACE_PRIVATE -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/gdtoa -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/libc-vis -DINET6 -I/b/marcelm/fbsd-head/obj/amd64/lib/libc -I/b/marcelm/fbsd-head/src/lib/libc/resolv -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/jemalloc/include -I/b/marcelm/fbsd-head/src/lib/libc/../../contrib/tzcode/stdtime -I/b/marcelm/fbsd-head/src/lib/libc/stdtime -I/b/marcelm/fbsd-head/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN -I/b/marcelm/fbsd-head/src/lib/libc/rpc -DNS_CACHING -DSYMBOL_VERSIONING -D__ELF__ -Dunix -D__unix -D__unix__ -D__FreeBSD__=9 --sysroot /volume/sisyphus/occam/sysroot/projects_tp5/20131031.611483/amd64 -fno-builtin-printf -g -no s tdinc -isystem/b/marcelm/fbsd-head/obj/stage/amd64/usr/include -isystem/b/marcelm/fbsd-head/obj/stage/amd64/include -std=gnu99 -Wsystem-headers -Werror -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -I/b/marcelm/fbsd-head/src/lib/libutil -I/b/marcelm/fbsd-head/src/lib/msun/src -I/b/marcelm/fbsd-head/src/lib/msun/x86 -c
Re: Build failure due to block_abi.h
On Apr 4, 2014, at 4:13 PM, David Chisnall thera...@freebsd.org wrote: It turns out that tomorrow happened 12 minutes after this email... The attached diff lets it build with -Werror for me with FreeBSD clang and gcc (with -fblocks and -fno-blocks) and with ports gcc 4.7.3 and doesn't clutter the code. Please can you test it with Juniper's gcc? It compiles fine and I immediatelt applied the fix to Juniper's tree. Thanks for the quick turn-around! -- Marcel Moolenaar mar...@xcllnt.net signature.asc Description: Message signed with OpenPGP using GPGMail