Commit 44190aed by Anatoly Sokolov Committed by Anatoly Sokolov

re PR target/31331 ([avr] ICE on function attribute syntax for main())

	PR target/31331
	* config/avr/avr.c (avr_naked_function_p): Handle receiving a type
	rather than a decl. 
	(avr_attribute_table): Make "naked" attribute apply to function types
	rather than to decls.
	(avr_handle_fntype_attribute): New function.

From-SVN: r126337
parent 73ed1968
2007-07-04 Anatoly Sokolov <aesok@post.ru>
PR target/31331
* config/avr/avr.c (avr_naked_function_p): Handle receiving a type
rather than a decl.
(avr_attribute_table): Make "naked" attribute apply to function types
rather than to decls.
(avr_handle_fntype_attribute): New function.
2007-07-04 Joseph Myers <joseph@codesourcery.com>
* target-def.h (TARGET_INITIALIZER): Remove trailing whitespace
......
......@@ -62,6 +62,7 @@ static RTX_CODE compare_condition (rtx insn);
static int compare_sign_p (rtx insn);
static tree avr_handle_progmem_attribute (tree *, tree, tree, int, bool *);
static tree avr_handle_fndecl_attribute (tree *, tree, tree, int, bool *);
static tree avr_handle_fntype_attribute (tree *, tree, tree, int, bool *);
const struct attribute_spec avr_attribute_table[];
static bool avr_assemble_integer (rtx, unsigned int, int);
static void avr_file_start (void);
......@@ -400,7 +401,7 @@ avr_naked_function_p (tree func)
gcc_assert (TREE_CODE (func) == FUNCTION_DECL);
a = lookup_attribute ("naked", DECL_ATTRIBUTES (func));
a = lookup_attribute ("naked", TYPE_ATTRIBUTES (TREE_TYPE (func)));
return a != NULL_TREE;
}
......@@ -4585,7 +4586,7 @@ const struct attribute_spec avr_attribute_table[] =
{ "progmem", 0, 0, false, false, false, avr_handle_progmem_attribute },
{ "signal", 0, 0, true, false, false, avr_handle_fndecl_attribute },
{ "interrupt", 0, 0, true, false, false, avr_handle_fndecl_attribute },
{ "naked", 0, 0, true, false, false, avr_handle_fndecl_attribute },
{ "naked", 0, 0, false, true, true, avr_handle_fntype_attribute },
{ NULL, 0, 0, false, false, false, NULL }
};
......@@ -4677,6 +4678,22 @@ avr_handle_fndecl_attribute (tree *node, tree name,
return NULL_TREE;
}
static tree
avr_handle_fntype_attribute (tree *node, tree name,
tree args ATTRIBUTE_UNUSED,
int flags ATTRIBUTE_UNUSED,
bool *no_add_attrs)
{
if (TREE_CODE (*node) != FUNCTION_TYPE)
{
warning (OPT_Wattributes, "%qs attribute only applies to functions",
IDENTIFIER_POINTER (name));
*no_add_attrs = true;
}
return NULL_TREE;
}
/* Look for attribute `progmem' in DECL
if found return 1, otherwise 0. */
......
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