c-gimplify.c (gimplify_decl_stmt): Push gimplify_one_sizepos inside non-constant...
authorRichard Henderson <rth@redhat.com>
Thu, 24 Jun 2004 05:35:16 +0000 (22:35 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 24 Jun 2004 05:35:16 +0000 (22:35 -0700)
* c-gimplify.c (gimplify_decl_stmt): Push gimplify_one_sizepos inside
non-constant size check.  Gimplify the type too.  Tidy building
BUILT_IN_STACK_ALLOC call

From-SVN: r83582

gcc/ChangeLog
gcc/c-gimplify.c

index be182139dc3633b4d2554176e81168a162dbeb3e..bd1c4a369f9c4e4ef033d9222f1d921bfa8c299d 100644 (file)
@@ -1,3 +1,9 @@
+2004-06-23  Richard Henderson  <rth@redhat.com>
+
+       * c-gimplify.c (gimplify_decl_stmt): Push gimplify_one_sizepos inside
+       non-constant size check.  Gimplify the type too.  Tidy building
+       BUILT_IN_STACK_ALLOC call
+
 2004-06-23  Roger Sayle  <roger@eyesopen.com>
 
        * c-common.c (expand_unordered_cmp): Delete.
index a3040d0bcd231bb46e0c64d5577a339c48d5acbe..44af046d1eea2037691ea61b440c7e1bd20e3eb0 100644 (file)
@@ -488,25 +488,25 @@ gimplify_decl_stmt (tree *stmt_p)
     {
       tree init = DECL_INITIAL (decl);
 
-      gimplify_one_sizepos (&DECL_SIZE (decl), stmt_p);
-      gimplify_one_sizepos (&DECL_SIZE_UNIT (decl), stmt_p);
-
       if (!TREE_CONSTANT (DECL_SIZE (decl)))
        {
          /* This is a variable-sized decl.  Simplify its size and mark it
             for deferred expansion.  Note that mudflap depends on the format
             of the emitted code: see mx_register_decls().  */
 
-         tree pt_type = build_pointer_type (TREE_TYPE (decl));
-         tree alloc_stmt
-           = (build_function_call_expr
-              (implicit_built_in_decls[BUILT_IN_STACK_ALLOC],
-               tree_cons (NULL_TREE,
-                          build1 (ADDR_EXPR, pt_type, decl),
-                          tree_cons (NULL_TREE, DECL_SIZE_UNIT (decl),
-                                     NULL_TREE))));
+         tree t, args;
+
+         gimplify_type_sizes (TREE_TYPE (decl), stmt_p);
+         gimplify_one_sizepos (&DECL_SIZE (decl), stmt_p);
+         gimplify_one_sizepos (&DECL_SIZE_UNIT (decl), stmt_p);
+
+         args = tree_cons (NULL, DECL_SIZE_UNIT (decl), NULL);
+         t = build_fold_addr_expr (decl);
+         args = tree_cons (NULL, t, args);
+         t = implicit_built_in_decls[BUILT_IN_STACK_ALLOC];
+         t = build_function_call_expr (t, args);
 
-         gimplify_and_add (alloc_stmt, stmt_p);
+         gimplify_and_add (t, stmt_p);
          DECL_DEFER_OUTPUT (decl) = 1;
        }