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

--- Comment #4 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
(In reply to Tobias Burnus from comment #3)
> (In reply to David Malcolm from comment #1)
> > Is it a file with many includes?  libcpp can go into a fallback mode where
> > it stops supplying column numbers, when location_t goes >=
> > LINE_MAP_MAX_LOCATION_WITH_COLS.
> 
> That seems to be the case - at least, I am down to:

Thanks.

Presumably we can fix this by not issuing an error if any of the columns == 0.

We *might* want to issue a "sorry" when the limit is hit if
-Wmisleading-indentation is enabled.

> #include "some.h"  // Unrelated, but includes boost and some other headers
> #include "four.h"
> 
> where four.h contains '#include "three.h"' etc. until two.h, which contains
> the header file with the class which has
>    unsigned int  get_max_index() const   { if (ul) return 4; return 0; }
> 
> The compilation takes about 10s - thus, I assume g++ has quite something to
> read & process. I am going to reduce the last-mentioned header file & might
> try to mimic "some.h" by creating some nested header files - but I fear the
> latter is a bit pointless, if I have to add that many locations that one
> runs out of LINE_MAP_MAX_LOCATION_WITH_COLS.

I think any "minimal" reproducer for hitting this limit using actual code is
going to be unacceptably big.

Idea: an alternative way to reproduce this might be a compiler plugin that
injects a very large fake ordinary line map before parsing begins, so that
we've already hit the limit before the real code is parsed.
(the -fselftests/unittesting idea might be useful for injecting some more
testing of these attempts to degrade gracefully).

Reply via email to