On Thu, Jul 24, 2025 at 01:16:24PM -0400, Jason Merrill wrote:
> On 7/24/25 8:40 AM, Nathaniel Shead wrote:
> > On Thu, Jul 24, 2025 at 09:02:24PM +1000, Nathaniel Shead wrote:
> > > On Tue, Jul 08, 2025 at 12:51:37PM -0400, Jason Merrill wrote:
> > > > I'm resistant to moving functions around unnecessarily, as it makes git
> > > > change tracking a lot harder.  Especially when it means moving a 
> > > > function to
> > > > a file that's already 4x the size of the one you're moving it from.
> > > > 
> > > > Instead, I would prefer to add maybe_diagnose_standard_trait to
> > > > constraint.cc.
> > > > 
> > > > v4 is OK with that adjustment.
> > > > 
> > > > Jason
> > > > 
> > > 
> > > Fair enough, adjusted.
> > > 
> > > I've been away a few weeks, and there were a number of merge conflicts I
> > > had to resolve first so posting again in case you'd like to re-review
> > > before I submit.
> > > 
> > > I also ran into an ICE for an adjusted libstdc++ testcase which I added
> > > a testcase for in 'is_destructible3', because it turns out that call
> > > resolution behaves differently with 'complain & tf_error' and will not
> > > always return 'error_mark_node', which comes up with e.g. access
> > > violations.
> > > 
> > > I suppose this is to enable further diagnostics to occur when not in a
> > > SFINAE context?
> 
> Right; if it seems reasonable to continue after an error we often try to do
> so to also check later code.
> 
> > > Rather than adjusting call.cc I've adjusted
> > > 'is_trivially_xible' and 'is_nothrow_xible' to handle this on that end
> > > instead, let me know if you have any other thoughts here.
> 
> > @@ -2327,7 +2350,24 @@ constructible_expr (tree to, tree from)
> >       CONSTRUCTOR_IS_PAREN_INIT (from) = true;
> >       expr = perform_direct_initialization_if_possible (to, from,
> >                                                         /*cast*/false,
> > -                                                       tf_none);
> > +                                                       complain);
> > +   }
> > +
> > +      if (expr == NULL_TREE && explain)
> > +   {
> > +     if (len > 1)
> > +       error ("too many initializers for non-class type %qT", to);
> > +     else
> > +       {
> > +         /* Redo the implicit conversion for diagnostics.  */
> > +         int count = errorcount + warningcount;
> > +         perform_implicit_conversion_flags (to, orig_from, complain,
> > +                                            LOOKUP_NORMAL);
> > +         if (count == errorcount + warningcount)
> > +           /* The message may have been suppressed due to -w + 
> > -fpermissive,
> > +              emit a generic response instead.  */
> 
> We might suppress -fpermissive here (or higher, perhaps in
> diagnose_trait_expr?) for a better diagnostic, since we know we're already
> giving an error?
> 
> OK either way.
> 
> Jason
> 

Thanks for the idea; I've elected not to suppress it for now because it
could cause confusion if it raises a different error from the actual
error causing the trait to fail in the user's context.  I might come
back to this later though, I have a few more changes in this area I'd
like to make.

Nathaniel

Reply via email to