diff options
author | Lewis Hyatt <lhyatt@gmail.com> | 2024-11-16 13:45:22 -0500 |
---|---|---|
committer | Lewis Hyatt <lhyatt@gcc.gnu.org> | 2024-12-08 10:32:27 -0500 |
commit | d9cdc500c1e86b1218a24d1e8469930f000528d0 (patch) | |
tree | 2573b64fad706dc569ef3103e7704c5099f06f95 /gcc | |
parent | 89d19ab91a167c4c2258cc6c9fa7dd448c007ab7 (diff) | |
download | gcc-d9cdc500c1e86b1218a24d1e8469930f000528d0.zip gcc-d9cdc500c1e86b1218a24d1e8469930f000528d0.tar.gz gcc-d9cdc500c1e86b1218a24d1e8469930f000528d0.tar.bz2 |
Support for 64-bit location_t: Activate 64-bit location_t
Change location_t to be a 64-bit integer instead of a 32-bit integer in
libcpp.
Also included in this change are the two other patches in the original
series which depended on this one; I am committing them all at once in case
it needs to be reverted later:
-Support for 64-bit location_t: gimple parts
The size of struct gimple increased by 8 bytes with the change in size of
location_t from 32- to 64-bit; adjust the WORD markings in the comments
accordingly. It seems that most of the WORD markings were off by one already,
probably not having been updated after a previous reduction in the size of a
gimple, so they have become retroactively correct again, and only a couple
needed adjustment actually.
Also add a comment that there is now 32 bits of unused padding available in
struct gimple for 64-bit hosts.
-Support for 64-bit location_t: Remove -flarge-source-files
The option -flarge-source-files became unnecessary with 64-bit location_t
and harms performance compared to the new default setting, so silently
ignore it.
libcpp/ChangeLog:
* include/cpplib.h (struct cpp_token): Adjust comment about the
struct size.
* include/line-map.h (location_t): Change typedef from 32-bit to 64-bit
integer.
(LINE_MAP_MAX_COLUMN_NUMBER): Increase size to be appropriate for
64-bit location_t.
(LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES): Likewise.
(LINE_MAP_MAX_LOCATION_WITH_COLS): Likewise.
(LINE_MAP_MAX_LOCATION): Likewise.
(MAX_LOCATION_T): Likewise.
(line_map_suggested_range_bits): Likewise.
(struct line_map): Adjust comment about the struct size.
(struct line_map_macro): Likewise.
(struct line_map_ordinary): Likewise. Rearrange fields to optimize
padding.
gcc/testsuite/ChangeLog:
* g++.dg/diagnostic/pr77949.C: Adapt the test for 64-bit location_t,
when the previously expected failure doesn't actually happen.
* g++.dg/modules/loc-prune-4.C: Adjust the expected output for the
64-bit location_t case.
* gcc.dg/plugin/expensive_selftests_plugin.cc: Don't try to test
the maximum supported column number in 64-bit location_t mode.
* gcc.dg/plugin/location_overflow_plugin.cc: Adjust the base_location
so it can effectively test 64-bit location_t.
gcc/ChangeLog:
* gimple.h (struct gphi): Update word marking comments to reflect
the new size of location_t.
(struct gimple): Likewise. Add a comment about padding.
* common.opt: Mark -flarge-source-files as Ignored.
* common.opt.urls: Regenerate.
* doc/invoke.texi: Remove -flarge-source-files.
* toplev.cc (process_options): Remove support for
-flarge-source-files.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/common.opt | 5 | ||||
-rw-r--r-- | gcc/common.opt.urls | 3 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 17 | ||||
-rw-r--r-- | gcc/gimple.h | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/diagnostic/pr77949.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/loc-prune-4.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.cc | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc | 5 | ||||
-rw-r--r-- | gcc/toplev.cc | 3 |
9 files changed, 30 insertions, 45 deletions
diff --git a/gcc/common.opt b/gcc/common.opt index a42537c..dc39f16 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -1808,9 +1808,8 @@ Common Undocumented Var(flag_keep_gc_roots_live) Optimization ; Always keep a pointer to a live memory block flarge-source-files -Common Var(flag_large_source_files) Init(0) -Improve GCC's ability to track column numbers in large source files, -at the expense of slower compilation. +Common Ignore +Does nothing. Preserved for backward compatibility. flate-combine-instructions Common Var(flag_late_combine_instructions) Optimization Init(0) diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls index 01033a9..773c021 100644 --- a/gcc/common.opt.urls +++ b/gcc/common.opt.urls @@ -721,9 +721,6 @@ UrlSuffix(gcc/Optimize-Options.html#index-fgraphite-identity) fhoist-adjacent-loads UrlSuffix(gcc/Optimize-Options.html#index-fhoist-adjacent-loads) -flarge-source-files -UrlSuffix(gcc/Preprocessor-Options.html#index-flarge-source-files) - flate-combine-instructions UrlSuffix(gcc/Optimize-Options.html#index-flate-combine-instructions) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 57b6ca1..daab289 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -693,7 +693,7 @@ Objective-C and Objective-C++ Dialects}. -dD -dI -dM -dN -dU -fdebug-cpp -fdirectives-only -fdollars-in-identifiers -fexec-charset=@var{charset} -fextended-identifiers --finput-charset=@var{charset} -flarge-source-files +-finput-charset=@var{charset} -fmacro-prefix-map=@var{old}=@var{new} -fmax-include-depth=@var{depth} -fno-canonical-system-headers -fpch-deps -fpch-preprocess -fpreprocessed -ftabstop=@var{width} -ftrack-macro-expansion @@ -18777,21 +18777,6 @@ This option may be useful in conjunction with the @option{-B} or perform additional processing of the program source between normal preprocessing and compilation. -@opindex flarge-source-files -@item -flarge-source-files -Adjust GCC to expect large source files, at the expense of slower -compilation and higher memory usage. - -Specifically, GCC normally tracks both column numbers and line numbers -within source files and it normally prints both of these numbers in -diagnostics. However, once it has processed a certain number of source -lines, it stops tracking column numbers and only tracks line numbers. -This means that diagnostics for later lines do not include column numbers. -It also means that options like @option{-Wmisleading-indentation} cease to work -at that point, although the compiler prints a note if this happens. -Passing @option{-flarge-source-files} significantly increases the number -of source lines that GCC can process before it stops tracking columns. - @end table @node Assembler Options diff --git a/gcc/gimple.h b/gcc/gimple.h index 039ed66..fbd3c1b 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -259,23 +259,26 @@ struct GTY((desc ("gimple_statement_structure (&%h)"), tag ("GSS_BASE"), in there. */ unsigned int subcode : 16; - /* UID of this statement. This is used by passes that want to - assign IDs to statements. It must be assigned and used by each - pass. By default it should be assumed to contain garbage. */ + /* UID of this statement. This is used by passes that want to assign IDs + to statements. It must be assigned and used by each pass. By default + it should be assumed to contain garbage. */ unsigned uid; /* [ WORD 2 ] - Locus information for debug info. */ - location_t location; - - /* Number of operands in this tuple. */ + Number of operands in this tuple. */ unsigned num_ops; + /* Unused 32 bits padding on 64-bit hosts. */ + /* [ WORD 3 ] + Locus information for debug info. */ + location_t location; + + /* [ WORD 4 ] Basic block holding this statement. */ basic_block bb; - /* [ WORD 4-5 ] + /* [ WORD 5-6 ] Linked lists of gimple statements. The next pointers form a NULL terminated list, the prev pointers are a cyclic list. A gimple statement is hence also a double-ended list of @@ -479,7 +482,7 @@ struct GTY((tag("GSS_PHI"))) /* [ WORD 8 ] */ tree result; - /* [ WORD 9 ] */ + /* [ WORD 9-14 ] */ struct phi_arg_d GTY ((length ("%h.nargs"))) args[1]; }; diff --git a/gcc/testsuite/g++.dg/diagnostic/pr77949.C b/gcc/testsuite/g++.dg/diagnostic/pr77949.C index b81d6e2..e1a201e 100644 --- a/gcc/testsuite/g++.dg/diagnostic/pr77949.C +++ b/gcc/testsuite/g++.dg/diagnostic/pr77949.C @@ -1,7 +1,10 @@ -// Ensure that no fix-it hints are emitted +// Ensure that fix-it hints are emitted even at a large column number. // { dg-options "-fdiagnostics-parseable-fixits" } /* Very long line, where a missing semicolon would be suggested for insertion at column 4097. */ class test { } // { dg-error "-: expected .;. after class definition" "" { target *-*-* } .-1 } +/* { dg-begin-multiline-output "" } +fix-it: +{ dg-end-multiline-output "" } */ diff --git a/gcc/testsuite/g++.dg/modules/loc-prune-4.C b/gcc/testsuite/g++.dg/modules/loc-prune-4.C index aa8f248..19e85d8 100644 --- a/gcc/testsuite/g++.dg/modules/loc-prune-4.C +++ b/gcc/testsuite/g++.dg/modules/loc-prune-4.C @@ -16,7 +16,7 @@ int bar (int); // merge lines int baz (int); -// { dg-final { scan-lang-dump {Ordinary maps:2 locs:12288 range_bits:5} module } } +// { dg-final { scan-lang-dump {Ordinary maps:2 locs:49152 range_bits:7} module } } // { dg-final { scan-lang-dump { 1 source file names\n Source file...=[^\n]*loc-prune-4.C\n} module } } -// { dg-final { scan-lang-dump { Span:0 ordinary \[[0-9]+\+12288,\+4096\)->\[0,\+4096\)} module } } -// { dg-final { scan-lang-dump { Span:1 ordinary \[[0-9]+\+40960,\+8192\)->\[4096,\+8192\)} module } } +// { dg-final { scan-lang-dump { Span:0 ordinary \[[0-9]+\+49152,\+16384\)->\[0,\+16384\)} module } } +// { dg-final { scan-lang-dump { Span:1 ordinary \[[0-9]+\+163840,\+32768\)->\[16384,\+32768\)} module } } diff --git a/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.cc b/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.cc index e96efe0..217e8f8 100644 --- a/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.cc @@ -63,17 +63,13 @@ test_richloc (rich_location *richloc) static void test_fixit_on_very_long_line (const line_table_case &case_) { - /* Various interesting column/line-width values, to try to tickle - out bugs. */ + /* Various interesting column/line-width values, to try to tickle out bugs. In + 64-bit location mode, we can't test the max because the maximum supported + column is unreasonably large. */ const int VERY_LONG_LINE = 8192; const int columns[] = {0, 1, 80, - LINE_MAP_MAX_COLUMN_NUMBER - 2, - LINE_MAP_MAX_COLUMN_NUMBER - 1, - LINE_MAP_MAX_COLUMN_NUMBER, - LINE_MAP_MAX_COLUMN_NUMBER + 1, - LINE_MAP_MAX_COLUMN_NUMBER + 2, VERY_LONG_LINE, VERY_LONG_LINE + 5}; for (unsigned int width_idx = 0; width_idx < ARRAY_SIZE (columns); diff --git a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc index 45a01b5..f731b14 100644 --- a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc @@ -84,6 +84,11 @@ plugin_init (struct plugin_name_args *plugin_info, if (!base_location) error_at (UNKNOWN_LOCATION, "missing plugin argument"); + /* With 64-bit locations, the thresholds are larger, so shift the base + location argument accordingly. */ + gcc_assert (sizeof (location_t) == sizeof (uint64_t)); + base_location = 1 + ((base_location - 1) << 31); + register_callback (plugin_info->base_name, PLUGIN_PRAGMAS, on_pragma_registration, diff --git a/gcc/toplev.cc b/gcc/toplev.cc index d4a4add..370d7f3 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -1765,9 +1765,6 @@ process_options () hash_table_sanitize_eq_limit = param_hash_table_verification_limit; - if (flag_large_source_files) - line_table->default_range_bits = 0; - diagnose_options (&global_options, &global_options_set, UNKNOWN_LOCATION); /* Please don't change global_options after this point, those changes won't |