[PATCH] libstdc++: store the length after the store of the null character

Jakub Jelinek jakub@redhat.com
Wed Nov 19 13:03:44 GMT 2025


On Wed, Nov 19, 2025 at 02:00:03PM +0100, Jakub Jelinek wrote:
> On Wed, Nov 19, 2025 at 01:49:39PM +0100, Richard Biener wrote:
> > Then, there is DECL_NONADDRESSABLE_P on a FIELD_DECL which for,
> > say
> > 
> >   struct{
> >     int len;
> >     char *data;
> >   };
> > 
> > could say that 'len' cannot have its address taken and thus the 'data' member
> > cannot point to it.  Not sure if it's possible to take the address of
> > the length field
> > of a std::string though, this mechanism isn't specific enough to only disallow
> > 'data' from pointing to 'len'.  DECL_NONADDRESSABLE_P is used by Ada
> > (as is TYPE_NONALIASED_COMPONENT).
> 
> Makes me wonder if we couldn't set DECL_NONADDRESSABLE_P on private
> FIELD_DECLs in classes where none of the methods take address of it and
> either it doesn't have friends, or none of the friends take address of it
> either.  Though, I guess C++26 reflection breaks that assumption, one can
> always use
> &the_class_obj.[: std::meta::members_of (^^the_class, std::meta::access_context::unchecked ())[N] :]
> to bypass the access checking and still take the address of it.

Though perhaps that could be handled by clearing the DECL_NONADDRESSABLE_P
flag again if that FIELD_DECL is spliced.

	Jakub



More information about the Libstdc++ mailing list