c-decl.c (grokdeclarator): Allow for function definition where innermost declarator has attributes.

* c-decl.c (grokdeclarator): Allow for function definition where
	innermost declarator has attributes.

testsuite:
	* gcc.dg/funcdef-attr-1.c: New test.

From-SVN: r86075
This commit is contained in:
Joseph Myers 2004-08-16 21:35:21 +01:00 committed by Joseph Myers
parent 93f90be62c
commit 580b395826
4 changed files with 33 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2004-08-16 Joseph S. Myers <jsm@polyomino.org.uk>
* c-decl.c (grokdeclarator): Allow for function definition where
innermost declarator has attributes.
2004-08-16 Fariborz Jahanian <fjahanian@apple.com>
* except.c (get_exception_filter, build_post_landing_pads,

View File

@ -4176,12 +4176,17 @@ grokdeclarator (tree declarator, tree declspecs,
}
else if (TREE_CODE (declarator) == CALL_EXPR)
{
/* Say it's a definition only for the CALL_EXPR closest to
the identifier. */
bool really_funcdef = (funcdef_flag
&& (TREE_CODE (TREE_OPERAND (declarator, 0))
== IDENTIFIER_NODE));
/* Say it's a definition only for the declarator closest to
the identifier, apart possibly from some attributes. */
bool really_funcdef = false;
tree arg_types;
if (funcdef_flag)
{
tree t = TREE_OPERAND (declarator, 0);
while (TREE_CODE (t) == TREE_LIST)
t = TREE_VALUE (t);
really_funcdef = (TREE_CODE (t) == IDENTIFIER_NODE);
}
/* Declaring a function type.
Make sure we have a valid type for the function to return. */

View File

@ -1,3 +1,7 @@
2004-08-16 Joseph S. Myers <jsm@polyomino.org.uk>
* gcc.dg/funcdef-attr-1.c: New test.
2004-08-16 Janis Johnson <janis187@us.ibm.com>
* gcc.dg/altivec-17.c: New test.

View File

@ -0,0 +1,14 @@
/* The declarator in a function definition should be able to take the
form of an attributed function declarator, not just a plain
function declarator. This was formerly allowed by some of the code
but then the wrong constraint checks were made because other code
didn't recognise the declarator as being that of the function
definition. */
/* Origin: Joseph Myers <jsm@polyomino.org.uk>. */
int (__attribute__((const)) x) (a, b)
int a;
int b;
{
return a + b;
}