2009-08-13 Pedro Alves <pedro@codesourcery.com>
authorPedro Alves <palves@redhat.com>
Thu, 13 Aug 2009 14:58:27 +0000 (14:58 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 13 Aug 2009 14:58:27 +0000 (14:58 +0000)
PR gdb/8869:

* language.c (language, type, range, case_sensitive): Make const.
(show_language_command): Don't call deprecated_show_value_hack.
Special case "auto".
(set_language_command): An unrecognized language is now an
internal error instead of a user error.  Don't call set_lang_str.
(show_type_command): Don't call deprecated_show_value_hack.
Special case "auto".  Use warning.
(set_type_command): An unrecognized type is now an internal error
instead of a user error.  Output type check mismatch with language
here.  Don't call set_type_str.
(show_range_command): Don't call deprecated_show_value_hack.
Special case "auto".  Use warning.
(set_range_command): An unrecognized range check is now an
internal error instead of a warning.  Output range check mismatch
with language here.  Don't call set_range_str.
(show_case_command): Don't call deprecated_show_value_hack.
Special case "auto".  Use warning.
(set_case_command): Don't call set_case_str.  An unrecognized case
check is now an internal error instead of a warning.  Output range
check mismatch with language here.  Don't call set_case_str.
(set_type_range_case): Don't call set_type_str, set_range_str or
set_case_str here.
(set_lang_str, set_type_str, set_range_str, set_case_str): Delete.
(add_language): Install or reinstall the "set language" command
here, and make it an enum command.  Build the enumeration and the
help string from the current list of known languages.
(_initialize_language): Don't install "set language" here.  Make
"set check type", "set check range" and "set case-sensitive" enum
commands.  Register the "auto" "local" and "unknown" languages in
that order.

2009-08-13  Pedro Alves  <pedro@codesourcery.com>

* gdb.base/default.exp: Adjust "set language test": it's now an
enum command.  Larger help string moved to "help set language".
* gdb.base/help.exp: Adjust "help set language" expected output,
now lists all known languages.

gdb/ChangeLog
gdb/language.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/default.exp
gdb/testsuite/gdb.base/help.exp

index 6b734f7..8c69a5b 100644 (file)
@@ -1,5 +1,40 @@
 2009-08-13  Pedro Alves  <pedro@codesourcery.com>
 
+       PR gdb/8869:
+
+       * language.c (language, type, range, case_sensitive): Make const.
+       (show_language_command): Don't call deprecated_show_value_hack.
+       Special case "auto".
+       (set_language_command): An unrecognized language is now an
+       internal error instead of a user error.  Don't call set_lang_str.
+       (show_type_command): Don't call deprecated_show_value_hack.
+       Special case "auto".  Use warning.
+       (set_type_command): An unrecognized type is now an internal error
+       instead of a user error.  Output type check mismatch with language
+       here.  Don't call set_type_str.
+       (show_range_command): Don't call deprecated_show_value_hack.
+       Special case "auto".  Use warning.
+       (set_range_command): An unrecognized range check is now an
+       internal error instead of a warning.  Output range check mismatch
+       with language here.  Don't call set_range_str.
+       (show_case_command): Don't call deprecated_show_value_hack.
+       Special case "auto".  Use warning.
+       (set_case_command): Don't call set_case_str.  An unrecognized case
+       check is now an internal error instead of a warning.  Output range
+       check mismatch with language here.  Don't call set_case_str.
+       (set_type_range_case): Don't call set_type_str, set_range_str or
+       set_case_str here.
+       (set_lang_str, set_type_str, set_range_str, set_case_str): Delete.
+       (add_language): Install or reinstall the "set language" command
+       here, and make it an enum command.  Build the enumeration and the
+       help string from the current list of known languages.
+       (_initialize_language): Don't install "set language" here.  Make
+       "set check type", "set check range" and "set case-sensitive" enum
+       commands.  Register the "auto" "local" and "unknown" languages in
+       that order.
+
+2009-08-13  Pedro Alves  <pedro@codesourcery.com>
+
        Revert 2009-08-07 changes for PR gdb/8869:
 
        * language.c (set_language_command): Strip whitespace.
index 62eeb62..c1c0bcf 100644 (file)
 
 extern void _initialize_language (void);
 
-static void set_case_str (void);
-
-static void set_range_str (void);
-
-static void set_type_str (void);
-
-static void set_lang_str (void);
-
 static void unk_lang_error (char *);
 
 static int unk_lang_parser (void);
@@ -111,16 +103,12 @@ static unsigned languages_size;
 static unsigned languages_allocsize;
 #define        DEFAULT_ALLOCSIZE 4
 
-/* The "set language/type/range" commands all put stuff in these
-   buffers.  This is to make them work as set/show commands.  The
-   user's string is copied here, then the set_* commands look at
-   them and update them to something that looks nice when it is
-   printed out. */
-
-static char *language;
-static char *type;
-static char *range;
-static char *case_sensitive;
+/* The current values of the "set language/type/range" enum
+   commands.  */
+static const char *language;
+static const char *type;
+static const char *range;
+static const char *case_sensitive;
 
 /* Warning issued when current_language and the language of the current
    frame do not match. */
@@ -138,7 +126,15 @@ show_language_command (struct ui_file *file, int from_tty,
 {
   enum language flang;         /* The language of the current frame */
 
-  deprecated_show_value_hack (file, from_tty, c, value);
+  if (language_mode == language_mode_auto)
+    fprintf_filtered (gdb_stdout,
+                     _("The current source language is "
+                       "\"auto; currently %s\".\n"),
+                     current_language->la_name);
+  else
+    fprintf_filtered (gdb_stdout, _("The current source language is \"%s\".\n"),
+                     current_language->la_name);
+
   flang = get_frame_language ();
   if (flang != language_unknown &&
       language_mode == language_mode_manual &&
@@ -152,34 +148,6 @@ set_language_command (char *ignore, int from_tty, struct cmd_list_element *c)
 {
   int i;
   enum language flang;
-  char *err_lang;
-
-  if (!language || !language[0])
-    {
-      printf_unfiltered (_("\
-The currently understood settings are:\n\n\
-local or auto    Automatic setting based on source file\n"));
-
-      for (i = 0; i < languages_size; ++i)
-       {
-         /* Already dealt with these above.  */
-         if (languages[i]->la_language == language_unknown
-             || languages[i]->la_language == language_auto)
-           continue;
-
-         /* FIXME: i18n: for now assume that the human-readable name
-            is just a capitalization of the internal name.  */
-         printf_unfiltered ("%-16s Use the %c%s language\n",
-                            languages[i]->la_name,
-         /* Capitalize first letter of language
-            name.  */
-                            toupper (languages[i]->la_name[0]),
-                            languages[i]->la_name + 1);
-       }
-      /* Restore the silly string. */
-      set_language (current_language->la_language);
-      return;
-    }
 
   /* Search the list of languages for a match.  */
   for (i = 0; i < languages_size; i++)
@@ -206,19 +174,15 @@ local or auto    Automatic setting based on source file\n"));
              language_mode = language_mode_manual;
              current_language = languages[i];
              set_type_range_case ();
-             set_lang_str ();
              expected_language = current_language;
              return;
            }
        }
     }
 
-  /* Reset the language (esp. the global string "language") to the 
-     correct values. */
-  err_lang = xstrdup (language);
-  make_cleanup (xfree, err_lang);      /* Free it after error */
-  set_language (current_language->la_language);
-  error (_("Unknown language `%s'."), err_lang);
+  internal_error (__FILE__, __LINE__,
+                 "Couldn't find language `%s' in known languages list.",
+                 language);
 }
 
 /* Show command.  Display a warning if the type setting does
@@ -227,10 +191,37 @@ static void
 show_type_command (struct ui_file *file, int from_tty,
                   struct cmd_list_element *c, const char *value)
 {
-  deprecated_show_value_hack (file, from_tty, c, value);
-  if (type_check != current_language->la_type_check)
-    printf_unfiltered (
-                       "Warning: the current type check setting does not match the language.\n");
+  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. */
@@ -256,16 +247,15 @@ set_type_command (char *ignore, int from_tty, struct cmd_list_element *c)
     {
       type_mode = type_mode_auto;
       set_type_range_case ();
-      /* Avoid hitting the set_type_str call below.  We
-         did it in set_type_range_case. */
       return;
     }
   else
-    {
-      warning (_("Unrecognized type check setting: \"%s\""), type);
-    }
-  set_type_str ();
-  show_type_command (NULL, from_tty, NULL, NULL);
+    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
@@ -274,10 +264,37 @@ static void
 show_range_command (struct ui_file *file, int from_tty,
                    struct cmd_list_element *c, const char *value)
 {
-  deprecated_show_value_hack (file, from_tty, c, value);
+  if (range_mode == range_mode_auto)
+    {
+      char *tmp;
+
+      switch (range_check)
+       {
+       case range_check_on:
+         tmp = "on";
+         break;
+       case range_check_off:
+         tmp = "off";
+         break;
+       case range_check_warn:
+         tmp = "warn";
+         break;
+       default:
+         internal_error (__FILE__, __LINE__,
+                         "Unrecognized range check setting.");
+       }
+
+      fprintf_filtered (gdb_stdout,
+                       _("Range checking is \"auto; currently %s\".\n"),
+                       tmp);
+    }
+  else
+    fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
+                     value);
+
   if (range_check != current_language->la_range_check)
-    printf_unfiltered (
-                       "Warning: the current range check setting does not match the language.\n");
+    warning (_("the current range check setting "
+              "does not match the language.\n"));
 }
 
 /* Set command.  Change the setting for range checking. */
