On 11/12/18 7:56 PM, David Malcolm wrote: > On Mon, 2018-11-12 at 21:13 +0000, Mike Gulick wrote: >> On 11/2/18 5:04 PM, David Malcolm wrote: >>> On Thu, 2018-11-01 at 11:56 -0400, Mike Gulick wrote: >>>> 2017-10-31 Mike Gulick <mgul...@mathworks.com> >>>> >>>> PR preprocessor/83173 >>>> * gcc/input.c (dump_location_info): Dump reason and >>>> included_from fields from line_map_ordinary struct. Fix >>>> indentation when location > 5 digits. >>>> >>>> * libcpp/location-example.txt: Update example >>>> -fdump-internal-locations output. >>>> --- >>>> gcc/input.c | 49 +++++- >>>> libcpp/location-example.txt | 333 +++++++++++++++++++++--------- >>>> ---- >>>> -- >>>> 2 files changed, 241 insertions(+), 141 deletions(-) >>> >>> Sorry about the belated response. This is a nice enhancement; some >>> nits below. >>> >>>> diff --git a/gcc/input.c b/gcc/input.c >>>> index a94a010f353..f938a37f20e 100644 >>>> --- a/gcc/input.c >>>> +++ b/gcc/input.c >>>> @@ -1075,6 +1075,17 @@ dump_labelled_location_range (FILE >>>> *stream, >>>> fprintf (stream, "\n"); >>>> } >>>> >>>> +#define NUM_DIGITS(x) ((x) >= 1000000000 ? 10 : \ >>>> + (x) >= 100000000 ? 9 : \ >>>> + (x) >= 10000000 ? 8 : \ >>>> + (x) >= 1000000 ? 7 : \ >>>> + (x) >= 100000 ? 6 : \ >>>> + (x) >= 10000 ? 5 : \ >>>> + (x) >= 1000 ? 4 : \ >>>> + (x) >= 100 ? 3 : \ >>>> + (x) >= 10 ? 2 : \ >>>> + 1) >>> >>> diagnostic-show-locus.c has a function "num_digits" (currently >>> static) >>> and, fwiw, a unit test. It would be good to share the >>> implementation. >>> >> >> I initially tried to use this function by just adding "extern int >> num_digits(int);" into diagnostic-core.h, but that failed to link, so >> it seems >> like diagnostic-show-locus.c is not included in whatever library >> input.c gets >> linked with (I forget which library it was trying to link). > > Both input.o and diagnostic-show-locus.o are in OBJS-libcommon, so I'm > not sure what went wrong. >
After looking at libcommon.a with nm, I realized that diagnostic-show-locus.c wrapped everything inside an anonymous namespace, so that was why the symbol wasn't visible. >> Instead I moved >> num_digits and its unit test to diagnostic.c, and added the extern >> definition to >> diagnostic-core.h. That builds and tests successfully. Does that >> seem like a >> reasonable way to do this? > > Thanks. That sounds good (maybe put the decl in diagnostic.h rather > than diagnostic-core.h; the latter is used in lots of places, whereas > the former is more about implementation details). > No problem. >>>> /* Write a visualization of the locations in the line_table to >>>> STREAM. */ >>>> >>>> void >>>> @@ -1104,6 +1115,35 @@ dump_location_info (FILE *stream) >>>> map->m_column_and_range_bits - map- >>>>> m_range_bits); >>>> fprintf (stream, " range bits: %i\n", >>>> map->m_range_bits); >>>> + const char * reason; >>>> + switch (map->reason) { >>>> + case LC_ENTER: >>>> + reason = "LC_ENTER"; >>>> + break; >>>> + case LC_LEAVE: >>>> + reason = "LC_LEAVE"; >>>> + break; >>>> + case LC_RENAME: >>>> + reason = "LC_RENAME"; >>>> + break; >>>> + case LC_RENAME_VERBATIM: >>>> + reason = "LC_RENAME_VERBATIM"; >>>> + break; >>>> + case LC_ENTER_MACRO: >>>> + reason = "LC_RENAME_MACRO"; >>>> + break; >>>> + default: >>>> + reason = "Unknown"; >>>> + } >>>> + fprintf (stream, " reason: %d (%s)\n", map->reason, >>>> reason); >>>> + >>>> + const line_map_ordinary *includer_map >>>> + = linemap_included_from_linemap (line_table, map); >>>> + fprintf (stream, " included from map: %d\n", >>>> + includer_map ? int (includer_map - line_table- >>>>> info_ordinary.maps) >>>> >>>> + : -1); >>> >>> I'm not a fan of "-1" here; it's a NULL pointer in the original >>> data. >>> How about "n/a" for that case? >>> >> >> That's a good suggestion. Thanks. >> >>>> + fprintf (stream, " included from location: %d\n", >>>> + linemap_included_from (map)); >>> >>> ...or merging it with this line, for something like: >>> >>> included from location: 127 (in ordinary map 2) >>> >>> vs: >>> >>> included from location: 0 >>> >>> [...snip...] >>> >>> Other than that, this is OK for trunk, assuming your contributor >>> paperwork is in place. >>> >>> Dave >>> >> >> What is the preferred way to re-send this patch? Should I re-send >> the entire >> patch series as v4, or just an updated version of this single patch? > > The latter: just an updated version of the changed patch. IIRC the > rest is all approved. > Thanks, I'll reply with the updated patch. >> >> Also, I'm waiting on FSF for assignment paperwork. I've re-pinged >> them after >> waiting a week. > > Thanks. > >> Thanks for the feedback and help. >> >> -Mike >