Build failure due to block_abi.h

2014-04-04 Thread Marcel Moolenaar
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

2014-04-04 Thread David Chisnall
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

2014-04-04 Thread David Chisnall
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

2014-04-04 Thread Marcel Moolenaar

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