(Ada) GDB crash printing expression with type casting
[deliverable/binutils-gdb.git] / gold / script.cc
index f2ac3f7879bb227cf82b5c38ece27169dd5a94d6..67540a59a301a8830f8f70ebc3f754fa61b979c8 100644 (file)
@@ -1,6 +1,6 @@
 // script.cc -- handle linker scripts for gold.
 
-// Copyright (C) 2006-2016 Free Software Foundation, Inc.
+// Copyright (C) 2006-2017 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -764,12 +764,6 @@ Lex::get_token(const char** pp)
 
   while (true)
     {
-      if (*p == '\0')
-       {
-         *pp = p;
-         return this->make_eof_token(p);
-       }
-
       // Skip whitespace quickly.
       while (*p == ' ' || *p == '\t' || *p == '\r')
        ++p;
@@ -782,8 +776,18 @@ Lex::get_token(const char** pp)
          continue;
        }
 
+      char c0 = *p;
+
+      if (c0 == '\0')
+       {
+         *pp = p;
+         return this->make_eof_token(p);
+       }
+
+      char c1 = p[1];
+
       // Skip C style comments.
-      if (p[0] == '/' && p[1] == '*')
+      if (c0 == '/' && c1 == '*')
        {
          int lineno = this->lineno_;
          int charpos = p - this->linestart_ + 1;
@@ -797,7 +801,7 @@ Lex::get_token(const char** pp)
        }
 
       // Skip line comments.
-      if (*p == '#')
+      if (c0 == '#')
        {
          *pp = p + 1;
          if (!this->skip_line_comment(pp))
@@ -807,7 +811,7 @@ Lex::get_token(const char** pp)
        }
 
       // Check for a name.
-      if (this->can_start_name(p[0], p[1]))
+      if (this->can_start_name(c0, c1))
        return this->gather_token(Token::TOKEN_STRING,
                                  &Lex::can_continue_name,
                                  p, p + 1, pp);
@@ -820,35 +824,38 @@ Lex::get_token(const char** pp)
          return this->gather_quoted_string(pp);
        }
 
+      // Be careful not to lookahead past the end of the buffer.
+      char c2 = (c1 == '\0' ? '\0' : p[2]);
+
       // Check for a number.
 
-      if (this->can_start_hex(p[0], p[1], p[2]))
+      if (this->can_start_hex(c0, c1, c2))
        return this->gather_token(Token::TOKEN_INTEGER,
                                  &Lex::can_continue_hex,
                                  p, p + 3, pp);
 
-      if (Lex::can_start_number(p[0]))
+      if (Lex::can_start_number(c0))
        return this->gather_token(Token::TOKEN_INTEGER,
                                  &Lex::can_continue_number,
                                  p, p + 1, pp);
 
       // Check for operators.
 
-      int opcode = Lex::three_char_operator(p[0], p[1], p[2]);
+      int opcode = Lex::three_char_operator(c0, c1, c2);
       if (opcode != 0)
        {
          *pp = p + 3;
          return this->make_token(opcode, p);
        }
 
-      opcode = Lex::two_char_operator(p[0], p[1]);
+      opcode = Lex::two_char_operator(c0, c1);
       if (opcode != 0)
        {
          *pp = p + 2;
          return this->make_token(opcode, p);
        }
 
-      opcode = Lex::one_char_operator(p[0]);
+      opcode = Lex::one_char_operator(c0);
       if (opcode != 0)
        {
          *pp = p + 1;
@@ -1755,6 +1762,7 @@ script_keyword_parsecodes[] =
   { "FLOAT", FLOAT },
   { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION },
   { "GROUP", GROUP },
+  { "HIDDEN", HIDDEN },
   { "HLL", HLL },
   { "INCLUDE", INCLUDE },
   { "INFO", INFO },
@@ -1792,6 +1800,7 @@ script_keyword_parsecodes[] =
   { "SIZEOF_HEADERS", SIZEOF_HEADERS },
   { "SORT", SORT_BY_NAME },
   { "SORT_BY_ALIGNMENT", SORT_BY_ALIGNMENT },
+  { "SORT_BY_INIT_PRIORITY", SORT_BY_INIT_PRIORITY },
   { "SORT_BY_NAME", SORT_BY_NAME },
   { "SPECIAL", SPECIAL },
   { "SQUAD", SQUAD },
@@ -2695,7 +2704,7 @@ script_add_library(void* closurev, const char* name, size_t length)
 
   if (name_string[0] != 'l')
     gold_error(_("library name must be prefixed with -l"));
-    
+
   Input_file_argument file(name_string.c_str() + 1,
                           Input_file_argument::INPUT_FILE_TYPE_LIBRARY,
                           "", false,
This page took 0.026266 seconds and 4 git commands to generate.