diff --git a/skcms.cc b/skcms.cc
index b7aaee4..84da16f 100644
--- a/skcms.cc
+++ b/skcms.cc
@@ -1750,8 +1750,6 @@
 // ~~~~ Impl. of skcms_Transform() ~~~~
 
 typedef enum {
-    Op_noop,
-
     Op_load_a8,
     Op_load_g8,
     Op_load_4444,
@@ -1976,9 +1974,11 @@
         { Op_tf_a, Op_table_8_a, Op_table_16_a },
     };
 
+    const OpAndArg noop = { Op_load_a8/*doesn't matter*/, nullptr };
+
     if (curve->table_entries == 0) {
         return is_identity_tf(&curve->parametric)
-            ? OpAndArg{ Op_noop, nullptr }
+            ? noop
             : OpAndArg{ ops[channel].parametric, &curve->parametric };
     } else if (curve->table_8) {
         return OpAndArg{ ops[channel].table_8,  curve };
@@ -1987,7 +1987,7 @@
     }
 
     assert(false);
-    return OpAndArg{Op_noop,nullptr};
+    return noop;
 }
 
 static size_t bytes_per_pixel(skcms_PixelFormat fmt) {
@@ -2121,7 +2121,7 @@
             if (srcProfile->A2B.input_channels) {
                 for (int i = 0; i < (int)srcProfile->A2B.input_channels; i++) {
                     OpAndArg oa = select_curve_op(&srcProfile->A2B.input_curves[i], i);
-                    if (oa.op != Op_noop) {
+                    if (oa.arg) {
                         *ops++  = oa.op;
                         *args++ = oa.arg;
                     }
@@ -2139,7 +2139,7 @@
             if (srcProfile->A2B.matrix_channels == 3) {
                 for (int i = 0; i < 3; i++) {
                     OpAndArg oa = select_curve_op(&srcProfile->A2B.matrix_curves[i], i);
-                    if (oa.op != Op_noop) {
+                    if (oa.arg) {
                         *ops++  = oa.op;
                         *args++ = oa.arg;
                     }
@@ -2159,7 +2159,7 @@
             if (srcProfile->A2B.output_channels == 3) {
                 for (int i = 0; i < 3; i++) {
                     OpAndArg oa = select_curve_op(&srcProfile->A2B.output_curves[i], i);
-                    if (oa.op != Op_noop) {
+                    if (oa.arg) {
                         *ops++  = oa.op;
                         *args++ = oa.arg;
                     }
@@ -2173,7 +2173,7 @@
         } else if (srcProfile->has_trc && srcProfile->has_toXYZD50) {
             for (int i = 0; i < 3; i++) {
                 OpAndArg oa = select_curve_op(&srcProfile->trc[i], i);
-                if (oa.op != Op_noop) {
+                if (oa.arg) {
                     *ops++  = oa.op;
                     *args++ = oa.arg;
                 }
diff --git a/src/Transform_inl.h b/src/Transform_inl.h
index f89c312..24c725b 100644
--- a/src/Transform_inl.h
+++ b/src/Transform_inl.h
@@ -590,8 +590,6 @@
     F r = F0, g = F0, b = F0, a = F1;
     while (true) {
         switch (*ops++) {
-            case Op_noop: break;
-
             case Op_load_a8:{
                 a = F_from_U8(load<U8>(src + 1*i));
             } break;
