Mercurial > hg > CbC > CbC_gcc
diff gcc/attribs.c @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children | 04ced10e8804 |
line wrap: on
line diff
--- a/gcc/attribs.c Tue May 25 18:58:51 2010 +0900 +++ b/gcc/attribs.c Tue Mar 22 17:18:12 2011 +0900 @@ -25,9 +25,7 @@ #include "tm.h" #include "tree.h" #include "flags.h" -#include "toplev.h" -#include "output.h" -#include "rtl.h" +#include "diagnostic-core.h" #include "ggc.h" #include "tm_p.h" #include "cpplib.h" @@ -210,7 +208,7 @@ /* Return the spec for the attribute named NAME. */ const struct attribute_spec * -lookup_attribute_spec (tree name) +lookup_attribute_spec (const_tree name) { struct substring attr; @@ -278,6 +276,19 @@ TREE_VALUE (cur_attr) = chainon (opts, TREE_VALUE (cur_attr)); } + /* A "naked" function attribute implies "noinline" and "noclone" for + those targets that support it. */ + if (TREE_CODE (*node) == FUNCTION_DECL + && lookup_attribute_spec (get_identifier ("naked")) + && lookup_attribute ("naked", attributes) != NULL) + { + if (lookup_attribute ("noinline", attributes) == NULL) + attributes = tree_cons (get_identifier ("noinline"), NULL, attributes); + + if (lookup_attribute ("noclone", attributes) == NULL) + attributes = tree_cons (get_identifier ("noclone"), NULL, attributes); + } + targetm.insert_attributes (*node, &attributes); for (a = attributes; a; a = TREE_CHAIN (a))