@@ -303,16 +320,16 @@ set_range_command (char *ignore, int from_tty, struct cmd_list_element *c)
     {
       range_mode = range_mode_auto;
       set_type_range_case ();
-      /* Avoid hitting the set_range_str call below.  We
-         did it in set_type_range_case. */
       return;
     }
   else
     {
-      warning (_("Unrecognized range check setting: \"%s\""), range);
+      internal_error (__FILE__, __LINE__,
+                     _("Unrecognized range check setting: \"%s\""), range);
     }
-  set_range_str ();
-  show_range_command (NULL, from_tty, NULL, NULL);
+  if (range_check != current_language->la_range_check)
+    warning (_("the current range check setting "
+              "does not match the language.\n"));
 }
 
 /* Show command.  Display a warning if the case sensitivity setting does
@@ -321,10 +338,35 @@ static void
 show_case_command (struct ui_file *file, int from_tty,
                   struct cmd_list_element *c, const char *value)
 {
-  deprecated_show_value_hack (file, from_tty, c, value);
+  if (case_mode == case_mode_auto)
+    {
+      char *tmp = NULL;
+
+      switch (case_sensitivity)
+       {
+       case case_sensitive_on:
+         tmp = "on";
+         break;
+       case case_sensitive_off:
+         tmp = "off";
+         break;
+       default:
+         internal_error (__FILE__, __LINE__,
+                         "Unrecognized case-sensitive setting.");
+       }
+
+      fprintf_filtered (gdb_stdout,
+                       _("Case sensitivity in "
+                         "name search is \"auto; currently %s\".\n"),
+                       tmp);
+    }
+  else
+    fprintf_filtered (gdb_stdout, _("Case sensitivity in name search is \"%s\".\n"),
+                     value);
+
   if (case_sensitivity != current_language->la_case_sensitivity)
-    printf_unfiltered(
-"Warning: the current case sensitivity setting does not match the language.\n");
+    warning (_("the current case sensitivity setting does not match "
+              "the language.\n"));
 }
 
 /* Set command.  Change the setting for case sensitivity.  */
