The recommended bits reserved in a line_map to store ranges has always been
5, meaning that identifiers up to length 32 can be stored without generating
an ad-hoc location. When 64-bit location_t is configured, there are plenty
of bits to go around, and so the recommended default is larger. line-map.h
now exports the recommended setting based on what was configured, so make
use of that when setting up the line map rather than hard-coding 5.
Also silently ignore -flarge-source-files when configured with 64-bit
location_t. That flag is a workaround for cases where we run out of 32-bit
location_t entries; it effectively makes every token's location an ad-hoc
location, making more of the location_t space available for tracking source
locations. This workaround is not necessary with a 64-bit location_t.
gcc/ChangeLog:
* toplev.cc (general_init): Use constant
line_map_suggested_range_bits instead of hard-coded integer.
(process_options): Silently ignore -flarge-source-files if 64-bit
location_t is in use.
---
gcc/toplev.cc | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/gcc/toplev.cc b/gcc/toplev.cc
index 779049674b4..655be409a36 100644
--- a/gcc/toplev.cc
+++ b/gcc/toplev.cc
@@ -1137,7 +1137,7 @@ general_init (const char *argv0, bool init_signals,
unique_argv original_argv)
linemap_init (line_table, BUILTINS_LOCATION);
line_table->m_reallocator = realloc_for_line_map;
line_table->m_round_alloc_size = ggc_round_alloc_size;
- line_table->default_range_bits = 5;
+ line_table->default_range_bits = line_map_suggested_range_bits;
init_ttree ();
/* Initialize register usage now so switches may override. */
@@ -1765,8 +1765,10 @@ process_options ()
hash_table_sanitize_eq_limit
= param_hash_table_verification_limit;
+ #ifndef ENABLE_LARGE_SOURCE_LOCATIONS
if (flag_large_source_files)
line_table->default_range_bits = 0;
+ #endif
diagnose_options (&global_options, &global_options_set, UNKNOWN_LOCATION);