1 /* Mainly the interface between cpplib and the C front ends.
2 Copyright (C) 1987-2018 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"
26 #include "stringpool.h"
27 #include "stor-layout.h"
30 #include "file-prefix-map.h" /* remap_macro_filename() */
34 /* We may keep statistics about how long which files took to compile. */
35 static int header_time
, body_time
;
36 static splay_tree file_info_tree
;
38 int pending_lang_change
; /* If we need to switch languages - C++ only */
39 int c_header_level
; /* depth in C headers - C++ only */
41 static tree
interpret_integer (const cpp_token
*, unsigned int,
42 enum overflow_type
*);
43 static tree
interpret_float (const cpp_token
*, unsigned int, const char *,
44 enum overflow_type
*);
45 static tree
interpret_fixed (const cpp_token
*, unsigned int);
46 static enum integer_type_kind narrowest_unsigned_type
47 (const widest_int
&, unsigned int);
48 static enum integer_type_kind narrowest_signed_type
49 (const widest_int
&, unsigned int);
50 static enum cpp_ttype
lex_string (const cpp_token
*, tree
*, bool, bool);
51 static tree
lex_charconst (const cpp_token
*);
52 static void update_header_times (const char *);
53 static int dump_one_header (splay_tree_node
, void *);
54 static void cb_line_change (cpp_reader
*, const cpp_token
*, int);
55 static void cb_ident (cpp_reader
*, unsigned int, const cpp_string
*);
56 static void cb_def_pragma (cpp_reader
*, unsigned int);
57 static void cb_define (cpp_reader
*, unsigned int, cpp_hashnode
*);
58 static void cb_undef (cpp_reader
*, unsigned int, cpp_hashnode
*);
63 struct cpp_callbacks
*cb
;
64 struct c_fileinfo
*toplevel
;
66 /* The get_fileinfo data structure must be initialized before
67 cpp_read_main_file is called. */
68 toplevel
= get_fileinfo ("<top level>");
69 if (flag_detailed_statistics
)
72 body_time
= get_run_time ();
73 toplevel
->time
= body_time
;
76 cb
= cpp_get_callbacks (parse_in
);
78 cb
->line_change
= cb_line_change
;
80 cb
->def_pragma
= cb_def_pragma
;
81 cb
->valid_pch
= c_common_valid_pch
;
82 cb
->read_pch
= c_common_read_pch
;
83 cb
->has_attribute
= c_common_has_attribute
;
84 cb
->get_source_date_epoch
= cb_get_source_date_epoch
;
85 cb
->get_suggestion
= cb_get_suggestion
;
86 cb
->remap_filename
= remap_macro_filename
;
88 /* Set the debug callbacks if we can use them. */
89 if ((debug_info_level
== DINFO_LEVEL_VERBOSE
90 && (write_symbols
== DWARF2_DEBUG
91 || write_symbols
== VMS_AND_DWARF2_DEBUG
))
92 || flag_dump_go_spec
!= NULL
)
94 cb
->define
= cb_define
;
100 get_fileinfo (const char *name
)
103 struct c_fileinfo
*fi
;
106 file_info_tree
= splay_tree_new ((splay_tree_compare_fn
)
107 (void (*) (void)) strcmp
,
109 (splay_tree_delete_value_fn
)
110 (void (*) (void)) free
);
112 n
= splay_tree_lookup (file_info_tree
, (splay_tree_key
) name
);
114 return (struct c_fileinfo
*) n
->value
;
116 fi
= XNEW (struct c_fileinfo
);
118 fi
->interface_only
= 0;
119 fi
->interface_unknown
= 1;
120 splay_tree_insert (file_info_tree
, (splay_tree_key
) name
,
121 (splay_tree_value
) fi
);
126 update_header_times (const char *name
)
128 /* Changing files again. This means currently collected time
129 is charged against header time, and body time starts back at 0. */
130 if (flag_detailed_statistics
)
132 int this_time
= get_run_time ();
133 struct c_fileinfo
*file
= get_fileinfo (name
);
134 header_time
+= this_time
- body_time
;
135 file
->time
+= this_time
- body_time
;
136 body_time
= this_time
;
141 dump_one_header (splay_tree_node n
, void * ARG_UNUSED (dummy
))
143 print_time ((const char *) n
->key
,
144 ((struct c_fileinfo
*) n
->value
)->time
);
149 dump_time_statistics (void)
151 struct c_fileinfo
*file
= get_fileinfo (LOCATION_FILE (input_location
));
152 int this_time
= get_run_time ();
153 file
->time
+= this_time
- body_time
;
155 fprintf (stderr
, "\n******\n");
156 print_time ("header files (total)", header_time
);
157 print_time ("main file (total)", this_time
- body_time
);
158 fprintf (stderr
, "ratio = %g : 1\n",
159 (double) header_time
/ (double) (this_time
- body_time
));
160 fprintf (stderr
, "\n******\n");
162 splay_tree_foreach (file_info_tree
, dump_one_header
, 0);
166 cb_ident (cpp_reader
* ARG_UNUSED (pfile
),
167 unsigned int ARG_UNUSED (line
),
168 const cpp_string
* ARG_UNUSED (str
))
172 /* Convert escapes in the string. */
173 cpp_string cstr
= { 0, 0 };
174 if (cpp_interpret_string (pfile
, str
, 1, &cstr
, CPP_STRING
))
176 targetm
.asm_out
.output_ident ((const char *) cstr
.text
);
177 free (CONST_CAST (unsigned char *, cstr
.text
));
182 /* Called at the start of every non-empty line. TOKEN is the first
183 lexed token on the line. Used for diagnostic line numbers. */
185 cb_line_change (cpp_reader
* ARG_UNUSED (pfile
), const cpp_token
*token
,
188 if (token
->type
!= CPP_EOF
&& !parsing_args
)
189 input_location
= token
->src_loc
;
193 fe_file_change (const line_map_ordinary
*new_map
)
198 if (new_map
->reason
== LC_ENTER
)
200 /* Don't stack the main buffer on the input stack;
201 we already did in compile_file. */
202 if (!MAIN_FILE_P (new_map
))
204 unsigned int included_at
= LAST_SOURCE_LINE_LOCATION (new_map
- 1);
206 if (included_at
> BUILTINS_LOCATION
)
207 line
= SOURCE_LINE (new_map
- 1, included_at
);
209 input_location
= new_map
->start_location
;
210 (*debug_hooks
->start_source_file
) (line
, LINEMAP_FILE (new_map
));
211 #ifndef NO_IMPLICIT_EXTERN_C
214 else if (LINEMAP_SYSP (new_map
) == 2)
217 ++pending_lang_change
;
222 else if (new_map
->reason
== LC_LEAVE
)
224 #ifndef NO_IMPLICIT_EXTERN_C
225 if (c_header_level
&& --c_header_level
== 0)
227 if (LINEMAP_SYSP (new_map
) == 2)
228 warning (0, "badly nested C headers from preprocessor");
229 --pending_lang_change
;
232 input_location
= new_map
->start_location
;
234 (*debug_hooks
->end_source_file
) (LINEMAP_LINE (new_map
));
237 update_header_times (LINEMAP_FILE (new_map
));
238 input_location
= new_map
->start_location
;
242 cb_def_pragma (cpp_reader
*pfile
, source_location loc
)
244 /* Issue a warning message if we have been asked to do so. Ignore
245 unknown pragmas in system headers unless an explicit
246 -Wunknown-pragmas has been given. */
247 if (warn_unknown_pragmas
> in_system_header_at (input_location
))
249 const unsigned char *space
, *name
;
251 location_t fe_loc
= loc
;
253 space
= name
= (const unsigned char *) "";
254 s
= cpp_get_token (pfile
);
255 if (s
->type
!= CPP_EOF
)
257 space
= cpp_token_as_text (pfile
, s
);
258 s
= cpp_get_token (pfile
);
259 if (s
->type
== CPP_NAME
)
260 name
= cpp_token_as_text (pfile
, s
);
263 warning_at (fe_loc
, OPT_Wunknown_pragmas
, "ignoring #pragma %s %s",
268 /* #define callback for DWARF and DWARF2 debug info. */
270 cb_define (cpp_reader
*pfile
, source_location loc
, cpp_hashnode
*node
)
272 const struct line_map
*map
= linemap_lookup (line_table
, loc
);
273 (*debug_hooks
->define
) (SOURCE_LINE (linemap_check_ordinary (map
), loc
),
274 (const char *) cpp_macro_definition (pfile
, node
));
277 /* #undef callback for DWARF and DWARF2 debug info. */
279 cb_undef (cpp_reader
* ARG_UNUSED (pfile
), source_location loc
,
282 const struct line_map
*map
= linemap_lookup (line_table
, loc
);
283 (*debug_hooks
->undef
) (SOURCE_LINE (linemap_check_ordinary (map
), loc
),
284 (const char *) NODE_NAME (node
));
287 /* Wrapper around cpp_get_token to skip CPP_PADDING tokens
288 and not consume CPP_EOF. */
289 static const cpp_token
*
290 get_token_no_padding (cpp_reader
*pfile
)
294 const cpp_token
*ret
= cpp_peek_token (pfile
, 0);
295 if (ret
->type
== CPP_EOF
)
297 ret
= cpp_get_token (pfile
);
298 if (ret
->type
!= CPP_PADDING
)
303 /* Callback for has_attribute. */
305 c_common_has_attribute (cpp_reader
*pfile
)
308 tree attr_name
= NULL_TREE
;
309 const cpp_token
*token
;
311 token
= get_token_no_padding (pfile
);
312 if (token
->type
!= CPP_OPEN_PAREN
)
314 cpp_error (pfile
, CPP_DL_ERROR
,
315 "missing '(' after \"__has_attribute\"");
318 token
= get_token_no_padding (pfile
);
319 if (token
->type
== CPP_NAME
)
321 attr_name
= get_identifier ((const char *)
322 cpp_token_as_text (pfile
, token
));
323 attr_name
= canonicalize_attr_name (attr_name
);
324 if (c_dialect_cxx ())
327 const cpp_token
*nxt_token
;
329 nxt_token
= cpp_peek_token (pfile
, idx
++);
330 while (nxt_token
->type
== CPP_PADDING
);
331 if (nxt_token
->type
== CPP_SCOPE
)
333 get_token_no_padding (pfile
); // Eat scope.
334 nxt_token
= get_token_no_padding (pfile
);
335 if (nxt_token
->type
== CPP_NAME
)
337 tree attr_ns
= attr_name
;
339 = get_identifier ((const char *)
340 cpp_token_as_text (pfile
, nxt_token
));
341 attr_name
= build_tree_list (attr_ns
, attr_id
);
345 cpp_error (pfile
, CPP_DL_ERROR
,
346 "attribute identifier required after scope");
347 attr_name
= NULL_TREE
;
352 /* Some standard attributes need special handling. */
353 if (is_attribute_p ("noreturn", attr_name
))
355 else if (is_attribute_p ("deprecated", attr_name
))
357 else if (is_attribute_p ("maybe_unused", attr_name
)
358 || is_attribute_p ("nodiscard", attr_name
)
359 || is_attribute_p ("fallthrough", attr_name
))
362 attr_name
= NULL_TREE
;
368 const struct attribute_spec
*attr
= lookup_attribute_spec (attr_name
);
375 cpp_error (pfile
, CPP_DL_ERROR
,
376 "macro \"__has_attribute\" requires an identifier");
380 if (get_token_no_padding (pfile
)->type
!= CPP_CLOSE_PAREN
)
381 cpp_error (pfile
, CPP_DL_ERROR
,
382 "missing ')' after \"__has_attribute\"");
387 /* Read a token and return its type. Fill *VALUE with its value, if
388 applicable. Fill *CPP_FLAGS with the token's flags, if it is
392 c_lex_with_flags (tree
*value
, location_t
*loc
, unsigned char *cpp_flags
,
395 static bool no_more_pch
;
396 const cpp_token
*tok
;
398 unsigned char add_flags
= 0;
399 enum overflow_type overflow
= OT_NONE
;
401 timevar_push (TV_CPP
);
403 tok
= cpp_get_token_with_location (parse_in
, loc
);
413 *value
= HT_IDENT_TO_GCC_IDENT (HT_NODE (tok
->val
.node
.node
));
418 const char *suffix
= NULL
;
419 unsigned int flags
= cpp_classify_number (parse_in
, tok
, &suffix
, *loc
);
421 switch (flags
& CPP_N_CATEGORY
)
424 /* cpplib has issued an error. */
425 *value
= error_mark_node
;
429 /* C++ uses '0' to mark virtual functions as pure.
430 Set PURE_ZERO to pass this information to the C++ parser. */
431 if (tok
->val
.str
.len
== 1 && *tok
->val
.str
.text
== '0')
432 add_flags
= PURE_ZERO
;
433 *value
= interpret_integer (tok
, flags
, &overflow
);
437 *value
= interpret_float (tok
, flags
, suffix
, &overflow
);
444 if (flags
& CPP_N_USERDEF
)
448 tree suffix_id
= get_identifier (suffix
);
449 int len
= tok
->val
.str
.len
- strlen (suffix
);
450 /* If this is going to be used as a C string to pass to a
451 raw literal operator, we need to add a trailing NUL. */
452 tree num_string
= build_string (len
+ 1,
453 (const char *) tok
->val
.str
.text
);
454 TREE_TYPE (num_string
) = char_array_type_node
;
455 num_string
= fix_string_type (num_string
);
456 str
= CONST_CAST (char *, TREE_STRING_POINTER (num_string
));
458 literal
= build_userdef_literal (suffix_id
, *value
, overflow
,
466 /* An @ may give the next token special significance in Objective-C. */
467 if (c_dialect_objc ())
469 location_t atloc
= *loc
;
473 tok
= cpp_get_token_with_location (parse_in
, &newloc
);
485 type
= lex_string (tok
, value
, true, true);
489 *value
= HT_IDENT_TO_GCC_IDENT (HT_NODE (tok
->val
.node
.node
));
490 if (OBJC_IS_AT_KEYWORD (C_RID_CODE (*value
))
491 || OBJC_IS_CXX_KEYWORD (C_RID_CODE (*value
)))
494 /* Note the complication: if we found an OBJC_CXX
495 keyword, for example, 'class', we will be
496 returning a token of type CPP_AT_NAME and rid
497 code RID_CLASS (not RID_AT_CLASS). The language
498 parser needs to convert that to RID_AT_CLASS.
506 error_at (atloc
, "stray %<@%> in program");
517 unsigned char name
[8];
519 *cpp_spell_token (parse_in
, tok
, name
, true) = 0;
521 error_at (*loc
, "stray %qs in program", name
);
528 cppchar_t c
= tok
->val
.str
.text
[0];
530 if (c
== '"' || c
== '\'')
531 error_at (*loc
, "missing terminating %c character", (int) c
);
532 else if (ISGRAPH (c
))
533 error_at (*loc
, "stray %qc in program", (int) c
);
535 error_at (*loc
, "stray %<\\%o%> in program", (int) c
);
539 case CPP_CHAR_USERDEF
:
540 case CPP_WCHAR_USERDEF
:
541 case CPP_CHAR16_USERDEF
:
542 case CPP_CHAR32_USERDEF
:
543 case CPP_UTF8CHAR_USERDEF
:
546 cpp_token temp_tok
= *tok
;
547 const char *suffix
= cpp_get_userdef_suffix (tok
);
548 temp_tok
.val
.str
.len
-= strlen (suffix
);
549 temp_tok
.type
= cpp_userdef_char_remove_type (type
);
550 literal
= build_userdef_literal (get_identifier (suffix
),
551 lex_charconst (&temp_tok
),
562 *value
= lex_charconst (tok
);
565 case CPP_STRING_USERDEF
:
566 case CPP_WSTRING_USERDEF
:
567 case CPP_STRING16_USERDEF
:
568 case CPP_STRING32_USERDEF
:
569 case CPP_UTF8STRING_USERDEF
:
571 tree literal
, string
;
572 const char *suffix
= cpp_get_userdef_suffix (tok
);
573 string
= build_string (tok
->val
.str
.len
- strlen (suffix
),
574 (const char *) tok
->val
.str
.text
);
575 literal
= build_userdef_literal (get_identifier (suffix
),
576 string
, OT_NONE
, NULL_TREE
);
586 if ((lex_flags
& C_LEX_STRING_NO_JOIN
) == 0)
588 type
= lex_string (tok
, value
, false,
589 (lex_flags
& C_LEX_STRING_NO_TRANSLATE
) == 0);
592 *value
= build_string (tok
->val
.str
.len
, (const char *) tok
->val
.str
.text
);
596 *value
= build_int_cst (integer_type_node
, tok
->val
.pragma
);
599 /* These tokens should not be visible outside cpplib. */
600 case CPP_HEADER_NAME
:
604 /* CPP_COMMENT will appear when compiling with -C. Ignore, except
605 when it is a FALLTHROUGH comment, in that case set
606 PREV_FALLTHROUGH flag on the next non-comment token. */
608 if (tok
->flags
& PREV_FALLTHROUGH
)
612 tok
= cpp_get_token_with_location (parse_in
, loc
);
615 while (type
== CPP_PADDING
|| type
== CPP_COMMENT
);
616 add_flags
|= PREV_FALLTHROUGH
;
627 *cpp_flags
= tok
->flags
| add_flags
;
632 c_common_no_more_pch ();
635 timevar_pop (TV_CPP
);
640 /* Returns the narrowest C-visible unsigned type, starting with the
641 minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
644 static enum integer_type_kind
645 narrowest_unsigned_type (const widest_int
&val
, unsigned int flags
)
649 if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
650 itk
= itk_unsigned_int
;
651 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
652 itk
= itk_unsigned_long
;
654 itk
= itk_unsigned_long_long
;
656 for (; itk
< itk_none
; itk
+= 2 /* skip unsigned types */)
660 if (integer_types
[itk
] == NULL_TREE
)
662 upper
= TYPE_MAX_VALUE (integer_types
[itk
]);
664 if (wi::geu_p (wi::to_widest (upper
), val
))
665 return (enum integer_type_kind
) itk
;
671 /* Ditto, but narrowest signed type. */
672 static enum integer_type_kind
673 narrowest_signed_type (const widest_int
&val
, unsigned int flags
)
677 if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
679 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
684 for (; itk
< itk_none
; itk
+= 2 /* skip signed types */)
688 if (integer_types
[itk
] == NULL_TREE
)
690 upper
= TYPE_MAX_VALUE (integer_types
[itk
]);
692 if (wi::geu_p (wi::to_widest (upper
), val
))
693 return (enum integer_type_kind
) itk
;
699 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
701 interpret_integer (const cpp_token
*token
, unsigned int flags
,
702 enum overflow_type
*overflow
)
705 enum integer_type_kind itk
;
707 HOST_WIDE_INT ival
[3];
711 integer
= cpp_interpret_integer (parse_in
, token
, flags
);
712 if (integer
.overflow
)
713 *overflow
= OT_OVERFLOW
;
715 ival
[0] = integer
.low
;
716 ival
[1] = integer
.high
;
718 widest_int wval
= widest_int::from_array (ival
, 3);
720 /* The type of a constant with a U suffix is straightforward. */
721 if (flags
& CPP_N_UNSIGNED
)
722 itk
= narrowest_unsigned_type (wval
, flags
);
725 /* The type of a potentially-signed integer constant varies
726 depending on the base it's in, the standard in use, and the
728 enum integer_type_kind itk_u
729 = narrowest_unsigned_type (wval
, flags
);
730 enum integer_type_kind itk_s
731 = narrowest_signed_type (wval
, flags
);
733 /* In both C89 and C99, octal and hex constants may be signed or
734 unsigned, whichever fits tighter. We do not warn about this
735 choice differing from the traditional choice, as the constant
736 is probably a bit pattern and either way will work. */
737 if ((flags
& CPP_N_RADIX
) != CPP_N_DECIMAL
)
738 itk
= MIN (itk_u
, itk_s
);
741 /* In C99, decimal constants are always signed.
742 In C89, decimal constants that don't fit in long have
743 undefined behavior; we try to make them unsigned long.
744 In GCC's extended C89, that last is true of decimal
745 constants that don't fit in long long, too. */
748 if (itk_s
> itk_u
&& itk_s
> itk_long
)
752 if (itk_u
< itk_unsigned_long
)
753 itk_u
= itk_unsigned_long
;
755 warning (0, "this decimal constant is unsigned only in ISO C90");
758 warning (OPT_Wtraditional
,
759 "this decimal constant would be unsigned in ISO C90");
765 /* cpplib has already issued a warning for overflow. */
766 type
= ((flags
& CPP_N_UNSIGNED
)
767 ? widest_unsigned_literal_type_node
768 : widest_integer_literal_type_node
);
771 type
= integer_types
[itk
];
772 if (itk
> itk_unsigned_long
773 && (flags
& CPP_N_WIDTH
) != CPP_N_LARGE
)
775 ((c_dialect_cxx () ? cxx_dialect
== cxx98
: !flag_isoc99
)
776 ? DK_PEDWARN
: DK_WARNING
,
777 input_location
, OPT_Wlong_long
,
778 (flags
& CPP_N_UNSIGNED
)
779 ? "integer constant is too large for %<unsigned long%> type"
780 : "integer constant is too large for %<long%> type");
783 value
= wide_int_to_tree (type
, wval
);
785 /* Convert imaginary to a complex type. */
786 if (flags
& CPP_N_IMAGINARY
)
787 value
= build_complex (NULL_TREE
, build_int_cst (type
, 0), value
);
792 /* Interpret TOKEN, a floating point number with FLAGS as classified
793 by cpplib. For C++11 SUFFIX may contain a user-defined literal suffix. */
795 interpret_float (const cpp_token
*token
, unsigned int flags
,
796 const char *suffix
, enum overflow_type
*overflow
)
801 REAL_VALUE_TYPE real
;
802 REAL_VALUE_TYPE real_trunc
;
808 /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64
809 pragma has been used and is either double or _Decimal64. Types
810 that are not allowed with decimal float default to double. */
811 if (flags
& CPP_N_DEFAULT
)
813 flags
^= CPP_N_DEFAULT
;
814 flags
|= CPP_N_MEDIUM
;
816 if (((flags
& CPP_N_HEX
) == 0) && ((flags
& CPP_N_IMAGINARY
) == 0))
818 warning (OPT_Wunsuffixed_float_constants
,
819 "unsuffixed float constant");
820 if (float_const_decimal64_p ())
821 flags
|= CPP_N_DFLOAT
;
825 /* Decode _Fract and _Accum. */
826 if (flags
& CPP_N_FRACT
|| flags
& CPP_N_ACCUM
)
827 return interpret_fixed (token
, flags
);
829 /* Decode type based on width and properties. */
830 if (flags
& CPP_N_DFLOAT
)
831 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
832 type
= dfloat128_type_node
;
833 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
834 type
= dfloat32_type_node
;
836 type
= dfloat64_type_node
;
838 if (flags
& CPP_N_WIDTH_MD
)
843 if ((flags
& CPP_N_WIDTH_MD
) == CPP_N_MD_W
)
848 mode
= targetm
.c
.mode_for_suffix (suffix
);
849 if (mode
== VOIDmode
)
851 error ("unsupported non-standard suffix on floating constant");
853 return error_mark_node
;
856 pedwarn (input_location
, OPT_Wpedantic
, "non-standard suffix on floating constant");
858 type
= c_common_type_for_mode (mode
, 0);
861 else if ((flags
& (CPP_N_FLOATN
| CPP_N_FLOATNX
)) != 0)
863 unsigned int n
= (flags
& CPP_N_WIDTH_FLOATN_NX
) >> CPP_FLOATN_SHIFT
;
864 bool extended
= (flags
& CPP_N_FLOATNX
) != 0;
866 for (int i
= 0; i
< NUM_FLOATN_NX_TYPES
; i
++)
867 if (floatn_nx_types
[i
].n
== (int) n
868 && floatn_nx_types
[i
].extended
== extended
)
870 type
= FLOATN_NX_TYPE_NODE (i
);
873 if (type
== NULL_TREE
)
875 error ("unsupported non-standard suffix on floating constant");
876 return error_mark_node
;
879 pedwarn (input_location
, OPT_Wpedantic
, "non-standard suffix on floating constant");
881 else if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
882 type
= long_double_type_node
;
883 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
884 || flag_single_precision_constant
)
885 type
= float_type_node
;
887 type
= double_type_node
;
889 const_type
= excess_precision_type (type
);
893 /* Copy the constant to a nul-terminated buffer. If the constant
894 has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
895 can't handle them. */
896 copylen
= token
->val
.str
.len
;
897 if (flags
& CPP_N_USERDEF
)
898 copylen
-= strlen (suffix
);
899 else if (flags
& CPP_N_DFLOAT
)
903 if ((flags
& CPP_N_WIDTH
) != CPP_N_MEDIUM
)
904 /* Must be an F or L or machine defined suffix. */
906 if (flags
& CPP_N_IMAGINARY
)
909 if (flags
& CPP_N_FLOATNX
)
911 if (flags
& (CPP_N_FLOATN
| CPP_N_FLOATNX
))
913 unsigned int n
= (flags
& CPP_N_WIDTH_FLOATN_NX
) >> CPP_FLOATN_SHIFT
;
922 copy
= (char *) alloca (copylen
+ 1);
923 if (cxx_dialect
> cxx11
)
926 for (size_t i
= 0; i
< copylen
; ++i
)
927 if (token
->val
.str
.text
[i
] != '\'')
928 copy
[maxlen
++] = token
->val
.str
.text
[i
];
933 memcpy (copy
, token
->val
.str
.text
, copylen
);
934 copy
[copylen
] = '\0';
937 real_from_string3 (&real
, copy
, TYPE_MODE (const_type
));
938 if (const_type
!= type
)
939 /* Diagnosing if the result of converting the value with excess
940 precision to the semantic type would overflow (with associated
941 double rounding) is more appropriate than diagnosing if the
942 result of converting the string directly to the semantic type
944 real_convert (&real_trunc
, TYPE_MODE (type
), &real
);
946 /* Both C and C++ require a diagnostic for a floating constant
947 outside the range of representable values of its type. Since we
948 have __builtin_inf* to produce an infinity, this is now a
949 mandatory pedwarn if the target does not support infinities. */
950 if (REAL_VALUE_ISINF (real
)
951 || (const_type
!= type
&& REAL_VALUE_ISINF (real_trunc
)))
953 *overflow
= OT_OVERFLOW
;
954 if (!(flags
& CPP_N_USERDEF
))
956 if (!MODE_HAS_INFINITIES (TYPE_MODE (type
)))
957 pedwarn (input_location
, 0,
958 "floating constant exceeds range of %qT", type
);
960 warning (OPT_Woverflow
,
961 "floating constant exceeds range of %qT", type
);
964 /* We also give a warning if the value underflows. */
965 else if (real_equal (&real
, &dconst0
)
966 || (const_type
!= type
967 && real_equal (&real_trunc
, &dconst0
)))
969 REAL_VALUE_TYPE realvoidmode
;
970 int oflow
= real_from_string (&realvoidmode
, copy
);
971 *overflow
= (oflow
== 0 ? OT_NONE
972 : (oflow
< 0 ? OT_UNDERFLOW
: OT_OVERFLOW
));
973 if (!(flags
& CPP_N_USERDEF
))
975 if (oflow
< 0 || !real_equal (&realvoidmode
, &dconst0
))
976 warning (OPT_Woverflow
, "floating constant truncated to zero");
980 /* Create a node with determined type and value. */
981 value
= build_real (const_type
, real
);
982 if (flags
& CPP_N_IMAGINARY
)
984 value
= build_complex (NULL_TREE
,
985 fold_convert (const_type
,
986 integer_zero_node
), value
);
987 if (type
!= const_type
)
989 const_type
= TREE_TYPE (value
);
990 type
= build_complex_type (type
);
994 if (type
!= const_type
)
995 value
= build1_loc (token
->src_loc
, EXCESS_PRECISION_EXPR
, type
, value
);
1000 /* Interpret TOKEN, a fixed-point number with FLAGS as classified
1004 interpret_fixed (const cpp_token
*token
, unsigned int flags
)
1008 FIXED_VALUE_TYPE fixed
;
1012 copylen
= token
->val
.str
.len
;
1014 if (flags
& CPP_N_FRACT
) /* _Fract. */
1016 if (flags
& CPP_N_UNSIGNED
) /* Unsigned _Fract. */
1018 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
1020 type
= unsigned_long_long_fract_type_node
;
1023 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
1025 type
= unsigned_long_fract_type_node
;
1028 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
1030 type
= unsigned_short_fract_type_node
;
1035 type
= unsigned_fract_type_node
;
1039 else /* Signed _Fract. */
1041 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
1043 type
= long_long_fract_type_node
;
1046 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
1048 type
= long_fract_type_node
;
1051 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
1053 type
= short_fract_type_node
;
1058 type
= fract_type_node
;
1065 if (flags
& CPP_N_UNSIGNED
) /* Unsigned _Accum. */
1067 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
1069 type
= unsigned_long_long_accum_type_node
;
1072 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
1074 type
= unsigned_long_accum_type_node
;
1077 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
1079 type
= unsigned_short_accum_type_node
;
1084 type
= unsigned_accum_type_node
;
1088 else /* Signed _Accum. */
1090 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
1092 type
= long_long_accum_type_node
;
1095 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
1097 type
= long_accum_type_node
;
1100 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
1102 type
= short_accum_type_node
;
1107 type
= accum_type_node
;
1113 copy
= (char *) alloca (copylen
+ 1);
1114 memcpy (copy
, token
->val
.str
.text
, copylen
);
1115 copy
[copylen
] = '\0';
1117 fixed_from_string (&fixed
, copy
, SCALAR_TYPE_MODE (type
));
1119 /* Create a node with determined type and value. */
1120 value
= build_fixed (type
, fixed
);
1125 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
1126 UTF8STRING tokens into a tree, performing string constant
1127 concatenation. TOK is the first of these. VALP is the location to
1128 write the string into. OBJC_STRING indicates whether an '@' token
1129 preceded the incoming token (in that case, the strings can either
1130 be ObjC strings, preceded by a single '@', or normal strings, not
1131 preceded by '@'. The result will be a CPP_OBJC_STRING). Returns
1132 the CPP token type of the result (CPP_STRING, CPP_WSTRING,
1133 CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
1135 This is unfortunately more work than it should be. If any of the
1136 strings in the series has an L prefix, the result is a wide string
1137 (6.4.5p4). Whether or not the result is a wide string affects the
1138 meaning of octal and hexadecimal escapes (6.4.4.4p6,9). But escape
1139 sequences do not continue across the boundary between two strings in
1140 a series (6.4.5p7), so we must not lose the boundaries. Therefore
1141 cpp_interpret_string takes a vector of cpp_string structures, which
1142 we must arrange to provide. */
1144 static enum cpp_ttype
1145 lex_string (const cpp_token
*tok
, tree
*valp
, bool objc_string
, bool translate
)
1149 struct obstack str_ob
;
1150 struct obstack loc_ob
;
1152 enum cpp_ttype type
= tok
->type
;
1154 /* Try to avoid the overhead of creating and destroying an obstack
1155 for the common case of just one string. */
1156 cpp_string str
= tok
->val
.str
;
1157 location_t init_loc
= tok
->src_loc
;
1158 cpp_string
*strs
= &str
;
1159 location_t
*locs
= NULL
;
1161 /* objc_at_sign_was_seen is only used when doing Objective-C string
1162 concatenation. It is 'true' if we have seen an '@' before the
1163 current string, and 'false' if not. We must see exactly one or
1164 zero '@' before each string. */
1165 bool objc_at_sign_was_seen
= false;
1168 tok
= cpp_get_token (parse_in
);
1176 if (objc_at_sign_was_seen
)
1177 error ("repeated %<@%> before Objective-C string");
1179 objc_at_sign_was_seen
= true;
1190 case CPP_UTF8STRING
:
1191 if (type
!= tok
->type
)
1193 if (type
== CPP_STRING
)
1196 error ("unsupported non-standard concatenation of string literals");
1203 gcc_obstack_init (&str_ob
);
1204 gcc_obstack_init (&loc_ob
);
1205 obstack_grow (&str_ob
, &str
, sizeof (cpp_string
));
1206 obstack_grow (&loc_ob
, &init_loc
, sizeof (location_t
));
1210 obstack_grow (&str_ob
, &tok
->val
.str
, sizeof (cpp_string
));
1211 obstack_grow (&loc_ob
, &tok
->src_loc
, sizeof (location_t
));
1214 objc_at_sign_was_seen
= false;
1218 /* It is an error if we saw a '@' with no following string. */
1219 if (objc_at_sign_was_seen
)
1220 error ("stray %<@%> in program");
1222 /* We have read one more token than we want. */
1223 _cpp_backup_tokens (parse_in
, 1);
1226 strs
= XOBFINISH (&str_ob
, cpp_string
*);
1227 locs
= XOBFINISH (&loc_ob
, location_t
*);
1230 if (concats
&& !objc_string
&& !in_system_header_at (input_location
))
1231 warning (OPT_Wtraditional
,
1232 "traditional C rejects string constant concatenation");
1235 ? cpp_interpret_string
: cpp_interpret_string_notranslate
)
1236 (parse_in
, strs
, concats
+ 1, &istr
, type
))
1238 value
= build_string (istr
.len
, (const char *) istr
.text
);
1239 free (CONST_CAST (unsigned char *, istr
.text
));
1243 gcc_assert (g_string_concat_db
);
1244 g_string_concat_db
->record_string_concatenation (concats
+ 1, locs
);
1249 /* Callers cannot generally handle error_mark_node in this context,
1250 so return the empty string instead. cpp_interpret_string has
1256 case CPP_UTF8STRING
:
1257 value
= build_string (1, "");
1260 value
= build_string (TYPE_PRECISION (char16_type_node
)
1261 / TYPE_PRECISION (char_type_node
),
1262 "\0"); /* char16_t is 16 bits */
1265 value
= build_string (TYPE_PRECISION (char32_type_node
)
1266 / TYPE_PRECISION (char_type_node
),
1267 "\0\0\0"); /* char32_t is 32 bits */
1270 value
= build_string (TYPE_PRECISION (wchar_type_node
)
1271 / TYPE_PRECISION (char_type_node
),
1272 "\0\0\0"); /* widest supported wchar_t
1282 case CPP_UTF8STRING
:
1283 TREE_TYPE (value
) = char_array_type_node
;
1286 TREE_TYPE (value
) = char16_array_type_node
;
1289 TREE_TYPE (value
) = char32_array_type_node
;
1292 TREE_TYPE (value
) = wchar_array_type_node
;
1294 *valp
= fix_string_type (value
);
1298 obstack_free (&str_ob
, 0);
1299 obstack_free (&loc_ob
, 0);
1302 return objc_string
? CPP_OBJC_STRING
: type
;
1305 /* Converts a (possibly wide) character constant token into a tree. */
1307 lex_charconst (const cpp_token
*token
)
1311 unsigned int chars_seen
;
1314 result
= cpp_interpret_charconst (parse_in
, token
,
1315 &chars_seen
, &unsignedp
);
1317 if (token
->type
== CPP_WCHAR
)
1318 type
= wchar_type_node
;
1319 else if (token
->type
== CPP_CHAR32
)
1320 type
= char32_type_node
;
1321 else if (token
->type
== CPP_CHAR16
)
1322 type
= char16_type_node
;
1323 else if (token
->type
== CPP_UTF8CHAR
)
1324 type
= char_type_node
;
1325 /* In C, a character constant has type 'int'.
1326 In C++ 'char', but multi-char charconsts have type 'int'. */
1327 else if (!c_dialect_cxx () || chars_seen
> 1)
1328 type
= integer_type_node
;
1330 type
= char_type_node
;
1332 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1333 before possibly widening to HOST_WIDE_INT for build_int_cst. */
1334 if (unsignedp
|| (cppchar_signed_t
) result
>= 0)
1335 value
= build_int_cst (type
, result
);
1337 value
= build_int_cst (type
, (cppchar_signed_t
) result
);
1342 /* Helper function for c_parser_peek_conflict_marker
1343 and cp_lexer_peek_conflict_marker.
1344 Given a possible conflict marker token of kind TOK1_KIND
1345 consisting of a pair of characters, get the token kind for the
1346 standalone final character. */
1349 conflict_marker_get_final_tok_kind (enum cpp_ttype tok1_kind
)
1353 default: gcc_unreachable ();