From b265c11aae43a501e7cea84865fbc9f3120ad388 Mon Sep 17 00:00:00 2001 From: Mark Mitchell <mark@markmitchell.com> Date: Mon, 25 May 1998 18:20:09 +0000 Subject: [PATCH] * call.c (tourney): Don't do any extra comparisons. From-SVN: r20051 --- gcc/cp/ChangeLog | 2 ++ gcc/cp/call.c | 14 ++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 23b61d0e491d..02dbdcda1d2d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 1998-05-25 Mark Mitchell <mark@markmitchell.com> + * call.c (tourney): Don't do any extra comparisons. + * decl2.c (build_anon_union_vars): Don't crash on empty sub-unions. * cp-tree.h (processing_template_parmlist): Declare. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 01bb53fe089e..fb280ebf2bf7 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4389,6 +4389,7 @@ tourney (candidates) { struct z_candidate *champ = candidates, *challenger; int fate; + int champ_compared_to_predecessor = 0; /* Walk through the list once, comparing each current champ to the next candidate, knocking out a candidate or two with each comparison. */ @@ -4405,19 +4406,24 @@ tourney (candidates) champ = challenger->next; if (champ == 0) return 0; + champ_compared_to_predecessor = 0; } else - champ = challenger; + { + champ = challenger; + champ_compared_to_predecessor = 1; + } challenger = champ->next; } } /* Make sure the champ is better than all the candidates it hasn't yet - been compared to. This may do one more comparison than necessary. Oh - well. */ + been compared to. */ - for (challenger = candidates; challenger != champ; + for (challenger = candidates; + challenger != champ + && !(champ_compared_to_predecessor && challenger->next == champ); challenger = challenger->next) { fate = joust (champ, challenger, 0); -- GitLab