1 /* Mainly the interface between cpplib and the C front ends.
2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
22 #include "coretypes.h"
27 #include "double-int.h"
34 #include "stringpool.h"
35 #include "stor-layout.h"
43 #include "splay-tree.h"
50 /* We may keep statistics about how long which files took to compile. */
51 static int header_time
, body_time
;
52 static splay_tree file_info_tree
;
54 int pending_lang_change
; /* If we need to switch languages - C++ only */
55 int c_header_level
; /* depth in C headers - C++ only */
57 static tree
interpret_integer (const cpp_token
*, unsigned int,
58 enum overflow_type
*);
59 static tree
interpret_float (const cpp_token
*, unsigned int, const char *,
60 enum overflow_type
*);
61 static tree
interpret_fixed (const cpp_token
*, unsigned int);
62 static enum integer_type_kind narrowest_unsigned_type
63 (const widest_int
&, unsigned int);
64 static enum integer_type_kind narrowest_signed_type
65 (const widest_int
&, unsigned int);
66 static enum cpp_ttype
lex_string (const cpp_token
*, tree
*, bool, bool);
67 static tree
lex_charconst (const cpp_token
*);
68 static void update_header_times (const char *);
69 static int dump_one_header (splay_tree_node
, void *);
70 static void cb_line_change (cpp_reader
*, const cpp_token
*, int);
71 static void cb_ident (cpp_reader
*, unsigned int, const cpp_string
*);
72 static void cb_def_pragma (cpp_reader
*, unsigned int);
73 static void cb_define (cpp_reader
*, unsigned int, cpp_hashnode
*);
74 static void cb_undef (cpp_reader
*, unsigned int, cpp_hashnode
*);
79 struct cpp_callbacks
*cb
;
80 struct c_fileinfo
*toplevel
;
82 /* The get_fileinfo data structure must be initialized before
83 cpp_read_main_file is called. */
84 toplevel
= get_fileinfo ("<top level>");
85 if (flag_detailed_statistics
)
88 body_time
= get_run_time ();
89 toplevel
->time
= body_time
;
92 cb
= cpp_get_callbacks (parse_in
);
94 cb
->line_change
= cb_line_change
;
96 cb
->def_pragma
= cb_def_pragma
;
97 cb
->valid_pch
= c_common_valid_pch
;
98 cb
->read_pch
= c_common_read_pch
;
99 cb
->has_attribute
= c_common_has_attribute
;
101 /* Set the debug callbacks if we can use them. */
102 if ((debug_info_level
== DINFO_LEVEL_VERBOSE
103 && (write_symbols
== DWARF2_DEBUG
104 || write_symbols
== VMS_AND_DWARF2_DEBUG
))
105 || flag_dump_go_spec
!= NULL
)
107 cb
->define
= cb_define
;
108 cb
->undef
= cb_undef
;
113 get_fileinfo (const char *name
)
116 struct c_fileinfo
*fi
;
119 file_info_tree
= splay_tree_new ((splay_tree_compare_fn
) strcmp
,
121 (splay_tree_delete_value_fn
) free
);
123 n
= splay_tree_lookup (file_info_tree
, (splay_tree_key
) name
);
125 return (struct c_fileinfo
*) n
->value
;
127 fi
= XNEW (struct c_fileinfo
);
129 fi
->interface_only
= 0;
130 fi
->interface_unknown
= 1;
131 splay_tree_insert (file_info_tree
, (splay_tree_key
) name
,
132 (splay_tree_value
) fi
);
137 update_header_times (const char *name
)
139 /* Changing files again. This means currently collected time
140 is charged against header time, and body time starts back at 0. */
141 if (flag_detailed_statistics
)
143 int this_time
= get_run_time ();
144 struct c_fileinfo
*file
= get_fileinfo (name
);
145 header_time
+= this_time
- body_time
;
146 file
->time
+= this_time
- body_time
;
147 body_time
= this_time
;
152 dump_one_header (splay_tree_node n
, void * ARG_UNUSED (dummy
))
154 print_time ((const char *) n
->key
,
155 ((struct c_fileinfo
*) n
->value
)->time
);
160 dump_time_statistics (void)
162 struct c_fileinfo
*file
= get_fileinfo (LOCATION_FILE (input_location
));
163 int this_time
= get_run_time ();
164 file
->time
+= this_time
- body_time
;
166 fprintf (stderr
, "\n******\n");
167 print_time ("header files (total)", header_time
);
168 print_time ("main file (total)", this_time
- body_time
);
169 fprintf (stderr
, "ratio = %g : 1\n",
170 (double) header_time
/ (double) (this_time
- body_time
));
171 fprintf (stderr
, "\n******\n");
173 splay_tree_foreach (file_info_tree
, dump_one_header
, 0);
177 cb_ident (cpp_reader
* ARG_UNUSED (pfile
),
178 unsigned int ARG_UNUSED (line
),
179 const cpp_string
* ARG_UNUSED (str
))
183 /* Convert escapes in the string. */
184 cpp_string cstr
= { 0, 0 };
185 if (cpp_interpret_string (pfile
, str
, 1, &cstr
, CPP_STRING
))
187 targetm
.asm_out
.output_ident ((const char *) cstr
.text
);
188 free (CONST_CAST (unsigned char *, cstr
.text
));
193 /* Called at the start of every non-empty line. TOKEN is the first
194 lexed token on the line. Used for diagnostic line numbers. */
196 cb_line_change (cpp_reader
* ARG_UNUSED (pfile
), const cpp_token
*token
,
199 if (token
->type
!= CPP_EOF
&& !parsing_args
)
200 input_location
= token
->src_loc
;
204 fe_file_change (const struct line_map
*new_map
)
209 if (new_map
->reason
== LC_ENTER
)
211 /* Don't stack the main buffer on the input stack;
212 we already did in compile_file. */
213 if (!MAIN_FILE_P (new_map
))
215 unsigned int included_at
= LAST_SOURCE_LINE_LOCATION (new_map
- 1);
217 if (included_at
> BUILTINS_LOCATION
)
218 line
= SOURCE_LINE (new_map
- 1, included_at
);
220 input_location
= new_map
->start_location
;
221 (*debug_hooks
->start_source_file
) (line
, LINEMAP_FILE (new_map
));
222 #ifndef NO_IMPLICIT_EXTERN_C
225 else if (LINEMAP_SYSP (new_map
) == 2)
228 ++pending_lang_change
;
233 else if (new_map
->reason
== LC_LEAVE
)
235 #ifndef NO_IMPLICIT_EXTERN_C
236 if (c_header_level
&& --c_header_level
== 0)
238 if (LINEMAP_SYSP (new_map
) == 2)
239 warning (0, "badly nested C headers from preprocessor");
240 --pending_lang_change
;
243 input_location
= new_map
->start_location
;
245 (*debug_hooks
->end_source_file
) (LINEMAP_LINE (new_map
));
248 update_header_times (LINEMAP_FILE (new_map
));
249 input_location
= new_map
->start_location
;
253 cb_def_pragma (cpp_reader
*pfile
, source_location loc
)
255 /* Issue a warning message if we have been asked to do so. Ignore
256 unknown pragmas in system headers unless an explicit
257 -Wunknown-pragmas has been given. */
258 if (warn_unknown_pragmas
> in_system_header_at (input_location
))
260 const unsigned char *space
, *name
;
262 location_t fe_loc
= loc
;
264 space
= name
= (const unsigned char *) "";
265 s
= cpp_get_token (pfile
);
266 if (s
->type
!= CPP_EOF
)
268 space
= cpp_token_as_text (pfile
, s
);
269 s
= cpp_get_token (pfile
);
270 if (s
->type
== CPP_NAME
)
271 name
= cpp_token_as_text (pfile
, s
);
274 warning_at (fe_loc
, OPT_Wunknown_pragmas
, "ignoring #pragma %s %s",
279 /* #define callback for DWARF and DWARF2 debug info. */
281 cb_define (cpp_reader
*pfile
, source_location loc
, cpp_hashnode
*node
)
283 const struct line_map
*map
= linemap_lookup (line_table
, loc
);
284 (*debug_hooks
->define
) (SOURCE_LINE (map
, loc
),
285 (const char *) cpp_macro_definition (pfile
, node
));
288 /* #undef callback for DWARF and DWARF2 debug info. */
290 cb_undef (cpp_reader
* ARG_UNUSED (pfile
), source_location loc
,
293 const struct line_map
*map
= linemap_lookup (line_table
, loc
);
294 (*debug_hooks
->undef
) (SOURCE_LINE (map
, loc
),
295 (const char *) NODE_NAME (node
));
298 /* Wrapper around cpp_get_token to skip CPP_PADDING tokens
299 and not consume CPP_EOF. */
300 static const cpp_token
*
301 get_token_no_padding (cpp_reader
*pfile
)
305 const cpp_token
*ret
= cpp_peek_token (pfile
, 0);
306 if (ret
->type
== CPP_EOF
)
308 ret
= cpp_get_token (pfile
);
309 if (ret
->type
!= CPP_PADDING
)
314 /* Callback for has_attribute. */
316 c_common_has_attribute (cpp_reader
*pfile
)
319 tree attr_name
= NULL_TREE
;
320 const cpp_token
*token
;
322 token
= get_token_no_padding (pfile
);
323 if (token
->type
!= CPP_OPEN_PAREN
)
325 cpp_error (pfile
, CPP_DL_ERROR
,
326 "missing '(' after \"__has_attribute\"");
329 token
= get_token_no_padding (pfile
);
330 if (token
->type
== CPP_NAME
)
332 attr_name
= get_identifier ((const char *)
333 cpp_token_as_text (pfile
, token
));
334 if (c_dialect_cxx ())
337 const cpp_token
*nxt_token
;
339 nxt_token
= cpp_peek_token (pfile
, idx
++);
340 while (nxt_token
->type
== CPP_PADDING
);
341 if (nxt_token
->type
== CPP_SCOPE
)
343 get_token_no_padding (pfile
); // Eat scope.
344 nxt_token
= get_token_no_padding (pfile
);
345 if (nxt_token
->type
== CPP_NAME
)
347 tree attr_ns
= attr_name
;
349 = get_identifier ((const char *)
350 cpp_token_as_text (pfile
, nxt_token
));
351 attr_name
= build_tree_list (attr_ns
, attr_id
);
355 cpp_error (pfile
, CPP_DL_ERROR
,
356 "attribute identifier required after scope");
357 attr_name
= NULL_TREE
;
364 const struct attribute_spec
*attr
= lookup_attribute_spec (attr_name
);
367 if (TREE_CODE (attr_name
) == TREE_LIST
)
368 attr_name
= TREE_VALUE (attr_name
);
369 if (is_attribute_p ("noreturn", attr_name
))
371 else if (is_attribute_p ("deprecated", attr_name
))
380 cpp_error (pfile
, CPP_DL_ERROR
,
381 "macro \"__has_attribute\" requires an identifier");
385 if (get_token_no_padding (pfile
)->type
!= CPP_CLOSE_PAREN
)
386 cpp_error (pfile
, CPP_DL_ERROR
,
387 "missing ')' after \"__has_attribute\"");
392 /* Read a token and return its type. Fill *VALUE with its value, if
393 applicable. Fill *CPP_FLAGS with the token's flags, if it is
397 c_lex_with_flags (tree
*value
, location_t
*loc
, unsigned char *cpp_flags
,
400 static bool no_more_pch
;
401 const cpp_token
*tok
;
403 unsigned char add_flags
= 0;
404 enum overflow_type overflow
= OT_NONE
;
406 timevar_push (TV_CPP
);
408 tok
= cpp_get_token_with_location (parse_in
, loc
);
418 *value
= HT_IDENT_TO_GCC_IDENT (HT_NODE (tok
->val
.node
.node
));
423 const char *suffix
= NULL
;
424 unsigned int flags
= cpp_classify_number (parse_in
, tok
, &suffix
, *loc
);
426 switch (flags
& CPP_N_CATEGORY
)
429 /* cpplib has issued an error. */
430 *value
= error_mark_node
;
434 /* C++ uses '0' to mark virtual functions as pure.
435 Set PURE_ZERO to pass this information to the C++ parser. */
436 if (tok
->val
.str
.len
== 1 && *tok
->val
.str
.text
== '0')
437 add_flags
= PURE_ZERO
;
438 *value
= interpret_integer (tok
, flags
, &overflow
);
442 *value
= interpret_float (tok
, flags
, suffix
, &overflow
);
449 if (flags
& CPP_N_USERDEF
)
453 tree suffix_id
= get_identifier (suffix
);
454 int len
= tok
->val
.str
.len
- strlen (suffix
);
455 /* If this is going to be used as a C string to pass to a
456 raw literal operator, we need to add a trailing NUL. */
457 tree num_string
= build_string (len
+ 1,
458 (const char *) tok
->val
.str
.text
);
459 TREE_TYPE (num_string
) = char_array_type_node
;
460 num_string
= fix_string_type (num_string
);
461 str
= CONST_CAST (char *, TREE_STRING_POINTER (num_string
));
463 literal
= build_userdef_literal (suffix_id
, *value
, overflow
,
471 /* An @ may give the next token special significance in Objective-C. */
472 if (c_dialect_objc ())
474 location_t atloc
= *loc
;
478 tok
= cpp_get_token_with_location (parse_in
, &newloc
);
490 type
= lex_string (tok
, value
, true, true);
494 *value
= HT_IDENT_TO_GCC_IDENT (HT_NODE (tok
->val
.node
.node
));
495 if (OBJC_IS_AT_KEYWORD (C_RID_CODE (*value
))
496 || OBJC_IS_CXX_KEYWORD (C_RID_CODE (*value
)))
499 /* Note the complication: if we found an OBJC_CXX
500 keyword, for example, 'class', we will be
501 returning a token of type CPP_AT_NAME and rid
502 code RID_CLASS (not RID_AT_CLASS). The language
503 parser needs to convert that to RID_AT_CLASS.
511 error_at (atloc
, "stray %<@%> in program");
522 unsigned char name
[8];
524 *cpp_spell_token (parse_in
, tok
, name
, true) = 0;
526 error_at (*loc
, "stray %qs in program", name
);
533 cppchar_t c
= tok
->val
.str
.text
[0];
535 if (c
== '"' || c
== '\'')
536 error ("missing terminating %c character", (int) c
);
537 else if (ISGRAPH (c
))
538 error ("stray %qc in program", (int) c
);
540 error ("stray %<\\%o%> in program", (int) c
);
544 case CPP_CHAR_USERDEF
:
545 case CPP_WCHAR_USERDEF
:
546 case CPP_CHAR16_USERDEF
:
547 case CPP_CHAR32_USERDEF
:
550 cpp_token temp_tok
= *tok
;
551 const char *suffix
= cpp_get_userdef_suffix (tok
);
552 temp_tok
.val
.str
.len
-= strlen (suffix
);
553 temp_tok
.type
= cpp_userdef_char_remove_type (type
);
554 literal
= build_userdef_literal (get_identifier (suffix
),
555 lex_charconst (&temp_tok
),
565 *value
= lex_charconst (tok
);
568 case CPP_STRING_USERDEF
:
569 case CPP_WSTRING_USERDEF
:
570 case CPP_STRING16_USERDEF
:
571 case CPP_STRING32_USERDEF
:
572 case CPP_UTF8STRING_USERDEF
:
574 tree literal
, string
;
575 const char *suffix
= cpp_get_userdef_suffix (tok
);
576 string
= build_string (tok
->val
.str
.len
- strlen (suffix
),
577 (const char *) tok
->val
.str
.text
);
578 literal
= build_userdef_literal (get_identifier (suffix
),
579 string
, OT_NONE
, NULL_TREE
);
589 if ((lex_flags
& C_LEX_STRING_NO_JOIN
) == 0)
591 type
= lex_string (tok
, value
, false,
592 (lex_flags
& C_LEX_STRING_NO_TRANSLATE
) == 0);
595 *value
= build_string (tok
->val
.str
.len
, (const char *) tok
->val
.str
.text
);
599 *value
= build_int_cst (integer_type_node
, tok
->val
.pragma
);
602 /* These tokens should not be visible outside cpplib. */
603 case CPP_HEADER_NAME
:
607 /* CPP_COMMENT will appear when compiling with -C and should be
618 *cpp_flags
= tok
->flags
| add_flags
;
623 c_common_no_more_pch ();
626 timevar_pop (TV_CPP
);
631 /* Returns the narrowest C-visible unsigned type, starting with the
632 minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
635 static enum integer_type_kind
636 narrowest_unsigned_type (const widest_int
&val
, unsigned int flags
)
640 if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
641 itk
= itk_unsigned_int
;
642 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
643 itk
= itk_unsigned_long
;
645 itk
= itk_unsigned_long_long
;
647 for (; itk
< itk_none
; itk
+= 2 /* skip unsigned types */)
651 if (integer_types
[itk
] == NULL_TREE
)
653 upper
= TYPE_MAX_VALUE (integer_types
[itk
]);
655 if (wi::geu_p (wi::to_widest (upper
), val
))
656 return (enum integer_type_kind
) itk
;
662 /* Ditto, but narrowest signed type. */
663 static enum integer_type_kind
664 narrowest_signed_type (const widest_int
&val
, unsigned int flags
)
668 if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
670 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
675 for (; itk
< itk_none
; itk
+= 2 /* skip signed types */)
679 if (integer_types
[itk
] == NULL_TREE
)
681 upper
= TYPE_MAX_VALUE (integer_types
[itk
]);
683 if (wi::geu_p (wi::to_widest (upper
), val
))
684 return (enum integer_type_kind
) itk
;
690 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
692 interpret_integer (const cpp_token
*token
, unsigned int flags
,
693 enum overflow_type
*overflow
)
696 enum integer_type_kind itk
;
698 HOST_WIDE_INT ival
[3];
702 integer
= cpp_interpret_integer (parse_in
, token
, flags
);
703 if (integer
.overflow
)
704 *overflow
= OT_OVERFLOW
;
706 ival
[0] = integer
.low
;
707 ival
[1] = integer
.high
;
709 widest_int wval
= widest_int::from_array (ival
, 3);
711 /* The type of a constant with a U suffix is straightforward. */
712 if (flags
& CPP_N_UNSIGNED
)
713 itk
= narrowest_unsigned_type (wval
, flags
);
716 /* The type of a potentially-signed integer constant varies
717 depending on the base it's in, the standard in use, and the
719 enum integer_type_kind itk_u
720 = narrowest_unsigned_type (wval
, flags
);
721 enum integer_type_kind itk_s
722 = narrowest_signed_type (wval
, flags
);
724 /* In both C89 and C99, octal and hex constants may be signed or
725 unsigned, whichever fits tighter. We do not warn about this
726 choice differing from the traditional choice, as the constant
727 is probably a bit pattern and either way will work. */
728 if ((flags
& CPP_N_RADIX
) != CPP_N_DECIMAL
)
729 itk
= MIN (itk_u
, itk_s
);
732 /* In C99, decimal constants are always signed.
733 In C89, decimal constants that don't fit in long have
734 undefined behavior; we try to make them unsigned long.
735 In GCC's extended C89, that last is true of decimal
736 constants that don't fit in long long, too. */
739 if (itk_s
> itk_u
&& itk_s
> itk_long
)
743 if (itk_u
< itk_unsigned_long
)
744 itk_u
= itk_unsigned_long
;
746 warning (0, "this decimal constant is unsigned only in ISO C90");
749 warning (OPT_Wtraditional
,
750 "this decimal constant would be unsigned in ISO C90");
756 /* cpplib has already issued a warning for overflow. */
757 type
= ((flags
& CPP_N_UNSIGNED
)
758 ? widest_unsigned_literal_type_node
759 : widest_integer_literal_type_node
);
762 type
= integer_types
[itk
];
763 if (itk
> itk_unsigned_long
764 && (flags
& CPP_N_WIDTH
) != CPP_N_LARGE
)
766 ((c_dialect_cxx () ? cxx_dialect
== cxx98
: !flag_isoc99
)
767 ? DK_PEDWARN
: DK_WARNING
,
768 input_location
, OPT_Wlong_long
,
769 (flags
& CPP_N_UNSIGNED
)
770 ? "integer constant is too large for %<unsigned long%> type"
771 : "integer constant is too large for %<long%> type");
774 value
= wide_int_to_tree (type
, wval
);
776 /* Convert imaginary to a complex type. */
777 if (flags
& CPP_N_IMAGINARY
)
778 value
= build_complex (NULL_TREE
, build_int_cst (type
, 0), value
);
783 /* Interpret TOKEN, a floating point number with FLAGS as classified
784 by cpplib. For C++0X SUFFIX may contain a user-defined literal suffix. */
786 interpret_float (const cpp_token
*token
, unsigned int flags
,
787 const char *suffix
, enum overflow_type
*overflow
)
792 REAL_VALUE_TYPE real
;
793 REAL_VALUE_TYPE real_trunc
;
799 /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64
800 pragma has been used and is either double or _Decimal64. Types
801 that are not allowed with decimal float default to double. */
802 if (flags
& CPP_N_DEFAULT
)
804 flags
^= CPP_N_DEFAULT
;
805 flags
|= CPP_N_MEDIUM
;
807 if (((flags
& CPP_N_HEX
) == 0) && ((flags
& CPP_N_IMAGINARY
) == 0))
809 warning (OPT_Wunsuffixed_float_constants
,
810 "unsuffixed float constant");
811 if (float_const_decimal64_p ())
812 flags
|= CPP_N_DFLOAT
;
816 /* Decode _Fract and _Accum. */
817 if (flags
& CPP_N_FRACT
|| flags
& CPP_N_ACCUM
)
818 return interpret_fixed (token
, flags
);
820 /* Decode type based on width and properties. */
821 if (flags
& CPP_N_DFLOAT
)
822 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
823 type
= dfloat128_type_node
;
824 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
825 type
= dfloat32_type_node
;
827 type
= dfloat64_type_node
;
829 if (flags
& CPP_N_WIDTH_MD
)
834 if ((flags
& CPP_N_WIDTH_MD
) == CPP_N_MD_W
)
839 mode
= targetm
.c
.mode_for_suffix (suffix
);
840 if (mode
== VOIDmode
)
842 error ("unsupported non-standard suffix on floating constant");
844 return error_mark_node
;
847 pedwarn (input_location
, OPT_Wpedantic
, "non-standard suffix on floating constant");
849 type
= c_common_type_for_mode (mode
, 0);
852 else if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
853 type
= long_double_type_node
;
854 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
855 || flag_single_precision_constant
)
856 type
= float_type_node
;
858 type
= double_type_node
;
860 const_type
= excess_precision_type (type
);
864 /* Copy the constant to a nul-terminated buffer. If the constant
865 has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
866 can't handle them. */
867 copylen
= token
->val
.str
.len
;
868 if (flags
& CPP_N_USERDEF
)
869 copylen
-= strlen (suffix
);
870 else if (flags
& CPP_N_DFLOAT
)
874 if ((flags
& CPP_N_WIDTH
) != CPP_N_MEDIUM
)
875 /* Must be an F or L or machine defined suffix. */
877 if (flags
& CPP_N_IMAGINARY
)
882 copy
= (char *) alloca (copylen
+ 1);
883 if (cxx_dialect
> cxx11
)
886 for (size_t i
= 0; i
< copylen
; ++i
)
887 if (token
->val
.str
.text
[i
] != '\'')
888 copy
[maxlen
++] = token
->val
.str
.text
[i
];
893 memcpy (copy
, token
->val
.str
.text
, copylen
);
894 copy
[copylen
] = '\0';
897 real_from_string3 (&real
, copy
, TYPE_MODE (const_type
));
898 if (const_type
!= type
)
899 /* Diagnosing if the result of converting the value with excess
900 precision to the semantic type would overflow (with associated
901 double rounding) is more appropriate than diagnosing if the
902 result of converting the string directly to the semantic type
904 real_convert (&real_trunc
, TYPE_MODE (type
), &real
);
906 /* Both C and C++ require a diagnostic for a floating constant
907 outside the range of representable values of its type. Since we
908 have __builtin_inf* to produce an infinity, this is now a
909 mandatory pedwarn if the target does not support infinities. */
910 if (REAL_VALUE_ISINF (real
)
911 || (const_type
!= type
&& REAL_VALUE_ISINF (real_trunc
)))
913 *overflow
= OT_OVERFLOW
;
914 if (!(flags
& CPP_N_USERDEF
))
916 if (!MODE_HAS_INFINITIES (TYPE_MODE (type
)))
917 pedwarn (input_location
, 0,
918 "floating constant exceeds range of %qT", type
);
920 warning (OPT_Woverflow
,
921 "floating constant exceeds range of %qT", type
);
924 /* We also give a warning if the value underflows. */
925 else if (REAL_VALUES_EQUAL (real
, dconst0
)
926 || (const_type
!= type
927 && REAL_VALUES_EQUAL (real_trunc
, dconst0
)))
929 REAL_VALUE_TYPE realvoidmode
;
930 int oflow
= real_from_string (&realvoidmode
, copy
);
931 *overflow
= (oflow
== 0 ? OT_NONE
932 : (oflow
< 0 ? OT_UNDERFLOW
: OT_OVERFLOW
));
933 if (!(flags
& CPP_N_USERDEF
))
935 if (oflow
< 0 || !REAL_VALUES_EQUAL (realvoidmode
, dconst0
))
936 warning (OPT_Woverflow
, "floating constant truncated to zero");
940 /* Create a node with determined type and value. */
941 value
= build_real (const_type
, real
);
942 if (flags
& CPP_N_IMAGINARY
)
944 value
= build_complex (NULL_TREE
, convert (const_type
,
945 integer_zero_node
), value
);
946 if (type
!= const_type
)
948 const_type
= TREE_TYPE (value
);
949 type
= build_complex_type (type
);
953 if (type
!= const_type
)
954 value
= build1 (EXCESS_PRECISION_EXPR
, type
, value
);
959 /* Interpret TOKEN, a fixed-point number with FLAGS as classified
963 interpret_fixed (const cpp_token
*token
, unsigned int flags
)
967 FIXED_VALUE_TYPE fixed
;
971 copylen
= token
->val
.str
.len
;
973 if (flags
& CPP_N_FRACT
) /* _Fract. */
975 if (flags
& CPP_N_UNSIGNED
) /* Unsigned _Fract. */
977 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
979 type
= unsigned_long_long_fract_type_node
;
982 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
984 type
= unsigned_long_fract_type_node
;
987 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
989 type
= unsigned_short_fract_type_node
;
994 type
= unsigned_fract_type_node
;
998 else /* Signed _Fract. */
1000 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
1002 type
= long_long_fract_type_node
;
1005 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
1007 type
= long_fract_type_node
;
1010 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
1012 type
= short_fract_type_node
;
1017 type
= fract_type_node
;
1024 if (flags
& CPP_N_UNSIGNED
) /* Unsigned _Accum. */
1026 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
1028 type
= unsigned_long_long_accum_type_node
;
1031 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
1033 type
= unsigned_long_accum_type_node
;
1036 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
1038 type
= unsigned_short_accum_type_node
;
1043 type
= unsigned_accum_type_node
;
1047 else /* Signed _Accum. */
1049 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
1051 type
= long_long_accum_type_node
;
1054 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
1056 type
= long_accum_type_node
;
1059 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
1061 type
= short_accum_type_node
;
1066 type
= accum_type_node
;
1072 copy
= (char *) alloca (copylen
+ 1);
1073 memcpy (copy
, token
->val
.str
.text
, copylen
);
1074 copy
[copylen
] = '\0';
1076 fixed_from_string (&fixed
, copy
, TYPE_MODE (type
));
1078 /* Create a node with determined type and value. */
1079 value
= build_fixed (type
, fixed
);
1084 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
1085 UTF8STRING tokens into a tree, performing string constant
1086 concatenation. TOK is the first of these. VALP is the location to
1087 write the string into. OBJC_STRING indicates whether an '@' token
1088 preceded the incoming token (in that case, the strings can either
1089 be ObjC strings, preceded by a single '@', or normal strings, not
1090 preceded by '@'. The result will be a CPP_OBJC_STRING). Returns
1091 the CPP token type of the result (CPP_STRING, CPP_WSTRING,
1092 CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
1094 This is unfortunately more work than it should be. If any of the
1095 strings in the series has an L prefix, the result is a wide string
1096 (6.4.5p4). Whether or not the result is a wide string affects the
1097 meaning of octal and hexadecimal escapes (6.4.4.4p6,9). But escape
1098 sequences do not continue across the boundary between two strings in
1099 a series (6.4.5p7), so we must not lose the boundaries. Therefore
1100 cpp_interpret_string takes a vector of cpp_string structures, which
1101 we must arrange to provide. */
1103 static enum cpp_ttype
1104 lex_string (const cpp_token
*tok
, tree
*valp
, bool objc_string
, bool translate
)
1108 struct obstack str_ob
;
1110 enum cpp_ttype type
= tok
->type
;
1112 /* Try to avoid the overhead of creating and destroying an obstack
1113 for the common case of just one string. */
1114 cpp_string str
= tok
->val
.str
;
1115 cpp_string
*strs
= &str
;
1117 /* objc_at_sign_was_seen is only used when doing Objective-C string
1118 concatenation. It is 'true' if we have seen an '@' before the
1119 current string, and 'false' if not. We must see exactly one or
1120 zero '@' before each string. */
1121 bool objc_at_sign_was_seen
= false;
1124 tok
= cpp_get_token (parse_in
);
1132 if (objc_at_sign_was_seen
)
1133 error ("repeated %<@%> before Objective-C string");
1135 objc_at_sign_was_seen
= true;
1146 case CPP_UTF8STRING
:
1147 if (type
!= tok
->type
)
1149 if (type
== CPP_STRING
)
1152 error ("unsupported non-standard concatenation of string literals");
1158 gcc_obstack_init (&str_ob
);
1159 obstack_grow (&str_ob
, &str
, sizeof (cpp_string
));
1163 obstack_grow (&str_ob
, &tok
->val
.str
, sizeof (cpp_string
));
1165 objc_at_sign_was_seen
= false;
1169 /* It is an error if we saw a '@' with no following string. */
1170 if (objc_at_sign_was_seen
)
1171 error ("stray %<@%> in program");
1173 /* We have read one more token than we want. */
1174 _cpp_backup_tokens (parse_in
, 1);
1176 strs
= XOBFINISH (&str_ob
, cpp_string
*);
1178 if (concats
&& !objc_string
&& !in_system_header_at (input_location
))
1179 warning (OPT_Wtraditional
,
1180 "traditional C rejects string constant concatenation");
1183 ? cpp_interpret_string
: cpp_interpret_string_notranslate
)
1184 (parse_in
, strs
, concats
+ 1, &istr
, type
))
1186 value
= build_string (istr
.len
, (const char *) istr
.text
);
1187 free (CONST_CAST (unsigned char *, istr
.text
));
1191 /* Callers cannot generally handle error_mark_node in this context,
1192 so return the empty string instead. cpp_interpret_string has
1198 case CPP_UTF8STRING
:
1199 value
= build_string (1, "");
1202 value
= build_string (TYPE_PRECISION (char16_type_node
)
1203 / TYPE_PRECISION (char_type_node
),
1204 "\0"); /* char16_t is 16 bits */
1207 value
= build_string (TYPE_PRECISION (char32_type_node
)
1208 / TYPE_PRECISION (char_type_node
),
1209 "\0\0\0"); /* char32_t is 32 bits */
1212 value
= build_string (TYPE_PRECISION (wchar_type_node
)
1213 / TYPE_PRECISION (char_type_node
),
1214 "\0\0\0"); /* widest supported wchar_t
1224 case CPP_UTF8STRING
:
1225 TREE_TYPE (value
) = char_array_type_node
;
1228 TREE_TYPE (value
) = char16_array_type_node
;
1231 TREE_TYPE (value
) = char32_array_type_node
;
1234 TREE_TYPE (value
) = wchar_array_type_node
;
1236 *valp
= fix_string_type (value
);
1239 obstack_free (&str_ob
, 0);
1241 return objc_string
? CPP_OBJC_STRING
: type
;
1244 /* Converts a (possibly wide) character constant token into a tree. */
1246 lex_charconst (const cpp_token
*token
)
1250 unsigned int chars_seen
;
1253 result
= cpp_interpret_charconst (parse_in
, token
,
1254 &chars_seen
, &unsignedp
);
1256 if (token
->type
== CPP_WCHAR
)
1257 type
= wchar_type_node
;
1258 else if (token
->type
== CPP_CHAR32
)
1259 type
= char32_type_node
;
1260 else if (token
->type
== CPP_CHAR16
)
1261 type
= char16_type_node
;
1262 /* In C, a character constant has type 'int'.
1263 In C++ 'char', but multi-char charconsts have type 'int'. */
1264 else if (!c_dialect_cxx () || chars_seen
> 1)
1265 type
= integer_type_node
;
1267 type
= char_type_node
;
1269 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1270 before possibly widening to HOST_WIDE_INT for build_int_cst. */
1271 if (unsignedp
|| (cppchar_signed_t
) result
>= 0)
1272 value
= build_int_cst (type
, result
);
1274 value
= build_int_cst (type
, (cppchar_signed_t
) result
);