Index: eval.c =================================================================== --- eval.c (revision 65) +++ eval.c (revision 68) @@ -512,7 +512,15 @@ evaluate_subexp_standard (struct type *e name, strlen (name)); if (regno == -1) error (_("Register $%s not available."), name); - if (noside == EVAL_AVOID_SIDE_EFFECTS) + + /* In EVAL_AVOID_SIDE_EFFECTS mode, we only need to return + a value with the appropriate register type. Unfortunately, + we don't have easy access to the type of user registers. + So for these registers, we fetch the register value regardless + of the evaluation mode. */ + if (noside == EVAL_AVOID_SIDE_EFFECTS + && regno < (gdbarch_num_regs (current_gdbarch) + + gdbarch_num_pseudo_regs (current_gdbarch))) val = value_zero (register_type (current_gdbarch, regno), not_lval); else val = value_of_register (regno, get_selected_frame (NULL)); Index: testsuite/gdb.base/ptype.exp =================================================================== --- testsuite/gdb.base/ptype.exp (revision 65) +++ testsuite/gdb.base/ptype.exp (revision 68) @@ -639,4 +639,7 @@ if [runto_main] then { gdb_test "ptype {{0,1,2},{3,4,5}}" "type = int \\\[2\\\]\\\[3\\\]" gdb_test "ptype {4,5,6}\[2\]" "type = int" gdb_test "ptype *&{4,5,6}\[1\]" "type = int" + + # Test ptype of user register + gdb_test "ptype \$pc" "void \\(\\*\\)\\(\\)" "ptype \$pc" }