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