+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * ax-gdb.c (gen_expr_binop_rest): Remove "pc" parameter.
+       (gen_expr_binop_rest): New overload.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * eval.c (eval_multi_subscript): New function.
 
 
 static void
 gen_expr_binop_rest (struct expression *exp,
-                    enum exp_opcode op, union exp_element **pc,
+                    enum exp_opcode op,
                     struct agent_expr *ax, struct axs_value *value,
                     struct axs_value *value1, struct axs_value *value2)
 {
   struct type *int_type = builtin_type (ax->gdbarch)->builtin_int;
 
-  gen_expr (exp, pc, ax, value2);
   gen_usual_unary (ax, value2);
   gen_usual_arithmetic (ax, value1, value2);
   switch (op)
                      _("gen_expr: op case sets don't match"));
     }
 }
+
+/* Variant of gen_expr_binop_rest that first generates the
+   right-hand-side.  */
+
+static void
+gen_expr_binop_rest (struct expression *exp,
+                    enum exp_opcode op, union exp_element **pc,
+                    struct agent_expr *ax, struct axs_value *value,
+                    struct axs_value *value1, struct axs_value *value2)
+{
+  gen_expr (exp, pc, ax, value2);
+  gen_expr_binop_rest (exp, op, ax, value, value1, value2);
+}
 \f
 
 /* Given a single variable and a scope, generate bytecodes to trace