C FE: use correct location range for static assertions

gcc/c/ChangeLog:
	* c-parser.c (c_parser_static_assert_declaration_no_semi): Use the
	expression location, falling back on the first token location,
	rather than always using the latter.

gcc/testsuite/ChangeLog:
	* gcc.dg/diagnostic-range-static-assert.c: New test case.

From-SVN: r231704
This commit is contained in:
David Malcolm 2015-12-16 17:25:45 +00:00 committed by David Malcolm
parent 040b0c97c4
commit 8062bca66d
4 changed files with 36 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2015-12-16 David Malcolm <dmalcolm@redhat.com>
* c-parser.c (c_parser_static_assert_declaration_no_semi): Use the
expression location, falling back on the first token location,
rather than always using the latter.
2015-12-16 Marek Polacek <polacek@redhat.com>
PR c/64637

View file

@ -2097,8 +2097,9 @@ c_parser_static_assert_declaration_no_semi (c_parser *parser)
c_parser_consume_token (parser);
if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
return;
value_loc = c_parser_peek_token (parser)->location;
location_t value_tok_loc = c_parser_peek_token (parser)->location;
value = c_parser_expr_no_commas (parser, NULL).value;
value_loc = EXPR_LOC_OR_LOC (value, value_tok_loc);
parser->lex_untranslated_string = true;
if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
{

View file

@ -1,3 +1,7 @@
2015-12-16 David Malcolm <dmalcolm@redhat.com>
* gcc.dg/diagnostic-range-static-assert.c: New test case.
2015-12-16 Marek Polacek <polacek@redhat.com>
PR c/64637

View file

@ -0,0 +1,24 @@
/* { dg-options "-fdiagnostics-show-caret" } */
void test_nonconst_static_assert (int param)
{
int local = 0;
_Static_assert (param > 0, "message"); /* { dg-error "expression in static assertion is not constant" } */
/* { dg-begin-multiline-output "" }
_Static_assert (param > 0, "message");
~~~~~~^~~
{ dg-end-multiline-output "" } */
_Static_assert (param, "message"); /* { dg-error "expression in static assertion is not constant" } */
/* { dg-begin-multiline-output "" }
_Static_assert (param, "message");
^~~~~
{ dg-end-multiline-output "" } */
_Static_assert (local, "message"); /* { dg-error "expression in static assertion is not constant" } */
/* { dg-begin-multiline-output "" }
_Static_assert (local, "message");
^~~~~
{ dg-end-multiline-output "" } */
}