Add gdbserve.mt.
[binutils-gdb.git] / gdb / c-exp.y
index 72639799d66ad94243673fef679de960059e67a8..399b2aaa4a020c72e21cb2a720cf103243cc14e5 100644 (file)
@@ -1,5 +1,6 @@
 /* YACC parser for C expressions, for GDB.
-   Copyright (C) 1986, 1989, 1990, 1991 Free Software Foundation, Inc.
+   Copyright (C) 1986, 1989, 1990, 1991, 1993, 1994
+   Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -37,6 +38,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 %{
 
 #include "defs.h"
+#include <string.h>
 #include "expression.h"
 #include "value.h"
 #include "parser-defs.h"
@@ -1054,7 +1056,8 @@ parse_number (p, len, parsed_float, putithere)
                  << 16);
       if (high_bit == 0)
        /* A long long does not fit in a LONGEST.  */
-       high_bit = (unsigned LONGEST)1 << sizeof (LONGEST) * HOST_CHAR_BIT - 1;
+       high_bit =
+         (unsigned LONGEST)1 << (sizeof (LONGEST) * HOST_CHAR_BIT - 1);
       unsigned_type = builtin_type_unsigned_long_long;
       signed_type = builtin_type_long_long;
     }
@@ -1522,7 +1525,11 @@ yylex ()
       }
     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
         {
-#if 0
+#if 1
+         /* Despite the following flaw, we need to keep this code enabled.
+            Because we can get called from check_stub_method, if we don't
+            handle nested types then it screws many operations in any
+            program which uses nested types.  */
          /* In "A::x", if x is a member function of A and there happens
             to be a type (nested or not, since the stabs don't make that
             distinction) named x, then this code incorrectly thinks we
@@ -1567,7 +1574,7 @@ yylex ()
                      struct symbol *cur_sym;
                      /* As big as the whole rest of the expression, which is
                         at least big enough.  */
-                     char *tmp = alloca (strlen (namestart));
+                     char *tmp = alloca (strlen (namestart)+1);
 
                      memcpy (tmp, namestart, p - namestart);
                      tmp[p - namestart] = '\0';
@@ -1631,5 +1638,5 @@ void
 yyerror (msg)
      char *msg;
 {
-  error (msg ? msg : "Invalid syntax in expression.");
+  error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
 }