I found that perhaps it is a MacOS-specific problem (I am not sure).<br><br>In Leopard:<br><br>#if __DARWIN_UNIX03<br>#define WEXITSTATUS(x)  ((_W_INT(x) >> 8) & 0x000000ff)<br>#else /* !__DARWIN_UNIX03 */<br>#define WEXITSTATUS(x)  (_W_INT(x) >> 8)<br>
#endif /* !__DARWIN_UNIX03 */<br><br>and _W_INT is defined as:<br><br>#if defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE)<br>#define _W_INT(i)   (i)<br>#else<br>#define _W_INT(w)   (*(int *)&(w))  /* convert union wait to int */<br>
...<br>#endif<br><br>(In Linux:<br><br>#define WEXITSTATUS(status)    __WEXITSTATUS(__WAIT_INT(status))<br><br>where __WAIT_INT is defined as:<br><br>#  if defined __GNUC__ && !defined __cplusplus<br>#   define __WAIT_INT(status)                                                 \<br>
  (__extension__ ({ union { __typeof(status) __in; int __i; } __u;            \<br>                    __u.__in = (status); __u.__i; }))<br>#  else<br>#   define __WAIT_INT(status)   (*(int *) &(status))<br>#  endif<br>
)<br><br>So the 250th line of vtc.c<br><br>
        assert(WEXITSTATUS(system(av[1])) == 0);<br>
<br>will be expanded as<br><br>
assert((*(int *)&(system(av[1]))) == 0);<br><br>and gcc reported that error.<br><br>Rewriting cmd_shell as follows solved the problem.<br><br>238 static void<br>239 cmd_shell(CMD_ARGS)<br>240 {<br>241     int sr;<br>
242     (void)priv;<br>243     (void)cmd;<br>244 <br>245     if (av == NULL)<br>246         return;<br>247     AN(av[1]);<br>248     AZ(av[2]);<br>249     vtc_dump(vl, 4, "shell", av[1]);<br>250 <br>251     sr = system(av[1]);<br>
252     assert(WEXITSTATUS(sr) == 0);<br>253 }<br><br><br><div class="gmail_quote">2009/3/6 Poul-Henning Kamp <span dir="ltr"><<a href="mailto:phk@phk.freebsd.dk">phk@phk.freebsd.dk</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
In message <<a href="mailto:de894c690903052342l170472cclf94ad23d13fc694a@mail.gmail.com">de894c690903052342l170472cclf94ad23d13fc694a@mail.gmail.com</a>>, 19191<br>
<div class="im">9 writes:<br>
<br>
>Making all in varnishtest<br>
>gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -I../../include    -g -O2 -MT<br>
>vtc.o -MD -MP -MF .deps/vtc.Tpo -c -o vtc.o vtc.c<br>
>vtc.c: In function 'cmd_shell':<br>
>vtc.c:250: error: invalid lvalue in unary '&'<br>
<br>
</div>critter phk> sed -n 250p vtc.c<br>
        assert(WEXITSTATUS(system(av[1])) == 0);<br>
<br>
I have no idea what the trouble is.<br>
<br>
As a first sanity-check, remove the vtc.c file and run "svn update"<br>
to make sure your local copy is not corrupt.<br>
<font color="#888888"><br>
--<br>
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20<br>
phk@FreeBSD.ORG         | TCP/IP since RFC 956<br>
FreeBSD committer       | BSD since 4.3-tahoe<br>
Never attribute to malice what can adequately be explained by incompetence.<br>
</font></blockquote></div><br>