Traverse InitListExpr only once

Arbitrarily chosing to traverse the semantic instead of the syntactic form.

Change-Id: Id1b4e49421a5550bb2fa9f0d7e6f83bf7abb6ebb
diff --git a/compilerplugins/clang/redundantcast.cxx b/compilerplugins/clang/redundantcast.cxx
index 6a554a7..4ffef35 100644
--- a/compilerplugins/clang/redundantcast.cxx
+++ b/compilerplugins/clang/redundantcast.cxx
@@ -79,6 +79,15 @@ public:
        }
    }

    bool TraverseInitListExpr(
        InitListExpr * expr, DataRecursionQueue * queue = nullptr)
    {
        return WalkUpFromInitListExpr(expr)
            && TraverseSynOrSemInitListExpr(
                expr->isSemanticForm() ? expr : expr->getSemanticForm(),
                queue);
    }

    bool VisitImplicitCastExpr(ImplicitCastExpr const * expr);

    bool VisitCXXStaticCastExpr(CXXStaticCastExpr const * expr);