mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 02:34:43 +08:00
re PR ada/21952 (Annoying "attribute directive ignored" warnings)
PR ada/21952 * gigi.h (gnat_internal_attribute_table): Declare. * misc.c (LANG_HOOKS_ATTRIBUTE_TABLE): Define to above. * utils.c (gnat_internal_attribute_table): New global variable. (builtin_function): Always call decl_attributes on the builtin. (handle_const_attribute): New static function. (handle_nothrow_attribute): Likewise. From-SVN: r116926
This commit is contained in:
parent
f66fd328ce
commit
2655f1c6dd
@ -1,3 +1,13 @@
|
||||
2006-09-13 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR ada/21952
|
||||
* gigi.h (gnat_internal_attribute_table): Declare.
|
||||
* misc.c (LANG_HOOKS_ATTRIBUTE_TABLE): Define to above.
|
||||
* utils.c (gnat_internal_attribute_table): New global variable.
|
||||
(builtin_function): Always call decl_attributes on the builtin.
|
||||
(handle_const_attribute): New static function.
|
||||
(handle_nothrow_attribute): Likewise.
|
||||
|
||||
2006-07-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
* Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies.
|
||||
|
@ -309,7 +309,6 @@ extern int force_global;
|
||||
type whose bit width is Pmode. Assume "long" is such a type here. */
|
||||
#undef SIZE_TYPE
|
||||
#define SIZE_TYPE "long int"
|
||||
|
||||
|
||||
/* Data structures used to represent attributes. */
|
||||
|
||||
@ -332,6 +331,9 @@ struct attrib
|
||||
Node_Id error_point;
|
||||
};
|
||||
|
||||
/* Table of machine-independent internal attributes. */
|
||||
extern const struct attribute_spec gnat_internal_attribute_table[];
|
||||
|
||||
/* Define the entries in the standard data array. */
|
||||
enum standard_datatypes
|
||||
{
|
||||
|
@ -161,6 +161,8 @@ static tree gnat_type_max_size (tree);
|
||||
#define LANG_HOOKS_UNSIGNED_TYPE gnat_unsigned_type
|
||||
#undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
|
||||
#define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE gnat_signed_or_unsigned_type
|
||||
#undef LANG_HOOKS_ATTRIBUTE_TABLE
|
||||
#define LANG_HOOKS_ATTRIBUTE_TABLE gnat_internal_attribute_table
|
||||
|
||||
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
|
||||
|
||||
|
@ -79,6 +79,21 @@ tree gnat_raise_decls[(int) LAST_REASON_CODE + 1];
|
||||
tree static_ctors;
|
||||
tree static_dtors;
|
||||
|
||||
/* Forward declarations for handlers of attributes. */
|
||||
static tree handle_const_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
|
||||
|
||||
/* Table of machine-independent internal attributes for Ada. We support
|
||||
this minimal set ot attributes to accomodate the Alpha back-end which
|
||||
unconditionally puts them on its builtins. */
|
||||
const struct attribute_spec gnat_internal_attribute_table[] =
|
||||
{
|
||||
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
|
||||
{ "const", 0, 0, true, false, false, handle_const_attribute },
|
||||
{ "nothrow", 0, 0, true, false, false, handle_nothrow_attribute },
|
||||
{ NULL, 0, 0, false, false, false, NULL }
|
||||
};
|
||||
|
||||
/* Associates a GNAT tree node to a GCC tree node. It is used in
|
||||
`save_gnu_tree', `get_gnu_tree' and `present_gnu_tree'. See documentation
|
||||
of `save_gnu_tree' for more info. */
|
||||
@ -1826,11 +1841,48 @@ builtin_function (const char *name, tree type, int function_code,
|
||||
gnat_pushdecl (decl, Empty);
|
||||
DECL_BUILT_IN_CLASS (decl) = class;
|
||||
DECL_FUNCTION_CODE (decl) = function_code;
|
||||
|
||||
/* Possibly apply some default attributes to this built-in function. */
|
||||
if (attrs)
|
||||
decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
|
||||
decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
|
||||
else
|
||||
decl_attributes (&decl, NULL_TREE, 0);
|
||||
|
||||
return decl;
|
||||
}
|
||||
|
||||
/* Handle a "const" attribute; arguments as in
|
||||
struct attribute_spec.handler. */
|
||||
|
||||
static tree
|
||||
handle_const_attribute (tree *node, tree ARG_UNUSED (name),
|
||||
tree ARG_UNUSED (args), int ARG_UNUSED (flags),
|
||||
bool *no_add_attrs)
|
||||
{
|
||||
if (TREE_CODE (*node) == FUNCTION_DECL)
|
||||
TREE_READONLY (*node) = 1;
|
||||
else
|
||||
*no_add_attrs = true;
|
||||
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
/* Handle a "nothrow" attribute; arguments as in
|
||||
struct attribute_spec.handler. */
|
||||
|
||||
static tree
|
||||
handle_nothrow_attribute (tree *node, tree ARG_UNUSED (name),
|
||||
tree ARG_UNUSED (args), int ARG_UNUSED (flags),
|
||||
bool *no_add_attrs)
|
||||
{
|
||||
if (TREE_CODE (*node) == FUNCTION_DECL)
|
||||
TREE_NOTHROW (*node) = 1;
|
||||
else
|
||||
*no_add_attrs = true;
|
||||
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
/* Return an integer type with the number of bits of precision given by
|
||||
PRECISION. UNSIGNEDP is nonzero if the type is unsigned; otherwise
|
||||
it is a signed type. */
|
||||
|
Loading…
Reference in New Issue
Block a user