On Sat, Oct 31, 2020 at 10:09:32AM +0000, Iain Sandoe wrote: > Hi Marek, > > Marek Polacek via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > > On Wed, Oct 28, 2020 at 02:46:36PM -0400, Jason Merrill wrote: > >> On 10/28/20 2:00 PM, Marek Polacek wrote: > >>> On Tue, Oct 27, 2020 at 01:36:30PM -0400, Jason Merrill wrote: > >>>> On 10/24/20 6:52 PM, Marek Polacek wrote: > >>>>> Here, in r11-155, I changed the call to uses_template_parms to > >>>>> type_dependent_expression_p_push to avoid a crash in C++98 in > >>>>> value_dependent_expression_p on a non-constant expression. But that > >>>>> prompted a host of complaints that we now warn for value-dependent > >>>>> expressions in templates. Those warnings are technically valid, but > >>>>> people still don't want them because they're awkward to avoid. So let's > >>>>> partially revert my earlier fix and make sure that we don't ICE in > >>>>> value_dependent_expression_p by checking potential_constant_expression > >>>>> first. > >>>>> > >>>>> Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk/10? > >>>>> > >>>>> gcc/cp/ChangeLog: > >>>>> > >>>>> PR c++/96675 > >>>>> PR c++/96742 > >>>>> * pt.c (tsubst_copy_and_build): Call uses_template_parms > >>>>> instead of > >>>>> type_dependent_expression_p_push. Only call uses_template_parms > >>>>> for expressions that are potential_constant_expression. > >>>>> > >>>>> gcc/testsuite/ChangeLog: > >>>>> > >>>>> PR c++/96675 > >>>>> PR c++/96742 > >>>>> * g++.dg/warn/Wdiv-by-zero-3.C: Turn dg-warning into dg-bogus. > >>>>> * g++.dg/warn/Wtautological-compare3.C: New test. > >>>>> * g++.dg/warn/Wtype-limits5.C: New test. > >>>>> * g++.old-deja/g++.pt/crash10.C: Remove dg-warning. > >>>>> — > > > >>> Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk/10? > >> > >> OK. > > > > Thanks, > > This regresses Objective-C++ template-4.mm with an ICE (because we don’t have > a > check for message_send_expr, which can’t be constexpr).
Sorry for failing to test Objective-C++ properly. > I am testing the following fix (which is mostly Objective-C-local), but open > to alternate > solutions. Personally, I prefer to avoid double-negatives in code but > because of the > fallthrough to the sorry case, it seems hard to avoid. > > OK for master if testing is sucessful? > (I assume we will also need to do the same on 10.x if you backported already) > > cheers > Iain > > ======== > > [PATCH] Objective-C++ : Fix ICE in potential_constant_expression_1. > > We cannot, as things stand, handle Objective-C tree codes in > the switch and deal with this by calling out to a function that > has a dummy version when Objective-C is not enabled. > > Because of the way the logic works (with a fall through to a > 'sorry' in case of unhandled expressions), the function reports > cases that are known to be unsuitable for constant exprs. The > dummy function always reports 'false' and thus will fall through > to the 'sorry'. > > gcc/c-family/ChangeLog: > > * c-objc.h (objc_non_constant_expr_p): New. > * stub-objc.c (objc_non_constant_expr_p): New. > > gcc/cp/ChangeLog: > > * constexpr.c (potential_constant_expression_1): Handle > expressions known to be non-constant for Objective-C. > > gcc/objc/ChangeLog: > > * objc-act.c (objc_non_constant_expr_p): New. > --- > gcc/c-family/c-objc.h | 1 + > gcc/c-family/stub-objc.c | 6 ++++++ > gcc/cp/constexpr.c | 2 +- > gcc/objc/objc-act.c | 16 +++++++++++++++- > 4 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/gcc/c-family/c-objc.h b/gcc/c-family/c-objc.h > index 6025283e5cf..4577e4f1c7f 100644 > --- a/gcc/c-family/c-objc.h > +++ b/gcc/c-family/c-objc.h > @@ -101,6 +101,7 @@ extern void objc_add_synthesize_declaration (location_t, > tree); > extern void objc_add_dynamic_declaration (location_t, tree); > extern const char * objc_maybe_printable_name (tree, int); > extern bool objc_is_property_ref (tree); > +extern bool objc_non_constant_expr_p (tree); > extern bool objc_string_ref_type_p (tree); > extern void objc_check_format_arg (tree, tree); > extern void objc_finish_function (void); > diff --git a/gcc/c-family/stub-objc.c b/gcc/c-family/stub-objc.c > index c30f0b3c67d..9ced68b2b3e 100644 > --- a/gcc/c-family/stub-objc.c > +++ b/gcc/c-family/stub-objc.c > @@ -331,6 +331,12 @@ objc_is_property_ref (tree ARG_UNUSED (node)) > return 0; > } > > +bool > +objc_non_constant_expr_p (tree ARG_UNUSED (node)) In new code we can just omit the name of the parameter: (tree) I have no other comments otherwise. I think you can go ahead with this change. Thanks. Marek