-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 12 2 111
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 11 3 112
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 10 4 113
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 9 5 114
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 8 6 115
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 7 7 116
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 6 8 117
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 5 9 118
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 4 10 119
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 3 11 120
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 2 12 121
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 13 13 110
+unset -nocomplain line types
+foreach type $all_types {
+ # TYPES is an array that maps the synthetic names in ALL_TYPES
+ # to the real type used in the debugger. These will be checked
+ # below and changed if the debugger thinks they are different from
+ # their default values.
+ set types($type) [join [split $type "_"] " "]
+
+ # LINE is an array that will map from synthetic type to line number.
+ # in the source code.
+ set line($type) [gdb_get_line_number "fo1 $type"]
+
+ # Probe for the actual type.
+ gdb_test_multiple "print &foo::overload1arg($types($type))" \
+ "probe $types($type)" {
+ -re ".*\<foo::.*\>.*$gdb_prompt $" {
+ regexp {<.*>} $expect_out(0,string) func
+ regexp {\(.*\)} $func real_type
+
+ # Store the real type into TYPES.
+ set types($type) [string trim $real_type {()}]
+
+ # Create an inverse mapping of the actual type to
+ # the synthetic type.
+ set type_map("$types($type)") $type
+ pass "detect $type"
+ }
+ }
+}