Re: [RFA/TESTSUITE] build schedlock.c on 64-bit platforms

Daniel Jacobowitz
2003-04-10T17:48:51Z

On Thu, Apr 10, 2003 at 01:45:34PM -0400, Andrew Cagney wrote:
> >Daniel Jacobowitz <drow@mvista.com> writes:
> >
> >|> On Thu, Apr 10, 2003 at 05:16:05PM +0200, Andreas Schwab wrote:
> >|> > Andrew Cagney <ac131313@redhat.com> writes:
> >|> >
> >|> > |> > args[i] = 1;
> >|> > |> >> - res = pthread_create(&threads[i], NULL, thread_function,
> >(void *)i);
> >|> > |> >>
> >|> > |>
> >|> > |> Try:
> >|> > |>
> >|> > |> (((char *) NULL) + i)
> >|> > |>
> >|> > |> and what ever the reverse of that is ....
> >|> >
> >|> > That is even less portable than the above.
> >|>
> >|> Really? What's non-portable about it?
> >
> >NULL is not an object, and the C standard does not define any meaning for
> >the above expression. On the other hand, the effect of a cast from
> >integer to pointer is implementation-defined (although it might trap).
>
> What about this then:
>
> static char *null_char_pointer = NULL;
>
> (null_char_pointer + i)
>
> and:
>
> (i - null_char_pointer)
>
> :-)

Also not defined, for the same reason. I believe the only pointer
outside of an object that's guaranteed to have any useful value is the
one which points just past the end of it.

--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer