On Aug 13, 2011, at 22:56 , Radford Neal wrote: > There seems to be a latent flaw in the definition of struct SEXPREC > in Rinternals.h, which likely doesn't cause problems now, but could > if the relative sizes of data types changes. > > The SEXPREC structure contains a union that includes a primsxp, > symsxp, etc, but not a vecsxp. However, in allocVector in memory.c, > zero-length vectors are allocated using allocSExpNonCons, which > appears to allocates a SEXPREC structure. This won't work if a vecsxp > is larger than the other types that are in the union in the SEXPREC > structure. > > Simply adding a vecsxp to the union would seem to fix this, as in > the following patch:
But the whole point of separating VECTOR_SEXPREC from the other SEXPRECs is that they are _shorter_. A vecsxp is only going to be larger than (say) an envsxp if 2 R_len_t's are more than 3 pointers, which is quite unlikely since R_len_t variables holds things that one might add to pointers. NOT having vecsxp in the SEXPREC union prevents programmers from mistakingly using SEXP* where VECSXP* should have been used. Since the distinction wasn't always there, I suspect that flagging usage of x->u.vecsxp.length by the compiler was rather important at some point in time. > > Index: src/include/Rinternals.h > =================================================================== > --- src/include/Rinternals.h (revision 56640) > +++ src/include/Rinternals.h (working copy) > @@ -219,6 +219,7 @@ > typedef struct SEXPREC { > SEXPREC_HEADER; > union { > + struct vecsxp_struct vecsxp; > struct primsxp_struct primsxp; > struct symsxp_struct symsxp; > struct listsxp_struct listsxp; > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd....@cbs.dk Priv: pda...@gmail.com "Døden skal tape!" --- Nordahl Grieg ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel