On Thu, Feb 03, 2022 at 04:04:57PM -0500, Jason Merrill wrote:
> > > I think it would be clearer to leave the !DECL_P case alone and add
> > > 
> > > /* In C++ it is unspecified, and so non-constant, whether two
> > >     equivalent strings have the same address.  */
> > > else if (folding_cxx_constexpr
> > >           && (TREE_CODE (base0) == STRING_CST
> > >               || TREE_CODE (base1) == STRING_CST)
> > 
> > The point was to let the first if handle for
> > !folding_cxx_constexpr the cases with STRING_CST
> > as one or both operands and if that falls through, return 2.
> 
> Ah, I see.  And then for folding_cxx_constexpr you have your new code toward
> the bottom of the function that can say they're unequal in some cases.  Can
> you combine the STRING_CST handling for both values of folding_cxx_constexpr
> instead of having them so far apart?

Not easily, because for the folding_cxx_constexpr case it primarily reuses
the code from the last else if - computing sizes of objects and checking
if one is at a start of one and another at the end of the other.

One further option would be to compute early flags like
  enum { OFF_POS_START, OFF_POS_MIDDLE, OFF_POS_END } pos0, pos1;
and then just use them or ignore them in the decisions later.

        Jakub

Reply via email to