On 30 August 2016 at 18:49, David Malcolm <dmalc...@redhat.com> wrote: > On Tue, 2016-08-30 at 17:08 +0530, Prathamesh Kulkarni wrote: >> On 30 August 2016 at 05:34, David Malcolm <dmalc...@redhat.com> >> wrote: >> > On Mon, 2016-08-29 at 20:01 -0400, David Malcolm wrote: >> > > On Mon, 2016-08-29 at 19:55 -0400, David Malcolm wrote: >> > > [...] >> > > > Assuming you have the location_t values available, you can >> > > > create a >> > > > rich_location for the primary range, and then add secondary >> > > > ranges >> > > > like >> > > > this: >> > > > >> > > > rich_location richloc (loc_of_arg1); >> > > >> > > Oops, the above should be: >> > > >> > > rich_location richloc (line_table, loc_of_arg1); >> > > >> > > or: >> > > >> > > gcc_rich_location (loc_of_arg1); >> > and this should be: >> > >> > gcc_rich_location richloc (loc_of_arg1); >> > > which does the same thing (#include "gcc-rich-location.h"). >> > >> > Clearly I need to sleep :) >> Hi David, >> Thanks for the suggestions. I can now see multiple source ranges for >> pr35503-2.c (included in patch). >> Output shows: http://pastebin.com/FNAVDU8A >> (Posted pastebin link to avoid mangling by the mailer) > > The underlines look great, thanks for working on this. Thanks -;) > >> However the test for underline fails: >> FAIL: c-c++-common/pr35503-2.c -Wc++-compat expected multiline >> pattern lines 12-13 not found: "\s*f \(&alpha, &beta, &alpha, >> &alpha\);.*\n \^~~~~~ ~~~~~~ ~~~~~~ .*\n" >> I have attached gcc.log for the test-case. Presumably I have written >> the test-case incorrectly. >> Could you please have a look at it ? > > (I hope this doesn't get too badly mangled by Evolution...) > > I think you have an extra trailing space on the line containing the > expected underlines within the multiline directive: > > +/* { dg-begin-multiline-output "" } > + f (&alpha, &beta, &alpha, &alpha); > + ^~~~~~ ~~~~~~ ~~~~~~ > ^ EXTRA SPACE HERE > + { dg-end-multiline-output "" } */ > +} > > as the actual output is: > > f (&alpha, &beta, &alpha, &alpha); > ^~~~~~ ~~~~~~ ~~~~~~ > ^ LINE ENDS HERE, with no trailing > space present > > This space shows up in the error here: > > FAIL: c-c++-common/pr35503-2.c -Wc++-compat expected multiline > pattern lines 12-13 not found: "\s*f \(&alpha, &beta, &alpha, > &alpha\);.*\n \^~~~~~ ~~~~~~ ~~~~~~ .*\n" > ^ EXTRA SPACE > > BTW, the .* at the end of the pattern means it's ok to have additional > material in the actual output that isn't matched (e.g. for comments > containing dg- directives [1] ) but it doesn't work the other way > around: all of the text within the dg-begin/end-multiline directives > has to be in the actual output. > > > [1] so you can have e.g.: > > f (&alpha, &beta, &alpha, &alpha); /* { dg-warning "passing argument 1 to > restrict-qualified parameter aliases with arguments 3, 4" } */ > > and: > > /* { dg-begin-multiline-output "" } > f (&alpha, &beta, &alpha, &alpha); > ^~~~~~ ~~~~~~ ~~~~~~ > { dg-end-multiline-output "" } */ > > where the actual output will look like: > > pr35503-2.c:8:6: warning: passing argument 1 to restrict-qualified parameter > aliases with arguments 3, 4 [-Wrestrict] > f (&alpha, &beta, &alpha, &alpha); /* { dg-warning "passing argument 1 to > restrict-qualified parameter aliases with arguments 3, 4" } */ > ^~~~~~ ~~~~~~ ~~~~~~ > > and you can omit the copy of the dg-warning directive in the expected > multiline output (which would otherwise totally confuse DejaGnu). > Doing so avoids having to specify the line number. Thanks for the detailed explanation! The test-case is now fixed.
Regards, Prathamesh > >> Thanks, >> Prathamesh >> > >> > > > richloc.add_range (loc_of_arg3, false); /* false here = >> > > > don't >> > > > draw >> > > > a >> > > > caret, just the underline */ >> > > > richloc.add_range (loc_of_arg4, false); >> > > > warning_at_rich_loc (&richloc, OPT_Wrestrict, etc... >> > > > >> > > > See line-map.h for more information on rich_location. >> > > >> > > [...]