OK.
On Mon, Mar 5, 2018 at 3:31 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > This doesn't actually fix this PR (Marek is working on that), but > just something I've noticed while analyzing the PR. > We have the hashes saved in the structure (to speed up hash table > expansion), so it is a waste not to test those also in the equal hook, > by giving up cheaply in cases of hash table collisions. > > Additionally, the method returns bool, so this patch uses true/false > instead of 1/0. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2018-03-05 Jakub Jelinek <ja...@redhat.com> > > PR c++/84684 > * constexpr.c (constexpr_call_hasher::equal): Return false if > lhs->hash != rhs->hash. Change return 1 to return true and > return 0 to return false. > > --- gcc/cp/constexpr.c.jj 2018-03-05 16:11:08.510165108 +0100 > +++ gcc/cp/constexpr.c 2018-03-05 16:14:06.130229884 +0100 > @@ -1033,9 +1033,11 @@ constexpr_call_hasher::equal (constexpr_ > tree lhs_bindings; > tree rhs_bindings; > if (lhs == rhs) > - return 1; > + return true; > + if (lhs->hash != rhs->hash) > + return false; > if (!constexpr_fundef_hasher::equal (lhs->fundef, rhs->fundef)) > - return 0; > + return false; > lhs_bindings = lhs->bindings; > rhs_bindings = rhs->bindings; > while (lhs_bindings != NULL && rhs_bindings != NULL) > @@ -1044,7 +1046,7 @@ constexpr_call_hasher::equal (constexpr_ > tree rhs_arg = TREE_VALUE (rhs_bindings); > gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg)); > if (!cp_tree_equal (lhs_arg, rhs_arg)) > - return 0; > + return false; > lhs_bindings = TREE_CHAIN (lhs_bindings); > rhs_bindings = TREE_CHAIN (rhs_bindings); > } > > Jakub