This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] C: fixits for modernizing structure member designators
On Tue, 2016-08-30 at 16:50 +0200, Marek Polacek wrote:
> On Tue, Aug 30, 2016 at 04:40:57PM +0200, Bernd Schmidt wrote:
> > On 08/30/2016 04:38 PM, David Malcolm wrote:
> >
> > > In conjunction with the not-yet-in-trunk -fdiagnostics-generate
> > > -patch,
> > > this can generate patches like this:
> > >
> > > --- modernize-named-inits.c
> > > +++ modernize-named-inits.c
> > > @@ -16,7 +16,7 @@
> > > /* Old-style named initializers. */
> > >
> > > struct foo old_style_f = {
> > > - foo: 1,
> > > - bar: 2,
> > > + .foo= 1,
> > > + .bar= 2,
> > > };
> >
> > What happens if there are newlines in between any of the tokens?
>
> It's easy to check for yourself: when the identifier and colon are
> not
> on the same line, we print something like
>
> w.c: In function ‘main’:
> w.c:7:1: warning: obsolete use of designated initializer with ‘:’ [
> -Wpedantic]
> :
> ^
> =
>
> which I don't think is desirable -- giving up on the fix-it hint in
> such case
> could be appropriate.
I think that's a bug in diagnostic-show-locus.c; currently it only
prints lines and fixits for the lines references in the ranges within
the rich_location. I'll try to fix that.
> I admit I dislike the lack of a space before = in ".bar= 2", but
> using
>
> richloc.add_fixit_replace (colon_loc, " =");
>
> wouldn't work for "foo : 1" I think.
I actually tried that first, but I didn't like the way it was printed
e.g.:
w.c: In function ‘main’:> w.c:7:1: warning: obsolete use of designated
initializer with ‘:’ [-Wpedantic]>
foo: 1,
^
. =
I'm looking at rewriting how fixits get printed, to print the affected
range of the affected lines (using the edit-context.c work posted last
week), so this would appear as:
foo: 1,
^
.foo =
Also, there may be a case for adding some smarts to gcc_rich_location for adding fixits in a formatting-aware way, by looking at the neighboring whitespace (this might help for the issue with adding "break;" etc in the fallthru patch kit).
Dave