diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-06 02:20:16 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-06 02:20:16 +0000 |
commit | 1f8a6ff8484e367b87d47717fae8eacf2deea6da (patch) | |
tree | e36b5564359495ed12dc4107ed22bf65a3afddcc /gcc/cp/cp-lang.c | |
parent | 03fee89c3c1c11afc6073aebba4e2d5cee7ed29f (diff) | |
download | gcc-1f8a6ff8484e367b87d47717fae8eacf2deea6da.tar.gz |
* langhooks-def.h (LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P): Extra arg.
* langhooks.h (var_mod_type_p): Likewise.
* c-decl.c (finish_decl): Add extra arg to variably_modified_type_p.
* expr.c (count_type_elements): Properly handle return from
array_type_nelts and properly test for overflow.
* gimplify.c (gimplify_init_constructor): Properly handle return
from array_type_nelts.
(gimplify_addr_expr): Remove redundant clear of TREE_SIDE_EFFECTS.
* integrate.c (copy_decl_for_inlining): Correct comments.
* tree-inline.c (remap_decl): Update comments, remove dead code,
and copy DECL_FIELD_OFFSET and DECL_QUALIFIER, if they exist.
(remap_type): Only remap if variably modified by vars in function
being inlined.
(copy_body_r): Use compatible_type langhooks to see when can fold.
(setup_one_parameter): Don't remap type.
(inline_forbidden_p_1): Add arg to variably_modified_type_p.
* tree.c (recompute_tree_invarant_for_addr_expr): Properly
compute TREE_INVARIANT for decl case.
(find_var_from_fn): New function.
(variably_modified_type_p): Add arg and call new function.
* tree.h (variably_modified_type_p): Add extra arg.
* cp/cp-lang.c (cp_var_mod_type_p): Add extra arg.
* cp/decl.c (grokdeclarator): Extra arg to variably_modified_type_p.
* cp/pt.c (check_instantiated_args, unify): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84144 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/cp-lang.c')
-rw-r--r-- | gcc/cp/cp-lang.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index 98b94581793..5e403d86d97 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -38,7 +38,7 @@ static HOST_WIDE_INT cxx_get_alias_set (tree); static bool cxx_warn_unused_global_decl (tree); static tree cp_expr_size (tree); static size_t cp_tree_size (enum tree_code); -static bool cp_var_mod_type_p (tree); +static bool cp_var_mod_type_p (tree, tree); static int cxx_types_compatible_p (tree, tree); static void cxx_initialize_diagnostics (diagnostic_context *); @@ -307,17 +307,19 @@ cp_tree_size (enum tree_code code) } /* Returns true if T is a variably modified type, in the sense of C99. + FN is as passed to variably_modified_p. This routine needs only check cases that cannot be handled by the - language-independent logic in tree-inline.c. */ + language-independent logic in tree.c. */ static bool -cp_var_mod_type_p (tree type) +cp_var_mod_type_p (tree type, tree fn) { /* If TYPE is a pointer-to-member, it is variably modified if either the class or the member are variably modified. */ if (TYPE_PTR_TO_MEMBER_P (type)) - return (variably_modified_type_p (TYPE_PTRMEM_CLASS_TYPE (type)) - || variably_modified_type_p (TYPE_PTRMEM_POINTED_TO_TYPE (type))); + return (variably_modified_type_p (TYPE_PTRMEM_CLASS_TYPE (type), fn) + || variably_modified_type_p (TYPE_PTRMEM_POINTED_TO_TYPE (type), + fn)); /* All other types are not variably modified. */ return false; |