This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]