@@ -346,17 +388,18 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
      {
        case_mode = case_mode_auto;
        set_type_range_case ();
-       /* Avoid hitting the set_case_str call below.  We did it in
-         set_type_range_case.  */
        return;
      }
    else
      {
-       warning (_("Unrecognized case-sensitive setting: \"%s\""),
-               case_sensitive);
+       internal_error (__FILE__, __LINE__,
+                      "Unrecognized case-sensitive setting: \"%s\"",
+                      case_sensitive);
      }
-   set_case_str();
-   show_case_command (NULL, from_tty, NULL, NULL);
+
+   if (case_sensitivity != current_language->la_case_sensitivity)
+     warning (_("the current case sensitivity setting does not match "
+               "the language.\n"));
 }
 
 /* Set the status of range and type checking and case sensitivity based on
@@ -366,7 +409,6 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
 static void
 set_type_range_case (void)
 {
-
   if (range_mode == range_mode_auto)
     range_check = current_language->la_range_check;
 
@@ -375,10 +417,6 @@ set_type_range_case (void)
 
   if (case_mode == case_mode_auto)
     case_sensitivity = current_language->la_case_sensitivity;
-
-  set_type_str ();
-  set_range_str ();
-  set_case_str ();
 }
 
 /* Set current language to (enum language) LANG.  Returns previous language. */
@@ -397,7 +435,6 @@ set_language (enum language lang)
        {
          current_language = languages[i];
          set_type_range_case ();
-         set_lang_str ();
          break;
        }
     }
@@ -405,100 +442,6 @@ set_language (enum language lang)
   return prev_language;
 }
 \f
