Avoid expression parsing crash with unknown language
authorTom Tromey <tromey@adacore.com>
Thu, 15 Jul 2021 16:13:18 +0000 (10:13 -0600)
committerTom Tromey <tromey@adacore.com>
Thu, 15 Jul 2021 16:13:18 +0000 (10:13 -0600)
PR gdb/28093 points out that gdb crashes when language is set to
"unknown" and expression parsing is attempted.  At first I thought
this was a regression due to the expression rewrite, but it turns out
that older versions crash as well.

This patch avoids the crash by changing the default expression parser
to throw an exception.  I think this is preferable -- the current
behavior of silently doing nothing does not really make sense.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28093

gdb/language.c
gdb/testsuite/gdb.base/langs.exp

index 0d1e3848de858c0113e8f608768155a86f602fd4..45ce2ebcc92c82a52a9ea5f72b2b7a658f807ed9 100644 (file)
@@ -825,8 +825,8 @@ public:
 
   int parser (struct parser_state *ps) const override
   {
-    /* No parsing is done, just claim success.  */
-    return 1;
+    error (_("expression parsing not implemented for language \"%s\""),
+          natural_name ());
   }
 
   /* See language.h.  */
index 15908b0a19aaefece20b48c18c3f2fac5389f525..631401a8eabbb4b0a763a38cd0561095601e75f4 100644 (file)
@@ -111,6 +111,12 @@ if [runto csub] then {
              "set lang to minimal"
     
     gdb_test "print x" " = 5000" "print parameter value"
+
+    # Ensure this at least does not crash.
+    gdb_test_no_output "set language unknown"
+    gdb_test "print x" \
+       "expression parsing not implemented for language .Unknown." \
+       "expression parsing does not crash for unknown"
 }
 
 set timeout $oldtimeout