aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorLewis Hyatt <lhyatt@gmail.com>2024-11-16 13:45:22 -0500
committerLewis Hyatt <lhyatt@gcc.gnu.org>2024-12-08 10:32:27 -0500
commitd9cdc500c1e86b1218a24d1e8469930f000528d0 (patch)
tree2573b64fad706dc569ef3103e7704c5099f06f95 /gcc
parent89d19ab91a167c4c2258cc6c9fa7dd448c007ab7 (diff)
downloadgcc-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.opt5
-rw-r--r--gcc/common.opt.urls3
-rw-r--r--gcc/doc/invoke.texi17
-rw-r--r--gcc/gimple.h21
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/pr77949.C5
-rw-r--r--gcc/testsuite/g++.dg/modules/loc-prune-4.C6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.cc10
-rw-r--r--gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc5
-rw-r--r--gcc/toplev.cc3
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