]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
C FE: use correct location range for static assertions
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 16 Dec 2015 17:25:45 +0000 (17:25 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 16 Dec 2015 17:25:45 +0000 (17:25 +0000)
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

gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/diagnostic-range-static-assert.c [new file with mode: 0644]

index fd1c707f46b09e2e2197009e677678ede65dd13b..3ed1326fd05a1650f3417e54bab47ee0a05415d4 100644 (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
index 124c30b9939eb8f72557eff9c36a99650b4675eb..5c32f45e21e72b16bf3044e851f1d46f50829cad 100644 (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 %<,%>"))
     {
index 7a66b14fecbfacc9fa375edcec322957fbf961bc..adfb4e059a01b859bc3dd2fb57ed010244be22bd 100644 (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
diff --git a/gcc/testsuite/gcc.dg/diagnostic-range-static-assert.c b/gcc/testsuite/gcc.dg/diagnostic-range-static-assert.c
new file mode 100644 (file)
index 0000000..6f75476
--- /dev/null
@@ -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 "" } */
+}