[PATCH] C FE: implement fix-it hint for -Wmissing-braces

Jeff Law law@redhat.com
Wed Dec 7 19:49:00 GMT 2016


On 11/11/2016 06:30 PM, David Malcolm wrote:
> This patch implements fix-it hints to -Wmissing-braces, showing where to
> add braces.
>
> For example:
>
>   $ cat test.c
>   int arr_2_3_2[2][3][2] =
>     { 0, 1, 2, 3, 4, 5,
>       6, 7, 8, 9, 10, 11};
>
>   $ ./xgcc -B. -c test.c -Wall -fdiagnostics-generate-patch
>   test.c:2:3: warning: missing braces around initializer [-Wmissing-braces]
>      { 0, 1, 2, 3, 4, 5,
>      ^
>        {
>        {   } {   } {   }
>                        }
>        6, 7, 8, 9, 10, 11};
>        {
>        {   } {   } {     }
>                          }
>   --- test.c
>   +++ test.c
>   @@ -1,3 +1,3 @@
>    int arr_2_3_2[2][3][2] =
>   -  { 0, 1, 2, 3, 4, 5,
>   -    6, 7, 8, 9, 10, 11};
>   +  { {{0, 1}, {2, 3}, {4, 5}},
>   +    {{6, 7}, {8, 9}, {10, 11}}};
>
> Successfully bootstrapped&regrtested on x86_64-pc-linux-gnu; adds
> 29 PASS results to gcc.sum.
>
> OK for trunk?
>
> gcc/c/ChangeLog:
> 	* c-parser.c (c_parser_declaration_or_fndef): Create a
> 	rich_location at init_loc and parse it to start_init.
>         (last_init_list_comma): New global.
> 	(c_parser_braced_init): Update last_init_list_comma when parsing
> 	commas.  Pass it to pop_init_level.  Pass location of closing
> 	brace to pop_init_level.
> 	(c_parser_postfix_expression_after_paren_type): Create a
> 	rich_location at type_loc and parse it to start_init.
> 	(c_parser_omp_declare_reduction): Likewise for loc.
> 	* c-tree.h (start_init): Add rich_location * param.
> 	(pop_init_level): Add location_t param.
> 	* c-typeck.c (struct initializer_stack): Add field
> 	"missing_brace_richloc".
> 	(start_init): Add richloc param, use it to initialize
> 	the stack node's missing_brace_richloc.
> 	(last_init_list_comma): New decl.
> 	(finish_implicit_inits): Pass last_init_list_comma to
> 	pop_init_level.
> 	(push_init_level): When finding missing open braces, add fix-it
> 	hints to the richloc.
> 	(pop_init_level): Add "insert_before" param and pass it
> 	when calling pop_init_level.  Add fixits about missing
> 	close braces to any richloc.  Use the richloc for the
> 	-Wmissing-braces warning.
> 	(set_designator): Pass last_init_list_comma to pop_init_level.
> 	(process_init_element): Likewise.
>
> gcc/testsuite/ChangeLog:
> 	* gcc.dg/Wmissing-braces-fixits.c: New test case.
I'm a bit unsure about how useful this is in practice.  But OK.

jeff




More information about the Gcc-patches mailing list