aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-parser.c14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr60915.c7
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 8cc268b..a5b4f5f 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,5 +1,11 @@
2014-05-01 Marek Polacek <polacek@redhat.com>
+ PR c/60915
+ * c-parser.c (c_parser_declaration_or_fndef): Give better error if
+ function-definition has an attribute after the declarator.
+
+2014-05-01 Marek Polacek <polacek@redhat.com>
+
PR c/60257
* c-typeck.c (warning_init): Add location_t parameter. Call
warning_at instead of warning.
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index 56f79f6..c22c4ab 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -1688,7 +1688,19 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok,
if (c_parser_next_token_is_keyword (parser, RID_ASM))
asm_name = c_parser_simple_asm_expr (parser);
if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
- postfix_attrs = c_parser_attributes (parser);
+ {
+ postfix_attrs = c_parser_attributes (parser);
+ if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
+ {
+ /* This means there is an attribute specifier after
+ the declarator in a function definition. Provide
+ some more information for the user. */
+ error_at (here, "attributes should be specified before the "
+ "declarator in a function definition");
+ c_parser_skip_to_end_of_block_or_statement (parser);
+ return;
+ }
+ }
if (c_parser_next_token_is (parser, CPP_EQ))
{
tree d;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6424b85..f5976b9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2014-05-01 Marek Polacek <polacek@redhat.com>
+ PR c/60915
+ * gcc.dg/pr60915.c: New test.
+
+2014-05-01 Marek Polacek <polacek@redhat.com>
+
PR c/60257
* gcc.dg/pr60257.c: New test.
diff --git a/gcc/testsuite/gcc.dg/pr60915.c b/gcc/testsuite/gcc.dg/pr60915.c
new file mode 100644
index 0000000..2ed0a5f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr60915.c
@@ -0,0 +1,7 @@
+/* PR c/60915 */
+/* { dg-do compile } */
+
+void /* { dg-error "attributes should be specified before the declarator in a function definition" } */
+foo (void) __attribute__((__visibility__("default")))
+{
+}