https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69177

            Bug ID: 69177
           Summary: Bit-packing optimization makes it too easy to have
                    location_t >= LINE_MAP_MAX_LOCATION_WITH_COLS
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: preprocessor
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dmalcolm at gcc dot gnu.org
  Target Milestone: ---

[splitting this off from PR c++/68819, and from
https://gcc.gnu.org/ml/gcc-patches/2015-12/msg01921.html, to ensure that we fix
this]

libcpp has a degraded fallback mode for large source files where if a
location_t > LINE_MAP_MAX_LOCATION_WITH_COLS we fall back to just tracking
lines, not columns&ranges (currently 0x60000000), and every location_t expands
to having a column == 0.

Sadly we're more likely to see this case in gcc 6 than in gcc 5 since we're
using up 5 bits of location_t for packing short ranges into them (to avoid
needing to go to the ad-hoc lookaside during tokenization; this change was part
of r230331).

I've seen us hit this limit on our own code during bootstrap; for example,
gimple-match.c is hitting the LINE_MAP_MAX_LOCATION_WITH_COLS limit; I've seen
a diagnostic at line 50437 column 0.

The bit-packing optimization is causing us to hit that
LINE_MAP_MAX_LOCATION_WITH_COLS limit earlier than before, and presumably this
will affect people with other very large source files (e.g. as in the initial
PR c++/68819 report).

Rough calculations, assuming 7 bits of columns,
LINE_MAP_MAX_LOCATION_WITH_COLS == 0x60000000

gcc 5:
  0x60000000 / 128 per line = 12,582,912 lines of code before
  hitting the has-column-information limit.

gcc 6 trunk:
  0x60000000 / (128 * 32) per line = 393,216 lines of code before
  hitting the has-column-information limit.

These numbers will be less in the face of lines longer than
127 characters.

I've posted a proposed fix for this as:
  https://gcc.gnu.org/ml/gcc-patches/2015-12/msg01921.html
which gives us a "longer runway", though this is mixed up with changes to
-Wmisleading-indentation

Reply via email to