This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]