@@ -55,34 +55,21 @@ static bool canExprResolveTo(const Expr *Source, const Expr *Target) {
5555 // This is matched by `IgnoreDerivedToBase(canResolveToExpr(InnerMatcher))`
5656 // below.
5757 const auto ConditionalOperatorM = [Target](const Expr *E) {
58- if (const auto *OP = dyn_cast<ConditionalOperator>(E)) {
59- if (const auto *TE = OP->getTrueExpr ()->IgnoreParens ())
60- if (canExprResolveTo (TE, Target))
61- return true ;
62- if (const auto *FE = OP->getFalseExpr ()->IgnoreParens ())
63- if (canExprResolveTo (FE, Target))
64- return true ;
65- }
66- return false ;
67- };
68-
69- const auto ElvisOperator = [Target](const Expr *E) {
70- if (const auto *OP = dyn_cast<BinaryConditionalOperator>(E)) {
71- if (const auto *TE = OP->getTrueExpr ()->IgnoreParens ())
72- if (canExprResolveTo (TE, Target))
73- return true ;
74- if (const auto *FE = OP->getFalseExpr ()->IgnoreParens ())
75- if (canExprResolveTo (FE, Target))
76- return true ;
58+ if (const auto *CO = dyn_cast<AbstractConditionalOperator>(E)) {
59+ const auto *TE = CO->getTrueExpr ()->IgnoreParens ();
60+ if (TE && canExprResolveTo (TE, Target))
61+ return true ;
62+ const auto *FE = CO->getFalseExpr ()->IgnoreParens ();
63+ if (FE && canExprResolveTo (FE, Target))
64+ return true ;
7765 }
7866 return false ;
7967 };
8068
8169 const Expr *SourceExprP = Source->IgnoreParens ();
8270 return IgnoreDerivedToBase (SourceExprP,
8371 [&](const Expr *E) {
84- return E == Target || ConditionalOperatorM (E) ||
85- ElvisOperator (E);
72+ return E == Target || ConditionalOperatorM (E);
8673 }) ||
8774 EvalCommaExpr (SourceExprP, [&](const Expr *E) {
8875 return IgnoreDerivedToBase (
0 commit comments