diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-08-19 17:34:11 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-08-19 17:34:11 -0400 |
commit | c8ad69c183faa9932f9bd50e85e52e25c7b3b614 (patch) | |
tree | 2c9fa1b37be8efabcb56d285d51c3221b50ba2c3 | |
parent | 5c1c34d393bfd4ae5bed985266af00f41e61475a (diff) | |
download | gcc-c8ad69c183faa9932f9bd50e85e52e25c7b3b614.zip gcc-c8ad69c183faa9932f9bd50e85e52e25c7b3b614.tar.gz gcc-c8ad69c183faa9932f9bd50e85e52e25c7b3b614.tar.bz2 |
(function_cannot_inline): Don't inline if any parm is a transparent
union.
From-SVN: r7950
-rw-r--r-- | gcc/integrate.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c index 1f4874c..2355508 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -134,10 +134,15 @@ function_cannot_inline_p (fndecl) if (int_size_in_bytes (TREE_TYPE (TREE_TYPE (fndecl))) < 0) return "function with varying-size return value cannot be inline"; - /* Cannot inline a function with a varying size argument. */ + /* Cannot inline a function with a varying size argument or one that + receives a transparent union. */ for (parms = DECL_ARGUMENTS (fndecl); parms; parms = TREE_CHAIN (parms)) - if (int_size_in_bytes (TREE_TYPE (parms)) < 0) - return "function with varying-size parameter cannot be inline"; + { + if (int_size_in_bytes (TREE_TYPE (parms)) < 0) + return "function with varying-size parameter cannot be inline"; + else if (TYPE_TRANSPARENT_UNION (TREE_TYPE (parms))) + return "function with transparent unit parameter cannot be inline"; + } if (!DECL_INLINE (fndecl) && get_max_uid () > max_insns) { |