+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * rust-lang.c (eval_op_rust_complement): New function.
+       (rust_evaluate_subexp): Use it.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * rust-lang.c (eval_op_rust_ind): New function.
 
   return value_ind (value);
 }
 
+/* A helper function for UNOP_COMPLEMENT.  */
+
+static struct value *
+eval_op_rust_complement (struct type *expect_type, struct expression *exp,
+                        enum noside noside,
+                        struct value *value)
+{
+  if (noside == EVAL_SKIP)
+    {
+      /* Preserving the type is enough.  */
+      return value;
+    }
+  if (value_type (value)->code () == TYPE_CODE_BOOL)
+    return value_from_longest (value_type (value), value_logical_not (value));
+  return value_complement (value);
+}
+
 /* evaluate_exp implementation for Rust.  */
 
 static struct value *
 
        ++*pos;
        value = evaluate_subexp (nullptr, exp, pos, noside);
-       if (noside == EVAL_SKIP)
-         {
-           /* Preserving the type is enough.  */
-           return value;
-         }
-       if (value_type (value)->code () == TYPE_CODE_BOOL)
-         result = value_from_longest (value_type (value),
-                                      value_logical_not (value));
-       else
-         result = value_complement (value);
+       result = eval_op_rust_complement (expect_type, exp, noside, value);
       }
       break;