Commit 580b3958 by Joseph Myers Committed by Joseph Myers

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
parent 93f90be6
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> 2004-08-16 Fariborz Jahanian <fjahanian@apple.com>
* except.c (get_exception_filter, build_post_landing_pads, * except.c (get_exception_filter, build_post_landing_pads,
......
...@@ -4176,12 +4176,17 @@ grokdeclarator (tree declarator, tree declspecs, ...@@ -4176,12 +4176,17 @@ grokdeclarator (tree declarator, tree declspecs,
} }
else if (TREE_CODE (declarator) == CALL_EXPR) else if (TREE_CODE (declarator) == CALL_EXPR)
{ {
/* Say it's a definition only for the CALL_EXPR closest to /* Say it's a definition only for the declarator closest to
the identifier. */ the identifier, apart possibly from some attributes. */
bool really_funcdef = (funcdef_flag bool really_funcdef = false;
&& (TREE_CODE (TREE_OPERAND (declarator, 0))
== IDENTIFIER_NODE));
tree arg_types; 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. /* Declaring a function type.
Make sure we have a valid type for the function to return. */ Make sure we have a valid type for the function to return. */
......
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> 2004-08-16 Janis Johnson <janis187@us.ibm.com>
* gcc.dg/altivec-17.c: New test. * gcc.dg/altivec-17.c: New test.
......
/* 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment