Re: [PATCH] C undefined behavior fix

Jakub Jelinek (jakub@redhat.com)
Sun, 6 Jan 2002 23:19:40 +0100


On Mon, Jan 07, 2002 at 08:59:47AM +1100, Paul Mackerras wrote:
> Gabriel Dos Reis writes:
>
> > Personnally, I don't have any sentiment against the assembler
> > solution. Dewar said it was unnecessarily un-portable, but that the
> > construct by itself *is* already unportable.
>
> I assume that what we're talking about is using an asm statement like:
>
> asm("" : "=r" (x) : "0" (y));
>
> to make the compiler treat x as a pointer that it knows nothing about,
> given a pointer y that the compiler does know something about. For
> example, y might be (char *)((unsigned long)"foo" + offset).
>
> My main problem with this is that it doesn't actually solve the
> problem AFAICS. Dereferencing x is still undefined according to the
> rules in the gcc manual.
>
> Thus, although this would make the problems go away at the moment,
> they will come back at some time in the future, e.g. when gcc learns
> to analyse asm statements and realises that the asm is just doing
> x = y. I would prefer a solution that will last, rather than one
> which relies on details of the current gcc implementation.

Even if gcc learned to analyze asm statements (and use it in something other
than scheduling), I'm sure this wouldn't be optimized away exactly because
this construct is used by various projects exactly for this purpose (make
gcc think it can have any value allowed for the type in question).

Jakub
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/