mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-14 04:29:37 +08:00
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:
parent
93f90be62c
commit
580b395826
@ -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,
|
||||
|
15
gcc/c-decl.c
15
gcc/c-decl.c
@ -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. */
|
||||
|
@ -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.
|
||||
|
14
gcc/testsuite/gcc.dg/funcdef-attr-1.c
Normal file
14
gcc/testsuite/gcc.dg/funcdef-attr-1.c
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user