-/* This page contains functions that update the global vars
-   language, type and range. */
-static void
-set_lang_str (void)
-{
-  char *prefix = "";
-
-  if (language)
-    xfree (language);
-  if (language_mode == language_mode_auto)
-    prefix = "auto; currently ";
-
-  language = concat (prefix, current_language->la_name, (char *)NULL);
-}
-
-static void
-set_type_str (void)
-{
-  char *tmp = NULL, *prefix = "";
-
-  if (type)
-    xfree (type);
-  if (type_mode == type_mode_auto)
-    prefix = "auto; currently ";
-
-  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:
-      error (_("Unrecognized type check setting."));
-    }
-
-  type = concat (prefix, tmp, (char *)NULL);
-}
-
-static void
-set_range_str (void)
-{
-  char *tmp, *pref = "";
-
-  if (range_mode == range_mode_auto)
-    pref = "auto; currently ";
-
-  switch (range_check)
-    {
-    case range_check_on:
-      tmp = "on";
-      break;
-    case range_check_off:
-      tmp = "off";
-      break;
-    case range_check_warn:
-      tmp = "warn";
-      break;
-    default:
-      error (_("Unrecognized range check setting."));
-    }
-
-  if (range)
-    xfree (range);
-  range = concat (pref, tmp, (char *)NULL);
-}
-
-static void
-set_case_str (void)
-{
-   char *tmp = NULL, *prefix = "";
-
-   if (case_mode==case_mode_auto)
-      prefix = "auto; currently ";
-
-   switch (case_sensitivity)
-   {
-   case case_sensitive_on:
-     tmp = "on";
-     break;
-   case case_sensitive_off:
-     tmp = "off";
-     break;
-   default:
-     error (_("Unrecognized case-sensitive setting."));
-   }
-
-   xfree (case_sensitive);
-   case_sensitive = concat (prefix, tmp, (char *)NULL);
-}
 
 /* Print out the current language settings: language, range and
    type checking.  If QUIETLY, print only what has changed.  */
@@ -938,6 +881,15 @@ show_check (char *ignore, int from_tty)
 void
 add_language (const struct language_defn *lang)
 {
+  /* For the "set language" command.  */
+  static char **language_names = NULL;
+  /* For the "help set language" command.  */
+  static char *language_set_doc = NULL;
+
+  int i;
+  struct ui_file *tmp_stream;
+  long len;
+
   if (lang->la_magic != LANG_MAGIC)
     {
       fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
@@ -958,6 +910,52 @@ add_language (const struct language_defn *lang)
                                 languages_allocsize * sizeof (*languages));
     }
   languages[languages_size++] = lang;
+
+  /* Build the language names array, to be used as enumeration in the
+     set language" enum command.  */
+  language_names = xrealloc (language_names,
+                            (languages_size + 1) * sizeof (const char *));
+  for (i = 0; i < languages_size; ++i)
+    language_names[i] = languages[i]->la_name;
+  language_names[i] = NULL;
+
+  /* Build the "help set language" docs.  */
+  tmp_stream = mem_fileopen ();
+
+  fprintf_unfiltered (tmp_stream, _("\
+Set the current source language.\n\
+The currently understood settings are:\n\n\
+local or auto    Automatic setting based on source file\n"));
+
+  for (i = 0; i < languages_size; ++i)
+    {
+      /* Already dealt with these above.  */
+      if (languages[i]->la_language == language_unknown
+         || languages[i]->la_language == language_auto)
+       continue;
+
+      /* FIXME: i18n: for now assume that the human-readable name
+        is just a capitalization of the internal name.  */
+      fprintf_unfiltered (tmp_stream, "%-16s Use the %c%s language\n",
+                         languages[i]->la_name,
+                         /* Capitalize first letter of language
+                            name.  */
+                         toupper (languages[i]->la_name[0]),
+                         languages[i]->la_name + 1);
+    }
+
+  xfree (language_set_doc);
+  language_set_doc = ui_file_xstrdup (tmp_stream, &len);
+  ui_file_delete (tmp_stream);
+
+  add_setshow_enum_cmd ("language", class_support,
+                       (const char **) language_names,
+                       &language,
+                       language_set_doc, _("\
+Show the current source language."), NULL,
+                       set_language_command,
+                       show_language_command,
+                       &setlist, &showlist);
 }
 
 /* Iterate through all registered languages looking for and calling
@@ -1340,22 +1338,17 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
 void
 _initialize_language (void)
 {
-  struct cmd_list_element *set, *show;
+  static const char *type_or_range_names[]
+    = { "on", "off", "warn", "auto", NULL };
+
+  static const char *case_sensitive_names[]
+    = { "on", "off", "auto", NULL };
 
   language_gdbarch_data
     = gdbarch_data_register_post_init (language_gdbarch_post_init);
 
   /* GDB commands for language specific stuff */
 
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("language", class_support, &language, _("\
-Set the current source language."), _("\
-Show the current source language."), NULL,
-                                  set_language_command,
-                                  show_language_command,
-                                  &setlist, &showlist);
-
   add_prefix_cmd ("check", no_class, set_check,
                  _("Set the status of the type/range checker."),
                  &setchecklist, "set check ", 0, &setlist);
