OSDN Git Service

* dwarf2out.c (lower_bound_default): For DW_LANG_Python return
[pf3gnuchains/gcc-fork.git] / gcc / c-lex.c
index 0b6fcc0..22a0068 100644 (file)
@@ -24,8 +24,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "coretypes.h"
 #include "tm.h"
 
-#include "real.h"
-#include "rtl.h"
 #include "tree.h"
 #include "input.h"
 #include "output.h"
@@ -37,7 +35,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "c-pragma.h"
 #include "toplev.h"
 #include "intl.h"
-#include "tm_p.h"
 #include "splay-tree.h"
 #include "debug.h"
 #include "target.h"
@@ -365,6 +362,7 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
            case CPP_WSTRING:
            case CPP_STRING16:
            case CPP_STRING32:
+           case CPP_UTF8STRING:
              type = lex_string (tok, value, true, true);
              break;
 
@@ -390,7 +388,7 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
     case CPP_HASH:
     case CPP_PASTE:
       {
-       unsigned char name[4];
+       unsigned char name[8];
 
        *cpp_spell_token (parse_in, tok, name, true) = 0;
 
@@ -423,7 +421,8 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
     case CPP_WSTRING:
     case CPP_STRING16:
     case CPP_STRING32:
-      if ((lex_flags & C_LEX_RAW_STRINGS) == 0)
+    case CPP_UTF8STRING:
+      if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0)
        {
          type = lex_string (tok, value, false,
                             (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0);
@@ -431,7 +430,7 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
        }
       *value = build_string (tok->val.str.len, (const char *) tok->val.str.text);
       break;
-      
+
     case CPP_PRAGMA:
       *value = build_int_cst (NULL, tok->val.pragma);
       break;
@@ -586,11 +585,11 @@ interpret_integer (const cpp_token *token, unsigned int flags)
       type = integer_types[itk];
       if (itk > itk_unsigned_long
          && (flags & CPP_N_WIDTH) != CPP_N_LARGE)
-       emit_diagnostic 
+       emit_diagnostic
          ((c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)
           ? DK_PEDWARN : DK_WARNING,
           input_location, OPT_Wlong_long,
-          (flags & CPP_N_UNSIGNED) 
+          (flags & CPP_N_UNSIGNED)
           ? "integer constant is too large for %<unsigned long%> type"
           : "integer constant is too large for %<long%> type");
     }
@@ -687,9 +686,9 @@ interpret_float (const cpp_token *token, unsigned int flags)
      has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
      can't handle them.  */
   copylen = token->val.str.len;
-  if (flags & CPP_N_DFLOAT) 
+  if (flags & CPP_N_DFLOAT)
     copylen -= 2;
-  else 
+  else
     {
       if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
        /* Must be an F or L or machine defined suffix.  */
@@ -730,7 +729,7 @@ interpret_float (const cpp_token *token, unsigned int flags)
     {
       REAL_VALUE_TYPE realvoidmode;
       int overflow = real_from_string (&realvoidmode, copy);
-      if (overflow < 0 || !REAL_VALUES_EQUAL (realvoidmode, dconst0)) 
+      if (overflow < 0 || !REAL_VALUES_EQUAL (realvoidmode, dconst0))
        warning (OPT_Woverflow, "floating constant truncated to zero");
     }
 
@@ -871,12 +870,13 @@ interpret_fixed (const cpp_token *token, unsigned int flags)
   return value;
 }
 
-/* Convert a series of STRING, WSTRING, STRING16 and/or STRING32 tokens
-   into a tree, performing string constant concatenation.  TOK is the
-   first of these.  VALP is the location to write the string into.
-   OBJC_STRING indicates whether an '@' token preceded the incoming token.
+/* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
+   UTF8STRING tokens into a tree, performing string constant
+   concatenation.  TOK is the first of these.  VALP is the location
+   to write the string into. OBJC_STRING indicates whether an '@' token
+   preceded the incoming token.
    Returns the CPP token type of the result (CPP_STRING, CPP_WSTRING,
-   CPP_STRING32, CPP_STRING16, or CPP_OBJC_STRING).
+   CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
 
    This is unfortunately more work than it should be.  If any of the
    strings in the series has an L prefix, the result is a wide string
@@ -921,6 +921,7 @@ lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
     case CPP_WSTRING:
     case CPP_STRING16:
     case CPP_STRING32:
+    case CPP_UTF8STRING:
       if (type != tok->type)
        {
          if (type == CPP_STRING)
@@ -966,6 +967,7 @@ lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
        {
        default:
        case CPP_STRING:
+       case CPP_UTF8STRING:
          value = build_string (1, "");
          break;
        case CPP_STRING16:
@@ -991,6 +993,7 @@ lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
     {
     default:
     case CPP_STRING:
+    case CPP_UTF8STRING:
       TREE_TYPE (value) = char_array_type_node;
       break;
     case CPP_STRING16: