diff options
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index dd5f1ea..bdb6819 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -52,7 +52,8 @@ along with GCC; see the file COPYING3. If not see #include "c-pragma.h" #include "langhooks.h" #include "tree-mudflap.h" -#include "tree-gimple.h" +#include "gimple.h" +#include "tree-iterator.h" #include "diagnostic.h" #include "tree-dump.h" #include "cgraph.h" @@ -61,6 +62,7 @@ along with GCC; see the file COPYING3. If not see #include "except.h" #include "langhooks-def.h" #include "pointer-set.h" +#include "gimple.h" /* In grokdeclarator, distinguish syntactic contexts of declarators. */ enum decl_context @@ -248,7 +250,7 @@ extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate union lang_tree_node GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), - chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : ((union lang_tree_node *) GENERIC_NEXT (&%h.generic))"))) + chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : ((union lang_tree_node *) TREE_CHAIN (&%h.generic))"))) { union tree_node GTY ((tag ("0"), desc ("tree_node_structure (&%h)"))) @@ -1836,6 +1838,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype) DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl); DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl); DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl); + gimple_set_body (newdecl, gimple_body (olddecl)); DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl); /* Set DECL_INLINE on the declaration if we've got a body @@ -1870,6 +1873,10 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype) sizeof (struct tree_decl_common) - sizeof (struct tree_common)); switch (TREE_CODE (olddecl)) { + case FUNCTION_DECL: + gimple_set_body (olddecl, gimple_body (newdecl)); + /* fall through */ + case FIELD_DECL: case VAR_DECL: case PARM_DECL: @@ -1877,7 +1884,6 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype) case RESULT_DECL: case CONST_DECL: case TYPE_DECL: - case FUNCTION_DECL: memcpy ((char *) olddecl + sizeof (struct tree_decl_common), (char *) newdecl + sizeof (struct tree_decl_common), tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common)); @@ -4050,7 +4056,7 @@ grokdeclarator (const struct c_declarator *declarator, "signed". */ if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p && TREE_CODE (type) == INTEGER_TYPE) - type = c_common_unsigned_type (type); + type = unsigned_type_for (type); /* Figure out the type qualifiers for the declaration. There are two ways a declaration can become qualified. One is something @@ -6634,9 +6640,10 @@ static void c_gimple_diagnostics_recursively (tree fndecl) { struct cgraph_node *cgn; + gimple_seq body = gimple_body (fndecl); /* Handle attribute((warn_unused_result)). Relies on gimple input. */ - c_warn_unused_result (&DECL_SAVED_TREE (fndecl)); + c_warn_unused_result (body); /* Notice when OpenMP structured block constraints are violated. */ if (flag_openmp) |