aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-decl.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-08-28 09:03:59 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-08-28 09:03:59 +0000
commitc536a6a77a19a895e51e5e5167d266bd8ce61001 (patch)
tree011fca32e4efb23ba0a1e1758ff407cd0dc46ae8 /gcc/c-decl.c
parent44d5230cc3b623e04e46b2674fbf971743e55057 (diff)
downloadgcc-c536a6a77a19a895e51e5e5167d266bd8ce61001.zip
gcc-c536a6a77a19a895e51e5e5167d266bd8ce61001.tar.gz
gcc-c536a6a77a19a895e51e5e5167d266bd8ce61001.tar.bz2
tree.h (DECL_DISREGARD_INLINE_LIMITS): New.
2007-08-28 Richard Guenther <rguenther@suse.de> * tree.h (DECL_DISREGARD_INLINE_LIMITS): New. (struct tree_function_decl): Make function_code a bitfield. Add disregard_inline_limits flag. * cgraphunit.c (cgraph_process_new_functions): Check DECL_DISREGARD_INLINE_LIMITS instead of disregard_inline_limits_p. (cgraph_preserve_function_body_p): Likewise. * ipa-inline.c (compute_inline_parameters): Likewise. * c-decl.c (finish_function): Set DECL_DISREGARD_INLINE_LIMITS for GNU C extern inline functions. (merge_decls): Merge DECL_DISREGARD_INLINE_LIMITS. * tree-inline.c (disregard_inline_limits_p): Remove. * tree-inline.h (disregard_inline_limits_p): Likewise. * c-common.c (handle_always_inline_attribute): Set DECL_DISREGARD_INLINE_LIMITS. * langhooks.c (add_builtin_function): Verify the function code fits in the bitfield. cp/ * decl.c (duplicate_decls): Merge DECL_DISREGARD_INLINE_LIMITS. From-SVN: r127851
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r--gcc/c-decl.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 98489b1..714cf62 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -1819,6 +1819,11 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
= (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
+
+ DECL_DISREGARD_INLINE_LIMITS (newdecl)
+ = DECL_DISREGARD_INLINE_LIMITS (olddecl)
+ = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
+ || DECL_DISREGARD_INLINE_LIMITS (olddecl));
}
if (DECL_BUILT_IN (olddecl))
@@ -6771,6 +6776,11 @@ finish_function (void)
/* Finalize the ELF visibility for the function. */
c_determine_visibility (fndecl);
+ /* For GNU C extern inline functions disregard inline limits. */
+ if (DECL_EXTERNAL (fndecl)
+ && DECL_DECLARED_INLINE_P (fndecl))
+ DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
+
/* Genericize before inlining. Delay genericizing nested functions
until their parent function is genericized. Since finalizing
requires GENERIC, delay that as well. */