diff options
author | phython <phython@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-07 06:54:52 +0000 |
---|---|---|
committer | phython <phython@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-07 06:54:52 +0000 |
commit | c93cccc66ecf1c66d71f2878f7097db8f8f66fe7 (patch) | |
tree | 87a99f56a55ad99e365d332992dc0743c4f5c904 /gcc/treelang | |
parent | 7946223ee5f94d45b8c8f28fa653853a60f01f59 (diff) | |
download | gcc-c93cccc66ecf1c66d71f2878f7097db8f8f66fe7.tar.gz |
2005-11-07 James A. Morrison <phython@gcc.gnu.org>
PR treelang/21952
* treetree.c (LANG_HOOKS_ATTRIBUTE_TABLE): Set to
treelang_attribute_table.
(handle_attribute): New function.
(treelang_attribute_table): New attribute table.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106582 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/treelang')
-rw-r--r-- | gcc/treelang/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/treelang/treetree.c | 35 |
2 files changed, 41 insertions, 2 deletions
diff --git a/gcc/treelang/ChangeLog b/gcc/treelang/ChangeLog index 45056838074..d38a8a2252e 100644 --- a/gcc/treelang/ChangeLog +++ b/gcc/treelang/ChangeLog @@ -1,3 +1,11 @@ +2005-11-07 James A. Morrison <phython@gcc.gnu.org> + + PR treelang/21952 + * treetree.c (LANG_HOOKS_ATTRIBUTE_TABLE): Set to + treelang_attribute_table. + (handle_attribute): New function. + (treelang_attribute_table): New attribute table. + 2005-09-23 Rafael Ávila de Espíndola <rafael.espindola@gmail.com> * parse.y : Changed pointer declaration from "type* var" to "type *var" diff --git a/gcc/treelang/treetree.c b/gcc/treelang/treetree.c index d7b4d8e781a..b783dedcabe 100644 --- a/gcc/treelang/treetree.c +++ b/gcc/treelang/treetree.c @@ -139,8 +139,10 @@ static tree* getstmtlist (void); /* Langhooks. */ static tree builtin_function (const char *name, tree type, int function_code, - enum built_in_class class, const char *library_name, - tree attrs); + enum built_in_class class, + const char *library_name, + tree attrs); +extern const struct attribute_spec treelang_attribute_table[]; static tree getdecls (void); static int global_bindings_p (void); static void insert_block (tree); @@ -166,6 +168,8 @@ static void treelang_expand_function (tree fndecl); #define LANG_HOOKS_TYPE_FOR_SIZE tree_lang_type_for_size #undef LANG_HOOKS_PARSE_FILE #define LANG_HOOKS_PARSE_FILE treelang_parse_file +#undef LANG_HOOKS_ATTRIBUTE_TABLE +#define LANG_HOOKS_ATTRIBUTE_TABLE treelang_attribute_table #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION treelang_expand_function @@ -1194,6 +1198,33 @@ treelang_init_decl_processing (void) pedantic_lvalues = pedantic; } +static tree +handle_attribute (tree *node, tree name, tree ARG_UNUSED (args), + int ARG_UNUSED (flags), bool *no_add_attrs) +{ + if (TREE_CODE (*node) == FUNCTION_DECL) + { + if (strcmp (IDENTIFIER_POINTER (name), "const") == 0) + TREE_READONLY (*node) = 1; + if (strcmp (IDENTIFIER_POINTER (name), "nothrow") == 0) + TREE_NOTHROW (*node) = 1; + } + else + { + warning (OPT_Wattributes, "%qD attribute ignored", name); + *no_add_attrs = true; + } + + return NULL_TREE; +} + +const struct attribute_spec treelang_attribute_table[] = +{ + { "const", 0, 0, true, false, false, handle_attribute }, + { "nothrow", 0, 0, true, false, false, handle_attribute }, + { NULL, 0, 0, false, false, false, NULL }, +}; + /* Return a definition for a builtin function named NAME and whose data type is TYPE. TYPE should be a function type with argument types. FUNCTION_CODE tells later passes how to compile calls to this function. |