diff --git a/tests/PathOpsOpCircleThreadedTest.cpp b/tests/PathOpsOpCircleThreadedTest.cpp
index 0ac492b..9358c0c 100644
--- a/tests/PathOpsOpCircleThreadedTest.cpp
+++ b/tests/PathOpsOpCircleThreadedTest.cpp
@@ -16,20 +16,19 @@
 
 static void testOpCirclesMain(PathOpsThreadState* data) {
         SkASSERT(data);
-    const SkPathFillType fts[] = { SkPathFillType::kWinding, SkPathFillType::kEvenOdd };
     PathOpsThreadState& state = *data;
     SkString pathStr;
     for (int a = 0 ; a < 6; ++a) {
         for (int b = a + 1 ; b < 7; ++b) {
             for (int c = 0 ; c < 6; ++c) {
                 for (int d = c + 1 ; d < 7; ++d) {
-                    for (auto e : fts) {
-    for (auto f : fts) {
+                    for (int e = SkPath::kWinding_FillType ; e <= SkPath::kEvenOdd_FillType; ++e) {
+    for (int f = SkPath::kWinding_FillType ; f <= SkPath::kEvenOdd_FillType; ++f) {
         SkPath pathA, pathB;
-        pathA.setFillType(e);
+        pathA.setFillType((SkPath::FillType) e);
         pathA.addCircle(SkIntToScalar(state.fA), SkIntToScalar(state.fB), SkIntToScalar(state.fC),
                 state.fD ? SkPathDirection::kCW : SkPathDirection::kCCW);
-        pathB.setFillType(f);
+        pathB.setFillType((SkPath::FillType) f);
         pathB.addCircle(SkIntToScalar(a), SkIntToScalar(b), SkIntToScalar(c),
                 d ? SkPathDirection::kCW : SkPathDirection::kCCW);
         for (int op = 0 ; op <= kXOR_SkPathOp; ++op)    {
@@ -37,13 +36,13 @@
                 pathStr.printf("static void circlesOp%d(skiatest::Reporter* reporter,"
                         " const char* filename) {\n", loopNo);
                 pathStr.appendf("    SkPath path, pathB;\n");
-                pathStr.appendf("    path.setFillType(SkPathFillType::k%s);\n",
-                        e == SkPathFillType::kWinding ? "Winding" : e == SkPathFillType::kEvenOdd
+                pathStr.appendf("    path.setFillType(SkPath::k%s_FillType);\n",
+                        e == SkPath::kWinding_FillType ? "Winding" : e == SkPath::kEvenOdd_FillType
                         ? "EvenOdd" : "?UNDEFINED");
                 pathStr.appendf("    path.addCircle(%d, %d, %d, %s);\n", state.fA, state.fB,
                         state.fC, state.fD ? "SkPathDirection::kCW" : "SkPathDirection::kCCW");
-                pathStr.appendf("    pathB.setFillType(SkPathFillType::k%s);\n",
-                        f == SkPathFillType::kWinding ? "Winding" : f == SkPathFillType::kEvenOdd
+                pathStr.appendf("    pathB.setFillType(SkPath::k%s_FillType);\n",
+                        f == SkPath::kWinding_FillType ? "Winding" : f == SkPath::kEvenOdd_FillType
                         ? "EvenOdd" : "?UNDEFINED");
                 pathStr.appendf("    pathB.addCircle(%d, %d, %d, %s);\n", a, b,
                         c, d ? "SkPathDirection::kCW" : "SkPathDirection::kCCW");