@@ -1368,38 +1361,33 @@ Show the current source language."), NULL,
   add_alias_cmd ("c", "check", no_class, 1, &showlist);
   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
 
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("type", class_support, &type, _("\
+  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);
+                       set_type_command,
+                       show_type_command,
+                       &setchecklist, &showchecklist);
 
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("range", class_support, &range, _("\
+  add_setshow_enum_cmd ("range", class_support, type_or_range_names,
+                       &range, _("\
 Set range checking.  (on/warn/off/auto)"), _("\
 Show range checking.  (on/warn/off/auto)"), NULL,
-                                  set_range_command,
-                                  show_range_command,
-                                  &setchecklist, &showchecklist);
-
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("case-sensitive", class_support,
-                                  &case_sensitive, _("\
+                       set_range_command,
+                       show_range_command,
+                       &setchecklist, &showchecklist);
+
+  add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
+                       &case_sensitive, _("\
 Set case sensitivity in name search.  (on/off/auto)"), _("\
 Show case sensitivity in name search.  (on/off/auto)"), _("\
 For Fortran the default is off; for other languages the default is on."),
-                                  set_case_command,
-                                  show_case_command,
-                                  &setlist, &showlist);
+                       set_case_command,
+                       show_case_command,
+                       &setlist, &showlist);
 
-  add_language (&unknown_language_defn);
-  add_language (&local_language_defn);
   add_language (&auto_language_defn);
+  add_language (&local_language_defn);
+  add_language (&unknown_language_defn);
 
   language = xstrdup ("auto");
   type = xstrdup ("auto");
index f5809c7..0807d82 100644 (file)
@@ -1,3 +1,10 @@
+2009-08-13  Pedro Alves  <pedro@codesourcery.com>
+
+       * gdb.base/default.exp: Adjust "set language test": it's now an
+       enum command.  Larger help string moved to "help set language".
+       * gdb.base/help.exp: Adjust "help set language" expected output,
+       now lists all known languages.
+
 2009-08-11  Nathan Froyd  <froydnj@codesourcery.com>
 
        * gdb.arch/altivec-abi.exp (altivec_abi_tests): Turn on printing of
index d47d263..a223982 100644 (file)
@@ -530,7 +530,7 @@ gdb_test "set history size" "Argument required .integer to set it to.*" "set his
 #test set history
 gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set history"
 #test set language
-gdb_test "set language" "The currently understood settings are:(\[^\r\n\]*\[\r\n\])+local or auto  *Automatic setting based on source file(\[^\r\n\]*\[\r\n\])+c  *Use the C language(\[^\r\n\]*\[\r\n\])+c\[+\]+  *Use the C\[+\]+ language(\[^\r\n\]*\[\r\n\])+modula-2  *Use the Modula-2 language.*" "set language"
+gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, c, c.., asm, minimal, fortran, objective-c, java, modula-2, pascal, scheme." "set language"
 #test set listsize
 gdb_test "set listsize" "Argument required .integer to set it to.*" "set listsize"
 #test set print "p" abbreviation
index 5fc680b..d76cc36 100644 (file)
@@ -418,7 +418,8 @@ test_prefix_command_help {"set history"} {
     "Generic command for setting command history parameters\.\[\r\n\]+"
 }
 # test help set language
-gdb_test "help set language" "Set the current source language\." "help set language"
+gdb_test "help set language" "Set the current source language\.\[\r\n\]+The currently understood settings are:(\[^\r\n\]*\[\r\n\])+local or auto  *Automatic setting based on source file(\[^\r\n\]*\[\r\n\])+c  *Use the C language(\[^\r\n\]*\[\r\n\])+c\[+\]+  *Use the C\[+\]+ language(\[^\r\n\]*\[\r\n\])+modula-2  *Use the Modula-2 language.*" "help set language"
+
 # test help set listsize
 gdb_test "help set listsize" "Set number of source lines gdb will list by default\." "help set listsize"
 # test help set print "p" abbreviation