David Malcolm 62e1c6780d C/C++: add fix-it hints for various missing symbols
The patch improves our C/C++ frontends' handling of missing
symbols, by making c_parser_require and cp_parser_require use
"better" locations for the diagnostic, and insert fix-it hints,
under certain circumstances (see the comments in the patch for
full details).

For example, for this code with a missing semicolon:

  $ cat test.c
  int missing_semicolon (void)
  {
    return 42
  }

  trunk currently emits:

  test.c:4:1: error: expected ';' before '}' token
   }
   ^

This patch adds a fix-it hint for the missing semicolon, and puts
the error at the location of the missing semicolon, printing the
followup token as a secondary location:

  test.c:3:12: error: expected ';' before '}' token
     return 42
              ^
              ;
   }
   ~

More examples can be seen in the test cases.

gcc/c-family/ChangeLog:
	* c-common.c (enum missing_token_insertion_kind): New enum.
	(get_missing_token_insertion_kind): New function.
	(maybe_suggest_missing_token_insertion): New function.
	* c-common.h (maybe_suggest_missing_token_insertion): New decl.

gcc/c/ChangeLog:
	* c-parser.c (c_parser_require): Add "type_is_unique" param and
	use it to guard calls to maybe_suggest_missing_token_insertion.
	(c_parser_parms_list_declarator): Override default value of new
	"type_is_unique" param to c_parser_require.
	(c_parser_asm_statement): Likewise.
	* c-parser.h (c_parser_require): Add "type_is_unique" param,
	defaulting to true.

gcc/cp/ChangeLog:
	* parser.c (get_required_cpp_ttype): New function.
	(cp_parser_error_1): Call it, using the result to call
	maybe_suggest_missing_token_insertion.

gcc/testsuite/ChangeLog:
	* c-c++-common/cilk-plus/AN/parser_errors.c: Update expected
	output to reflect changes to reported locations of missing
	symbols.
	* c-c++-common/cilk-plus/AN/parser_errors2.c: Likewise.
	* c-c++-common/cilk-plus/AN/parser_errors3.c: Likewise.
	* c-c++-common/cilk-plus/AN/pr61191.c: Likewise.
	* c-c++-common/gomp/pr63326.c: Likewise.
	* c-c++-common/missing-close-symbol.c: Likewise, also update for
	new fix-it hints.
	* c-c++-common/missing-symbol.c: Likewise, also add test coverage
	for missing colon in ternary operator.
	* g++.dg/cpp1y/digit-sep-neg.C: Likewise.
	* g++.dg/cpp1y/pr65202.C: Likewise.
	* g++.dg/missing-symbol-2.C: New test case.
	* g++.dg/other/do1.C: Update expected output to reflect
	changes to reported locations of missing symbols.
	* g++.dg/parse/error11.C: Likewise.
	* g++.dg/template/error11.C: Likewise.
	* gcc.dg/missing-symbol-2.c: New test case.
	* gcc.dg/missing-symbol-3.c: New test case.
	* gcc.dg/noncompile/940112-1.c: Update expected output to reflect
	changes to reported locations of missing symbols.
	* gcc.dg/noncompile/971104-1.c: Likewise.
	* obj-c++.dg/exceptions-6.mm: Likewise.
	* obj-c++.dg/pr48187.mm: Likewise.
	* objc.dg/exceptions-6.m: Likewise.

From-SVN: r253690
2017-10-12 17:49:35 +00:00
..
2017-08-08 04:46:51 +00:00
2017-05-24 16:07:21 -06:00
2017-07-06 15:49:37 +00:00
2017-10-10 16:55:34 +00:00