[gdb/f17] Fix "ambiguous linespec" regression: break lineno.

Jan Kratochvil jankratochvil at fedoraproject.org
Thu Sep 27 20:24:27 UTC 2012


commit 765eea176bd6ec1fb7eb534f696684480f83e4c9
Author: Jan Kratochvil <jan.kratochvil at redhat.com>
Date:   Thu Sep 27 22:24:18 2012 +0200

    Fix "ambiguous linespec" regression: break lineno.
    
    - Permit passing pointers as address number even for C++ methods (Keith Seitz).

 gdb-break-lineno.patch |   78 ++++
 gdb-check-type.patch   |  990 ++++++++++++++++++++++++++++++++++++++++++++++++
 gdb.spec               |   14 +-
 3 files changed, 1081 insertions(+), 1 deletions(-)
---
diff --git a/gdb-break-lineno.patch b/gdb-break-lineno.patch
new file mode 100644
index 0000000..108eb6f
--- /dev/null
+++ b/gdb-break-lineno.patch
@@ -0,0 +1,78 @@
+http://sourceware.org/ml/gdb-cvs/2012-06/msg00077.html
+
+### src/gdb/ChangeLog	2012/06/11 18:44:58	1.14345
+### src/gdb/ChangeLog	2012/06/11 19:16:21	1.14346
+## -1,3 +1,10 @@
++2012-06-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
++
++	Fix regression by the "ambiguous linespec" series.
++	* breakpoint.c (parse_breakpoint_sals): New variable cursal.  Use
++	get_last_displayed_symtab and get_last_displayed_line and depending
++	on CURSAL.
++
+ 2012-06-11  Tom Tromey  <tromey at redhat.com>
+ 
+ 	* dwarf2read.c (dw2_get_primary_filename_reader): New function.
+--- src/gdb/breakpoint.c	2012/06/05 19:50:50	1.679
++++ src/gdb/breakpoint.c	2012/06/11 19:16:23	1.680
+@@ -8802,19 +8802,26 @@
+     }
+   else
+     {
++      struct symtab_and_line cursal = get_current_source_symtab_and_line ();
++
+       /* Force almost all breakpoints to be in terms of the
+          current_source_symtab (which is decode_line_1's default).
+          This should produce the results we want almost all of the
+-         time while leaving default_breakpoint_* alone.  */
+-      if (last_displayed_sal_is_valid ())
++         time while leaving default_breakpoint_* alone.
++
++	 ObjC: However, don't match an Objective-C method name which
++	 may have a '+' or '-' succeeded by a '['.  */
++      if (last_displayed_sal_is_valid ()
++	  && (!cursal.symtab
++	      || ((strchr ("+-", (*address)[0]) != NULL)
++		  && ((*address)[1] != '['))))
+ 	decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
+ 			  get_last_displayed_symtab (),
+ 			  get_last_displayed_line (),
+ 			  canonical, NULL, NULL);
+       else
+ 	decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
+-			  (struct symtab *) NULL, 0,
+-			  canonical, NULL, NULL);
++			  cursal.symtab, cursal.line, canonical, NULL, NULL);
+     }
+ }
+ 
+### src/gdb/testsuite/ChangeLog	2012/06/11 17:44:06	1.3220
+### src/gdb/testsuite/ChangeLog	2012/06/11 19:16:24	1.3221
+## -1,5 +1,11 @@
+ 2012-06-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+ 
++	Fix regression by the "ambiguous linespec" series.
++	* gdb.base/break.exp (list marker1, break lineno, delete $bpnum): New
++	tests.
++
++2012-06-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
++
+ 	* lib/future.exp: Set $use_gdb_compile even if only find_go_linker is
+ 	missing.
+ 
+--- src/gdb/testsuite/gdb.base/break.exp	2012/04/05 18:50:28	1.55
++++ src/gdb/testsuite/gdb.base/break.exp	2012/06/11 19:16:24	1.56
+@@ -371,6 +371,13 @@
+     }
+ }
+ 
++# Test the 'list' commands sets current file for the 'break LINENO' command.
++set bp_marker1 [gdb_get_line_number "set breakpoint 16 here" ${srcfile1}]
++gdb_test "list marker1" ".*"
++gdb_test "break $bp_marker1" "Breakpoint \[0-9\]+ at 0x\[0-9a-f\]+: file .*${srcfile1}, line ${bp_marker1}\\." \
++         "break lineno"
++gdb_test_no_output {delete $bpnum}
++
+ #
+ # run until the breakpoint at a line number
+ #
diff --git a/gdb-check-type.patch b/gdb-check-type.patch
new file mode 100644
index 0000000..da73d20
--- /dev/null
+++ b/gdb-check-type.patch
@@ -0,0 +1,990 @@
+http://sourceware.org/ml/gdb-cvs/2012-08/msg00133.html
+
+### src/gdb/ChangeLog	2012/08/17 03:06:10	1.14599
+### src/gdb/ChangeLog	2012/08/17 17:36:56	1.14600
+## -1,3 +1,48 @@
++2012-08-17  Keith Seitz  <keiths at redhat.com>
++
++	PR c++/13356
++	* gdbtypes.c (strict_type_checking): New variable.
++	(show_strict_type_checking): New function.
++	(rank_one_type): Return NS_POINTER_INTEGER_CONVERSION_BADNESS
++	if strict type checking is disabled.
++	(_initialize_gdbtypes): Add "check type" subcommand.
++	* gdbtypes.h (NS_INTEGER_POINTER_CONVERSION_BADNESS): New struct.
++
++2012-08-17  Keith Seitz  <keiths at redhat.com>
++
++	* language.h (type_mode): Remove.
++	(type_check): Remove.
++	(struct language_defn): Remove la_type_check.
++	(STRICT_TYPE): Remove unused macro.
++	(type_error): Remove.
++	* language.c (set_type_range_case): Renamed to ...
++	(set_range_case): ... this.  Update all callers.
++	Remove type_mode/type_check.
++	(type_mode): Remove.
++	(type_check): Remove.
++	(show_type_command): Remove.
++	(set_type_command): Remove.
++	(language_info): Remove type checking output.
++	(type_error): Remove unused function.
++	(range_error): Update comment.
++	(unknown_language_defn): Remove la_type_check.
++	(auto_language_defn): Likewise.
++	(local_language_defn): Likewise.
++	(_initialize_language): Remove "check type" subcommand.
++	* ada-lang.c (ada_language_defn): Remove la_type_check.
++	* c-lang.c (c_language_defn): Likewise.
++	(cplus_language_defn): Likewise.
++	(asm_language_defn): Likewise.
++	(minimal_language_defn): Likewise.
++	* d-lang.c (d_language_defn): Likewise.
++	* f-lang.c (f_language_defn): Likewise.
++	* go-lang.c (go_language_defn): Likewise.
++	* jv-lang.c (java_language_defn): Likewise.
++	* m2-lang.c (m2_language_defn): Likewise.
++	* objc-lang.c (objc_language_defn): Likewise.
++	* opencl-lang.c (opencl_language_defn): Likewise.
++	* p-lang.c (pascal_language_defn): Likewise.
++
+ 2012-08-16  Mike Frysinger  <vapier at gentoo.org>
+ 
+ 	* infcmd.c (_initialize_infcmd): Remove trailing ) in next help text.
+Index: gdb-7.4.50.20120120/gdb/gdbtypes.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/gdbtypes.c	2012-09-27 22:08:02.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/gdbtypes.c	2012-09-27 22:10:37.453588076 +0200
+@@ -62,6 +62,7 @@ const struct rank BASE_CONVERSION_BADNES
+ const struct rank REFERENCE_CONVERSION_BADNESS = {2,0};
+ const struct rank NULL_POINTER_CONVERSION_BADNESS = {2,0};
+ const struct rank NS_POINTER_CONVERSION_BADNESS = {10,0};
++const struct rank NS_INTEGER_POINTER_CONVERSION_BADNESS = {3,0};
+ 
+ /* Floatformat pairs.  */
+ const struct floatformat *floatformats_ieee_half[BFD_ENDIAN_UNKNOWN] = {
+@@ -134,6 +135,19 @@ show_overload_debug (struct ui_file *fil
+ 		    value);
+ }
+ 
++/* A flag to enable strict type checking.  */
++
++static int strict_type_checking = 1;
++
++/* A function to show the status of strict type checking.  */
++
++static void
++show_strict_type_checking (struct ui_file *file, int from_tty,
++			   struct cmd_list_element *c, const char *value)
++{
++  fprintf_filtered (file, _("Strict type checking is %s.\n"), value);
++}
++
+ struct extra
+   {
+     char str[128];
+@@ -2619,12 +2633,20 @@ rank_one_type (struct type *parm, struct
+ 	case TYPE_CODE_FUNC:
+ 	  return rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL);
+ 	case TYPE_CODE_INT:
+-	  if (value != NULL && TYPE_CODE (value_type (value)) == TYPE_CODE_INT
+-	      && value_as_long (value) == 0)
++	  if (value != NULL && TYPE_CODE (value_type (value)) == TYPE_CODE_INT)
+ 	    {
+-	      /* Null pointer conversion: allow it to be cast to a pointer.
+-		 [4.10.1 of C++ standard draft n3290]  */
+-	      return NULL_POINTER_CONVERSION_BADNESS;
++	      if (value_as_long (value) == 0)
++		{
++		  /* Null pointer conversion: allow it to be cast to a pointer.
++		     [4.10.1 of C++ standard draft n3290]  */
++		  return NULL_POINTER_CONVERSION_BADNESS;
++		}
++	      else
++		{
++		  /* If type checking is disabled, allow the conversion.  */
++		  if (!strict_type_checking)
++		    return NS_INTEGER_POINTER_CONVERSION_BADNESS;
++		}
+ 	    }
+ 	  /* fall through  */
+ 	case TYPE_CODE_ENUM:
+@@ -4597,4 +4619,13 @@ _initialize_gdbtypes (void)
+ 			   NULL, NULL,
+ 			   show_opaque_type_resolution,
+ 			   &setlist, &showlist);
++
++  /* Add an option to permit non-strict type checking.  */
++  add_setshow_boolean_cmd ("type", class_support,
++			   &strict_type_checking,
++			   _("Set strict type checking."),
++			   _("Show strict type checking."),
++			   NULL, NULL,
++			   show_strict_type_checking,
++			   &setchecklist, &showchecklist);
+ }
+Index: gdb-7.4.50.20120120/gdb/gdbtypes.h
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/gdbtypes.h	2012-09-27 22:08:10.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/gdbtypes.h	2012-09-27 22:09:46.061565471 +0200
+@@ -1720,6 +1720,9 @@ extern const struct rank NULL_POINTER_CO
+ /* Converting a pointer to an int is usually OK.  */
+ extern const struct rank NS_POINTER_CONVERSION_BADNESS;
+ 
++/* Badness of converting a (non-zero) integer constant
++   to a pointer.  */
++extern const struct rank NS_INTEGER_POINTER_CONVERSION_BADNESS;
+ 
+ extern struct rank sum_ranks (struct rank a, struct rank b);
+ extern int compare_ranks (struct rank a, struct rank b);
+Index: gdb-7.4.50.20120120/gdb/language.h
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/language.h	2012-01-04 19:57:01.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/language.h	2012-09-27 22:09:46.107565505 +0200
+@@ -55,27 +55,6 @@ extern enum range_check
+   }
+ range_check;
+ 
+-/* type_mode ==
+-   type_mode_auto:   type_check set automatically to default of language.
+-   type_mode_manual: type_check set manually by user.  */
+-
+-extern enum type_mode
+-  {
+-    type_mode_auto, type_mode_manual
+-  }
+-type_mode;
+-
+-/* type_check ==
+-   type_check_on:    Types are checked in GDB expressions, producing errors.
+-   type_check_warn:  Types are checked, producing warnings.
+-   type_check_off:   Types are not checked in GDB expressions.  */
+-
+-extern enum type_check
+-  {
+-    type_check_off, type_check_warn, type_check_on
+-  }
+-type_check;
+-
+ /* case_mode ==
+    case_mode_auto:   case_sensitivity set upon selection of scope.
+    case_mode_manual: case_sensitivity set only by user.  */
+@@ -152,10 +131,6 @@ struct language_defn
+ 
+     enum range_check la_range_check;
+ 
+-    /* Default type checking.  */
+-
+-    enum type_check la_type_check;
+-
+     /* Default case sensitivity.  */
+     enum case_sensitivity la_case_sensitivity;
+ 
+@@ -409,9 +384,6 @@ struct type *language_lookup_primitive_t
+ /* These macros define the behaviour of the expression 
+    evaluator.  */
+ 
+-/* Should we strictly type check expressions?  */
+-#define STRICT_TYPE (type_check != type_check_off)
+-
+ /* Should we range check values against the domain of their type?  */
+ #define RANGE_CHECK (range_check != range_check_off)
+ 
+@@ -483,8 +455,6 @@ extern void binop_type_check (struct val
+ 
+ /* Error messages */
+ 
+-extern void type_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
+-
+ extern void range_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
+ 
+ /* Data:  Does this value represent "truth" to the current language?  */
+Index: gdb-7.4.50.20120120/gdb/language.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/language.c	2012-01-04 19:57:01.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/language.c	2012-09-27 22:09:46.117565500 +0200
+@@ -55,7 +55,7 @@ static void show_check (char *, int);
+ 
+ static void set_check (char *, int);
+ 
+-static void set_type_range_case (void);
++static void set_range_case (void);
+ 
+ static void unk_lang_emit_char (int c, struct type *type,
+ 				struct ui_file *stream, int quoter);
+@@ -81,8 +81,6 @@ extern const struct language_defn unknow
+ 
+ enum range_mode range_mode = range_mode_auto;
+ enum range_check range_check = range_check_off;
+-enum type_mode type_mode = type_mode_auto;
+-enum type_check type_check = type_check_off;
+ enum case_mode case_mode = case_mode_auto;
+ enum case_sensitivity case_sensitivity = case_sensitive_on;
+ 
+@@ -174,7 +172,7 @@ set_language_command (char *ignore, int
+ 	      /* Enter manual mode.  Set the specified language.  */
+ 	      language_mode = language_mode_manual;
+ 	      current_language = languages[i];
+-	      set_type_range_case ();
++	      set_range_case ();
+ 	      expected_language = current_language;
+ 	      return;
+ 	    }
+@@ -186,79 +184,6 @@ set_language_command (char *ignore, int
+ 		  language);
+ }
+ 
+-/* Show command.  Display a warning if the type setting does
+-   not match the current language.  */
+-static void
+-show_type_command (struct ui_file *file, int from_tty,
+-		   struct cmd_list_element *c, const char *value)
+-{
+-  if (type_mode == type_mode_auto)
+-    {
+-      char *tmp = NULL;
+-
+-      switch (type_check)
+-	{
+-	case type_check_on:
+-	  tmp = "on";
+-	  break;
+-	case type_check_off:
+-	  tmp = "off";
+-	  break;
+-	case type_check_warn:
+-	  tmp = "warn";
+-	  break;
+-	default:
+-	  internal_error (__FILE__, __LINE__,
+-			  "Unrecognized type check setting.");
+-	}
+-
+-      fprintf_filtered (gdb_stdout,
+-			_("Type checking is \"auto; currently %s\".\n"),
+-			tmp);
+-    }
+-  else
+-    fprintf_filtered (gdb_stdout, _("Type checking is \"%s\".\n"),
+-		      value);
+-
+-   if (type_check != current_language->la_type_check)
+-    warning (_("the current type check setting"
+-	       " does not match the language.\n"));
+-}
+-
+-/* Set command.  Change the setting for type checking.  */
+-static void
+-set_type_command (char *ignore, int from_tty, struct cmd_list_element *c)
+-{
+-  if (strcmp (type, "on") == 0)
+-    {
+-      type_check = type_check_on;
+-      type_mode = type_mode_manual;
+-    }
+-  else if (strcmp (type, "warn") == 0)
+-    {
+-      type_check = type_check_warn;
+-      type_mode = type_mode_manual;
+-    }
+-  else if (strcmp (type, "off") == 0)
+-    {
+-      type_check = type_check_off;
+-      type_mode = type_mode_manual;
+-    }
+-  else if (strcmp (type, "auto") == 0)
+-    {
+-      type_mode = type_mode_auto;
+-      set_type_range_case ();
+-      return;
+-    }
+-  else
+-    internal_error (__FILE__, __LINE__,
+-		    _("Unrecognized type check setting: \"%s\""), type);
+-
+-  if (type_check != current_language->la_type_check)
+-    warning (_("the current type check setting"
+-	       " does not match the language.\n"));
+-}
+-
+ /* Show command.  Display a warning if the range setting does
+    not match the current language.  */
+ static void
+@@ -320,7 +245,7 @@ set_range_command (char *ignore, int fro
+   else if (strcmp (range, "auto") == 0)
+     {
+       range_mode = range_mode_auto;
+-      set_type_range_case ();
++      set_range_case ();
+       return;
+     }
+   else
+@@ -389,7 +314,7 @@ set_case_command (char *ignore, int from
+    else if (strcmp (case_sensitive, "auto") == 0)
+      {
+        case_mode = case_mode_auto;
+-       set_type_range_case ();
++       set_range_case ();
+        return;
+      }
+    else
+@@ -409,14 +334,11 @@ set_case_command (char *ignore, int from
+    If SHOW is non-zero, then print out the current language,
+    type and range checking status.  */
+ static void
+-set_type_range_case (void)
++set_range_case (void)
+ {
+   if (range_mode == range_mode_auto)
+     range_check = current_language->la_range_check;
+ 
+-  if (type_mode == type_mode_auto)
+-    type_check = current_language->la_type_check;
+-
+   if (case_mode == case_mode_auto)
+     case_sensitivity = current_language->la_case_sensitivity;
+ }
+@@ -437,7 +359,7 @@ set_language (enum language lang)
+       if (languages[i]->la_language == lang)
+ 	{
+ 	  current_language = languages[i];
+-	  set_type_range_case ();
++	  set_range_case ();
+ 	  break;
+ 	}
+     }
+@@ -461,8 +383,6 @@ language_info (int quietly)
+ 
+   if (!quietly)
+     {
+-      printf_unfiltered (_("Type checking:     %s\n"), type);
+-      show_type_command (NULL, 1, NULL, NULL);
+       printf_unfiltered (_("Range checking:    %s\n"), range);
+       show_range_command (NULL, 1, NULL, NULL);
+       printf_unfiltered (_("Case sensitivity:  %s\n"), case_sensitive);
+@@ -500,38 +420,11 @@ value_true (struct value *val)
+    error messages that occur during type- and range-
+    checking.  */
+ 
+-/* These are called when a language fails a type- or range-check.  The
++/* This is called when a language fails a range-check.  The
+    first argument should be a printf()-style format string, and the
+-   rest of the arguments should be its arguments.  If
+-   [type|range]_check is [type|range]_check_on, an error is printed;
+-   if [type|range]_check_warn, a warning; otherwise just the
+-   message.  */
+-
+-void
+-type_error (const char *string,...)
+-{
+-  va_list args;
+-
+-  va_start (args, string);
+-  switch (type_check)
+-    {
+-    case type_check_warn:
+-      vwarning (string, args);
+-      break;
+-    case type_check_on:
+-      verror (string, args);
+-      break;
+-    case type_check_off:
+-      /* FIXME: cagney/2002-01-30: Should this function print anything
+-         when type error is off?  */
+-      vfprintf_filtered (gdb_stderr, string, args);
+-      fprintf_filtered (gdb_stderr, "\n");
+-      break;
+-    default:
+-      internal_error (__FILE__, __LINE__, _("bad switch"));
+-    }
+-  va_end (args);
+-}
++   rest of the arguments should be its arguments.  If range_check is
++   range_check_on, an error is printed;  if range_check_warn, a warning;
++   otherwise just the message.  */
+ 
+ void
+ range_error (const char *string,...)
+@@ -902,7 +795,6 @@ const struct language_defn unknown_langu
+   "unknown",
+   language_unknown,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_no,
+@@ -945,7 +837,6 @@ const struct language_defn auto_language
+   "auto",
+   language_auto,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_no,
+@@ -986,7 +877,6 @@ const struct language_defn local_languag
+   "local",
+   language_auto,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_no,
+@@ -1132,13 +1022,6 @@ _initialize_language (void)
+   add_alias_cmd ("c", "check", no_class, 1, &showlist);
+   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
+ 
+-  add_setshow_enum_cmd ("type", class_support, type_or_range_names, &type,
+-			_("Set type checking.  (on/warn/off/auto)"),
+-			_("Show type checking.  (on/warn/off/auto)"),
+-			NULL, set_type_command,
+-			show_type_command,
+-			&setchecklist, &showchecklist);
+-
+   add_setshow_enum_cmd ("range", class_support, type_or_range_names,
+ 			&range,
+ 			_("Set range checking.  (on/warn/off/auto)"),
+Index: gdb-7.4.50.20120120/gdb/ada-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/ada-lang.c	2012-09-27 22:08:06.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/ada-lang.c	2012-09-27 22:09:46.122565495 +0200
+@@ -12327,7 +12327,6 @@ const struct language_defn ada_language_
+   "ada",                        /* Language name */
+   language_ada,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
+                                    that's not quite what this means.  */
+   array_row_major,
+Index: gdb-7.4.50.20120120/gdb/c-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/c-lang.c	2012-01-04 09:16:59.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/c-lang.c	2012-09-27 22:09:46.142565511 +0200
+@@ -832,7 +832,6 @@ const struct language_defn c_language_de
+   "c",				/* Language name */
+   language_c,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_c,
+@@ -955,7 +954,6 @@ const struct language_defn cplus_languag
+   "c++",			/* Language name */
+   language_cplus,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_c,
+@@ -996,7 +994,6 @@ const struct language_defn asm_language_
+   "asm",			/* Language name */
+   language_asm,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_c,
+@@ -1042,7 +1039,6 @@ const struct language_defn minimal_langu
+   "minimal",			/* Language name */
+   language_minimal,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_c,
+Index: gdb-7.4.50.20120120/gdb/d-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/d-lang.c	2012-01-04 09:17:00.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/d-lang.c	2012-09-27 22:09:46.155565513 +0200
+@@ -240,7 +240,6 @@ static const struct language_defn d_lang
+   "d",
+   language_d,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_c,
+Index: gdb-7.4.50.20120120/gdb/f-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/f-lang.c	2012-09-27 22:08:05.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/f-lang.c	2012-09-27 22:09:46.155565513 +0200
+@@ -264,7 +264,6 @@ const struct language_defn f_language_de
+   "fortran",
+   language_fortran,
+   range_check_on,
+-  type_check_on,
+   case_sensitive_off,
+   array_column_major,
+   macro_expansion_no,
+Index: gdb-7.4.50.20120120/gdb/jv-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/jv-lang.c	2012-09-27 22:08:05.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/jv-lang.c	2012-09-27 22:09:46.157565513 +0200
+@@ -1168,7 +1168,6 @@ const struct language_defn java_language
+   "java",			/* Language name */
+   language_java,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_no,
+Index: gdb-7.4.50.20120120/gdb/m2-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/m2-lang.c	2012-01-04 09:17:05.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/m2-lang.c	2012-09-27 22:09:46.170565519 +0200
+@@ -370,7 +370,6 @@ const struct language_defn m2_language_d
+   "modula-2",
+   language_m2,
+   range_check_on,
+-  type_check_on,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_no,
+Index: gdb-7.4.50.20120120/gdb/objc-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/objc-lang.c	2012-01-04 09:17:08.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/objc-lang.c	2012-09-27 22:09:46.173565521 +0200
+@@ -509,7 +509,6 @@ const struct language_defn objc_language
+   "objective-c",		/* Language name */
+   language_objc,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_c,
+Index: gdb-7.4.50.20120120/gdb/opencl-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/opencl-lang.c	2012-01-04 09:17:09.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/opencl-lang.c	2012-09-27 22:09:46.192565526 +0200
+@@ -993,7 +993,6 @@ const struct language_defn opencl_langua
+   "opencl",			/* Language name */
+   language_opencl,
+   range_check_off,
+-  type_check_off,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_c,
+Index: gdb-7.4.50.20120120/gdb/p-lang.c
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/p-lang.c	2012-01-04 09:17:09.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/p-lang.c	2012-09-27 22:09:46.193565530 +0200
+@@ -429,7 +429,6 @@ const struct language_defn pascal_langua
+   "pascal",			/* Language name */
+   language_pascal,
+   range_check_on,
+-  type_check_on,
+   case_sensitive_on,
+   array_row_major,
+   macro_expansion_no,
+Index: gdb-7.4.50.20120120/gdb/doc/gdb.texinfo
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/doc/gdb.texinfo	2012-09-27 22:08:10.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/doc/gdb.texinfo	2012-09-27 22:09:46.222565541 +0200
+@@ -12202,29 +12202,18 @@ List all the filename extensions and the
+ @node Checks
+ @section Type and Range Checking
+ 
+- at quotation
+- at emph{Warning:} In this release, the @value{GDBN} commands for type and range
+-checking are included, but they do not yet have any effect.  This
+-section documents the intended facilities.
+- at end quotation
+- at c FIXME remove warning when type/range code added
+-
+ Some languages are designed to guard you against making seemingly common
+ errors through a series of compile- and run-time checks.  These include
+-checking the type of arguments to functions and operators, and making
++checking the type of arguments to functions and operators and making
+ sure mathematical overflows are caught at run time.  Checks such as
+ these help to ensure a program's correctness once it has been compiled
+-by eliminating type mismatches, and providing active checks for range
++by eliminating type mismatches and providing active checks for range
+ errors when your program is running.
+ 
+- at value{GDBN} can check for conditions like the above if you wish.
+-Although @value{GDBN} does not check the statements in your program,
+-it can check expressions entered directly into @value{GDBN} for
+-evaluation via the @code{print} command, for example.  As with the
+-working language, @value{GDBN} can also decide whether or not to check
+-automatically based on your program's source language.
+- at xref{Supported Languages, ,Supported Languages}, for the default
+-settings of supported languages.
++By default @value{GDBN} checks for these errors according to the
++rules of the current source language.  Although @value{GDBN} does not check
++the statements in your program, it can check expressions entered directly
++into @value{GDBN} for evaluation via the @code{print} command, for example.
+ 
+ @menu
+ * Type Checking::               An overview of type checking
+@@ -12236,69 +12225,51 @@ settings of supported languages.
+ @node Type Checking
+ @subsection An Overview of Type Checking
+ 
+-Some languages, such as Modula-2, are strongly typed, meaning that the
++Some languages, such as C and C at t{++}, are strongly typed, meaning that the
+ arguments to operators and functions have to be of the correct type,
+ otherwise an error occurs.  These checks prevent type mismatch
+ errors from ever causing any run-time problems.  For example,
+ 
+ @smallexample
+-1 + 2 @result{} 3
++int klass::my_method(char *b) @{ return  b ? 1 : 2; @}
++
++(@value{GDBP}) print obj.my_method (0)
++$1 = 2
+ @exdent but
+- at error{} 1 + 2.3
++(@value{GDBP}) print obj.my_method (0x1234)
++Cannot resolve method klass::my_method to any overloaded instance
+ @end smallexample
+ 
+-The second example fails because the @code{CARDINAL} 1 is not
+-type-compatible with the @code{REAL} 2.3.
++The second example fails because in C at t{++} the integer constant
++ at samp{0x1234} is not type-compatible with the pointer parameter type.
+ 
+-For the expressions you use in @value{GDBN} commands, you can tell the
+- at value{GDBN} type checker to skip checking;
++For the expressions you use in @value{GDBN} commands, you can tell
++ at value{GDBN} to not enforce strict type checking or
+ to treat any mismatches as errors and abandon the expression;
+-or to only issue warnings when type mismatches occur,
+-but evaluate the expression anyway.  When you choose the last of
+-these, @value{GDBN} evaluates expressions like the second example above, but
+-also issues a warning.
++When type checking is disabled, @value{GDBN} successfully evaluates
++expressions like the second example above.
+ 
+-Even if you turn type checking off, there may be other reasons
++Even if type checking is off, there may be other reasons
+ related to type that prevent @value{GDBN} from evaluating an expression.
+ For instance, @value{GDBN} does not know how to add an @code{int} and
+ a @code{struct foo}.  These particular type errors have nothing to do
+-with the language in use, and usually arise from expressions, such as
+-the one described above, which make little sense to evaluate anyway.
+-
+-Each language defines to what degree it is strict about type.  For
+-instance, both Modula-2 and C require the arguments to arithmetical
+-operators to be numbers.  In C, enumerated types and pointers can be
+-represented as numbers, so that they are valid arguments to mathematical
+-operators.  @xref{Supported Languages, ,Supported Languages}, for further
+-details on specific languages.
++with the language in use and usually arise from expressions which make
++little sense to evaluate anyway.
+ 
+- at value{GDBN} provides some additional commands for controlling the type checker:
++ at value{GDBN} provides some additional commands for controlling type checking:
+ 
+ @kindex set check type
+ @kindex show check type
+ @table @code
+- at item set check type auto
+-Set type checking on or off based on the current working language.
+- at xref{Supported Languages, ,Supported Languages}, for the default settings for
+-each language.
+-
+ @item set check type on
+ @itemx set check type off
+-Set type checking on or off, overriding the default setting for the
+-current working language.  Issue a warning if the setting does not
+-match the language default.  If any type mismatches occur in
++Set strict type checking on or off.  If any type mismatches occur in
+ evaluating an expression while type checking is on, @value{GDBN} prints a
+ message and aborts evaluation of the expression.
+ 
+- at item set check type warn
+-Cause the type checker to issue warnings, but to always attempt to
+-evaluate the expression.  Evaluating the expression may still
+-be impossible for other reasons.  For example, @value{GDBN} cannot add
+-numbers and structures.
+-
+- at item show type
+-Show the current setting of the type checker, and whether or not @value{GDBN}
+-is setting it automatically.
++ at item show check type
++Show the current setting of type checking and whether @value{GDBN}
++is enforcing strict type checking rules.
+ @end table
+ 
+ @cindex range checking
+@@ -12748,8 +12719,8 @@ specification.
+ 
+ @cindex C and C at t{++} defaults
+ 
+-If you allow @value{GDBN} to set type and range checking automatically, they
+-both default to @code{off} whenever the working language changes to
++If you allow @value{GDBN} to set range checking automatically, it
++defaults to @code{off} whenever the working language changes to
+ C or C at t{++}.  This happens regardless of whether you or @value{GDBN}
+ selects the working language.
+ 
+@@ -12760,37 +12731,15 @@ these files, it sets the working languag
+ @xref{Automatically, ,Having @value{GDBN} Infer the Source Language},
+ for further details.
+ 
+- at c Type checking is (a) primarily motivated by Modula-2, and (b)
+- at c unimplemented.  If (b) changes, it might make sense to let this node
+- at c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93.
+-
+ @node C Checks
+ @subsubsection C and C at t{++} Type and Range Checks
+ 
+ @cindex C and C at t{++} checks
+ 
+-By default, when @value{GDBN} parses C or C at t{++} expressions, type checking
+-is not used.  However, if you turn type checking on, @value{GDBN}
+-considers two variables type equivalent if:
+-
+- at itemize @bullet
+- at item
+-The two variables are structured and have the same structure, union, or
+-enumerated tag.
+-
+- at item
+-The two variables have the same type name, or types that have been
+-declared equivalent through @code{typedef}.
+-
+- at ignore
+- at c leaving this out because neither J Gilmore nor R Pesch understand it.
+- at c FIXME--beers?
+- at item
+-The two @code{struct}, @code{union}, or @code{enum} variables are
+-declared in the same declaration.  (Note: this may not be true for all C
+-compilers.)
+- at end ignore
+- at end itemize
++By default, when @value{GDBN} parses C or C at t{++} expressions, strict type
++checking is used.  However, if you turn type checking off, @value{GDBN}
++will allow certain non-standard conversions, such as promoting integer
++constants to pointers.
+ 
+ Range checking, if turned on, is done on mathematical operations.  Array
+ indices are not checked, since they are often used to index a pointer
+Index: gdb-7.4.50.20120120/gdb/testsuite/gdb.base/default.exp
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/testsuite/gdb.base/default.exp	2012-09-27 22:08:03.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/testsuite/gdb.base/default.exp	2012-09-27 22:09:46.236565549 +0200
+@@ -499,12 +499,13 @@ gdb_test "section" "Must specify section
+ gdb_test "set annotate" "Argument required .integer to set it to.*" "set annotate"
+ #test set args
+ gdb_test_no_output "set args" "set args"
+-#test set check "c" abbreviation
+-gdb_test "set c" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check \"c\" abbreviation"
+-#test set check "ch" abbreviation
+-gdb_test "set ch" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check \"ch\" abbreviation"
+-#test set check
+-gdb_test "set check" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check"
++
++# Test set check abbreviations
++foreach x {"c" "ch" "check"} {
++    gdb_test "set $x" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set strict type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." \
++	"set check \"$x\" abbreviation"
++}
++
+ #test set check range
+ gdb_test "set check range" ".*" "set check range"
+ #test set check type
+@@ -583,16 +584,17 @@ gdb_test "shell echo Hi dad!" "Hi dad!"
+ gdb_test "show annotate" "Annotation_level is 0." 	 "show annotate"
+ #test show args
+ gdb_test "show args" "Argument list to give program being debugged when it is started is \"\"." "show args"
+-#test show check "c" abbreviation
+-gdb_test "show c" "range:  *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Type checking is \"auto; currently off\".*" "show check \"c\" abbreviation"
+-#test show check "ch" abbreviation
+-gdb_test "show ch" "range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Type checking is \"auto; currently off\"." "show check \"ch\" abbreviation"
+-#test show check
+-gdb_test "show check" "range:  *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Type checking is \"auto; currently off\"." "show check"
++
++# test show check abbreviations
++foreach x {"c" "ch" "check"} {
++    gdb_test "show $x" "range:  *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Strict type checking is on\..*" \
++	"show check \"$x\" abbreviation"
++}
++
+ #test show check range
+ gdb_test "show check range" "Range checking is \"auto; currently off\"." "show check range"
+ #test show check type
+-gdb_test "show check type" "Type checking is \"auto; currently off\"." "show check type"
++gdb_test "show check type" "Strict type checking is on\." "show check type"
+ #test show commands
+ gdb_test "show commands" ".*" "show commands"
+ #test show complaints
+Index: gdb-7.4.50.20120120/gdb/testsuite/gdb.base/help.exp
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/testsuite/gdb.base/help.exp	2012-09-27 22:08:06.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/testsuite/gdb.base/help.exp	2012-09-27 22:09:46.247565554 +0200
+@@ -378,22 +378,26 @@ gdb_test "help section" "Change the base
+ gdb_test "help set annotate" "Set annotation_level\.\[\r\n\]+0 == normal;     1 == fullname \\(for use when running under emacs\\)\[\r\n\]+2 == output annotated suitably for use by programs that control GDB\." "help set annotate"
+ # test help set args
+ gdb_test "help set args" "Set argument list to give program being debugged when it is started\.\[\r\n\]+Follow this command with any number of args, to be passed to the program\."
+-# test help set check "c" abbreviation
+-test_prefix_command_help {"set c" "set check"} {
+-    "Set the status of the type/range checker\.\[\r\n\]+"
+-} "help set check \"c\" abbreviation"
+-# test help set check "ch" abbreviation
+-test_prefix_command_help {"set ch" "set check"} {
+-    "Set the status of the type/range checker\.\[\r\n\]+"
+-} "help set check \"ch\" abbreviation"
+-# test help set check
++
++# Test help set check abbreviations
++foreach x {"c" "ch"} {
++    test_prefix_command_help [list "set $x" "set check"] {
++	"Set the status of the type/range checker\.\[\r\n\]+"
++    } "help set check \"$x\" abbreviation"
++}
++
++# Test help set check
+ test_prefix_command_help {"set check"} {
+     "Set the status of the type/range checker\.\[\r\n\]+"
+ }
++
+ # test help set check range
+ gdb_test "help set check range" "Set range checking\.  \\(on/warn/off/auto\\)" "help set check range"
+-# test help set check type
+-gdb_test "help set check type" "Set type checking\.  \\(on/warn/off/auto\\)." "help set check type"
++
++# Test help set check type
++gdb_test "help set check type" "Set strict type checking\." \
++    "help set check type"
++
+ # test help set complaints
+ gdb_test "help set complaints" "Set max number of complaints about incorrect symbols\." "help set complaints"
+ # test help set confirm
+@@ -491,18 +495,25 @@ gdb_test "help shell" "Execute the rest
+ gdb_test "help show annotate" "Show annotation_level\.\[\r\n\]+0 == normal;     1 == fullname \\(for use when running under emacs\\)\[\r\n\]+2 == output annotated suitably for use by programs that control GDB\." "help show annotate"
+ # test help show args
+ gdb_test "help show args" "Show argument list to give program being debugged when it is started\.\[\r\n\]+Follow this command with any number of args, to be passed to the program\."
+-# test help show check "c" abbreviation
+-test_prefix_command_help {"show c" "show check"} {
+-    "Show the status of the type/range checker\.\[\r\n\]+"
+-} "help show check \"c\" abbreviation"
++
++# Test help show check abbreviations
++foreach x {"c" "check"} {
++    test_prefix_command_help [list "show $x" "show check"] {
++	"Show the status of the type/range checker\.\[\r\n\]+"
++    } "help show check \"$x\" abbreviation"
++}
++
+ # test help show check
+ test_prefix_command_help {"show check"} {
+     "Show the status of the type/range checker\.\[\r\n\]+"
+ }
+ # test help show check range
+ gdb_test "help show check range" "Show range checking\.  \\(on/warn/off/auto\\)" "help show check range"
++
+ # test help show check type
+-gdb_test "help show check type" "Show type checking\.  \\(on/warn/off/auto\\)" "help show check type"
++gdb_test "help show check type" "Show strict type checking\." \
++    "help show check type"
++
+ # test help show commands
+ gdb_test "help show commands" "Show the history of commands you typed\.\[\r\n\]+You can supply a command number to start with, or a `\[+\]' to start after\[\r\n\]+the previous command number shown\." "help show commands"
+ # test help show complaints
+Index: gdb-7.4.50.20120120/gdb/testsuite/gdb.base/setshow.exp
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/testsuite/gdb.base/setshow.exp	2012-01-16 17:21:45.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/testsuite/gdb.base/setshow.exp	2012-09-27 22:09:46.254565557 +0200
+@@ -110,19 +110,22 @@ gdb_test "show check range" "Range check
+ #test set check range auto
+ gdb_test_no_output "set check range auto" "set check range auto" 
+ #test show check range auto
+-gdb_test "show check range" "Range checking is \"auto; currently .*" "show check range (auto)" 
+-#test set check type on
+-gdb_test "set check type on" ".*" "set check type on" 
+-#test show check type on
+-gdb_test "show check type" "Type checking is \"on\"..*" "show check type (on)" 
+-#test set check type off with trailing space
+-gdb_test_no_output "set check type off " "set check type off" 
+-#test show check type off
+-gdb_test "show check type" "Type checking is \"off\"..*" "show check type (off)" 
+-#test set check type auto
+-gdb_test_no_output "set check type auto" "set check type auto" 
+-#test show check type
+-gdb_test "show check type" "Type checking is \"auto; currently .*" "show check type (auto)" 
++gdb_test "show check range" "Range checking is \"auto; currently .*" "show check range (auto)"
++
++# Test set check type on
++gdb_test "set check type on" ".*" "set check type on"
++
++# Test show check type on
++gdb_test "show check type" "Strict type checking is on\..*" \
++    "show check type (on)"
++
++# Test set check type off with trailing space
++gdb_test_no_output "set check type off " "set check type off"
++
++# Test show check type off
++gdb_test "show check type" "Strict type checking is off\..*" \
++    "show check type (off)"
++
+ #test set complaints 100
+ gdb_test_no_output "set complaints 100" "set complaints 100" 
+ #test show complaints 100
+Index: gdb-7.4.50.20120120/gdb/testsuite/gdb.cp/converts.exp
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/testsuite/gdb.cp/converts.exp	2012-01-04 09:17:46.000000000 +0100
++++ gdb-7.4.50.20120120/gdb/testsuite/gdb.cp/converts.exp	2012-09-27 22:09:46.255565557 +0200
+@@ -70,9 +70,37 @@ gdb_test_multiple "p foo3_1 (0, 0)" $t {
+     pass $t
+   }
+ }
++
+ gdb_test "p foo3_1 (0, 1)" \
+     "Cannot resolve function foo3_1 to any overloaded instance"
+ gdb_test "p foo3_1 (0, (const char**) 1)" " = 31"
+ gdb_test "p foo3_2 (0, 0)" "= 32"
+ gdb_test "p foo3_2 (0, (char const**) 0)" " = 320"
+ 
++# Test for strict type checking
++set error_str "Cannot resolve function %s to any overloaded instance"
++gdb_test "show check type" "Strict type checking is on\."
++gdb_test "p foo1_type_check (123)" [format $error_str "foo1_type_check"]
++gdb_test "p foo2_type_check (0, 1)" [format $error_str "foo2_type_check"]
++gdb_test "p foo2_type_check (1, 0)" [format $error_str "foo2_type_check"]
++gdb_test "p foo2_type_check (1, 1)" [format $error_str "foo2_type_check"]
++gdb_test "p foo3_type_check (0, 0, 1)" [format $error_str "foo3_type_check"]
++gdb_test "p foo3_type_check (0, 1, 0)" [format $error_str "foo3_type_check"]
++gdb_test "p foo3_type_check (1, 0, 0)" [format $error_str "foo3_type_check"]
++gdb_test "p foo3_type_check (0, 1, 1)" [format $error_str "foo3_type_check"]
++gdb_test "p foo3_type_check (1, 1, 0)" [format $error_str "foo3_type_check"]
++gdb_test "p foo3_type_check (1, 1, 1)" [format $error_str "foo3_type_check"]
++
++gdb_test_no_output "set check type off"
++gdb_test "show check type" "Strict type checking is off\."
++gdb_test "p foo1_type_check (123)" " = 1000"
++gdb_test "p foo2_type_check (0, 1)" " = 1001"
++gdb_test "p foo2_type_check (1, 0)" " = 1001"
++gdb_test "p foo2_type_check (1, 1)" " = 1001"
++gdb_test "p foo3_type_check (0, 0, 1)" " = 1002"
++gdb_test "p foo3_type_check (0, 1, 0)" " = 1002"
++gdb_test "p foo3_type_check (1, 0, 0)" " = 1002"
++gdb_test "p foo3_type_check (0, 1, 1)" " = 1002"
++gdb_test "p foo3_type_check (1, 1, 0)" " = 1002"
++gdb_test "p foo3_type_check (1, 1, 1)" " = 1002"
++gdb_test "p foo3_2 (1,1)" " = 32"
+Index: gdb-7.4.50.20120120/gdb/testsuite/gdb.cp/converts.cc
+===================================================================
+--- gdb-7.4.50.20120120.orig/gdb/testsuite/gdb.cp/converts.cc	2011-10-14 22:22:50.000000000 +0200
++++ gdb-7.4.50.20120120/gdb/testsuite/gdb.cp/converts.cc	2012-09-27 22:09:46.256565557 +0200
+@@ -27,6 +27,10 @@ int foo3_1 (int a, const char **b) { ret
+ int foo3_2 (int a, int b) { return 32; }
+ int foo3_2 (int a, const char **b) { return 320; }
+ 
++int foo1_type_check (char *a) { return 1000; }
++int foo2_type_check (char *a, char *b) { return 1001; }
++int foo3_type_check (char *a, char *b, char *c) { return 1002; }
++
+ int main()
+ {
+ 
+@@ -62,5 +66,9 @@ int main()
+   foo3_2 (0, static_cast<char const**> (0));
+   foo3_2 (0, 0);
+ 
++  foo1_type_check (a);
++  foo2_type_check (a, a);
++  foo3_type_check (a, a, a);
++
+   return 0;          // end of main
+ }
diff --git a/gdb.spec b/gdb.spec
index 46034a4..1cc7b91 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -35,7 +35,7 @@ Version: 7.4.50.%{snap}
 
 # The release always contains a leading reserved number, start it at 1.
 # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 50%{?dist}
+Release: 51%{?dist}
 
 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
 Group: Development/Debuggers
@@ -632,6 +632,12 @@ Patch697: gdb-parameterref-2of2.patch
 # Support constant DW_AT_high_pc produced by FSF GCC HEAD (Mark Wielaard).
 Patch724: gdb-highpc-const.patch
 
+# Fix "ambiguous linespec" regression: break lineno.
+Patch727: gdb-break-lineno.patch
+
+# Permit passing pointers as address number even for C++ methods (Keith Seitz).
+Patch728: gdb-check-type.patch
+
 %if 0%{!?rhel:1} || 0%{?rhel} > 6
 # RL_STATE_FEDORA_GDB would not be found for:
 # Patch642: gdb-readline62-ask-more-rh.patch
@@ -955,6 +961,8 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
 %patch696 -p1
 %patch697 -p1
 %patch724 -p1
+%patch727 -p1
+%patch728 -p1
 
 %patch393 -p1
 %if 0%{!?el5:1} || 0%{?scl:1}
@@ -1447,6 +1455,10 @@ fi
 %endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
 
 %changelog
+* Thu Sep 27 2012 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.4.50.20120120-51.fc17
+- Fix "ambiguous linespec" regression: break lineno.
+- Permit passing pointers as address number even for C++ methods (Keith Seitz).
+
 * Wed Aug 22 2012 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.4.50.20120120-50.fc17
 - Support constant DW_AT_high_pc produced by FSF GCC HEAD (Mark Wielaard).
 


More information about the scm-commits mailing list