This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: subreg question
On Thu, Dec 13, 2001 at 12:21:33PM -0800, Dale Johannesen wrote:
>
> On Thursday, December 13, 2001, at 10:16 AM, Aldy Hernandez wrote:
>
> >>>>>>"Dale" == Dale Johannesen <dalej@apple.com> writes:
> >
> >>What cases of subreg are supposed to be handled exactly?
> >>double x(float y) {
> >> double z;
> >> *((float *)&z) = y; <-- boo!
> >> return z; }
> >
> >i believe this is invalid code, hence implementation dependent. You
> >can't access an lvalue as a different type as it was declared.
>
> I don't see why not. (C89) 3.3.4 says the cast might produce an invalid
> pointer if it's not aligned properly, which is not the case here.
> Other than that I don't find any relevant restriction in the standard.
> What did you have in mind?
> (FWIW, gcc doesn't warn about this even with -pedantic.)
It's not an invalid pointer. It doesn't alias with Z, though. That
assignment does not define Z, but only clobbers some memory. You don't
get a warning because no one ever wrote the warning code for alias
violations; but this returns an undefined value, not y.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer