OSDN Git Service

2009-10-01 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 1 Oct 2009 11:30:12 +0000 (11:30 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 1 Oct 2009 11:30:12 +0000 (11:30 +0000)
PR bootstrap/41395
* tree-sra.c (is_va_list_type): New function.
(find_var_candidates): Call is_va_list_type.
(find_param_candidates): Check that the type or the type pointed
to are not va_list types.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@152366 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-sra.c

index 78f6a6e..403306c 100644 (file)
@@ -1,5 +1,13 @@
 2009-10-01  Martin Jambor  <mjambor@suse.cz>
 
+       PR bootstrap/41395
+       * tree-sra.c (is_va_list_type): New function.
+       (find_var_candidates): Call is_va_list_type.
+       (find_param_candidates): Check that the type or the type pointed
+       to are not va_list types.
+
+2009-10-01  Martin Jambor  <mjambor@suse.cz>
+
        PR c++/41503
        * cp/pt.c (function_parameter_expanded_from_pack_p): Return false if
        DECL_ARTIFICIAL (param_decl) is true.
index 92dab57..e5b141f 100644 (file)
@@ -1323,6 +1323,14 @@ build_ref_for_offset (tree *expr, tree type, HOST_WIDE_INT offset,
   return build_ref_for_offset_1 (expr, type, offset, exp_type);
 }
 
+/* Return true iff TYPE is stdarg va_list type.  */
+
+static inline bool
+is_va_list_type (tree type)
+{
+  return TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (va_list_type_node);
+}
+
 /* The very first phase of intraprocedural SRA.  It marks in candidate_bitmap
    those with type which is suitable for scalarization.  */
 
@@ -1350,8 +1358,7 @@ find_var_candidates (void)
              we also want to schedule it rather late.  Thus we ignore it in
              the early pass. */
          || (sra_mode == SRA_MODE_EARLY_INTRA
-             && (TYPE_MAIN_VARIANT (TREE_TYPE (var))
-                 == TYPE_MAIN_VARIANT (va_list_type_node))))
+             && is_va_list_type (type)))
        continue;
 
       bitmap_set_bit (candidate_bitmap, DECL_UID (var));
@@ -2731,11 +2738,13 @@ find_param_candidates (void)
        parm;
        parm = TREE_CHAIN (parm))
     {
-      tree type;
+      tree type = TREE_TYPE (parm);
 
       count++;
+
       if (TREE_THIS_VOLATILE (parm)
-         || TREE_ADDRESSABLE (parm))
+         || TREE_ADDRESSABLE (parm)
+         || is_va_list_type (type))
        continue;
 
       if (is_unused_scalar_param (parm))
@@ -2744,7 +2753,6 @@ find_param_candidates (void)
          continue;
        }
 
-      type = TREE_TYPE (parm);
       if (POINTER_TYPE_P (type))
        {
          type = TREE_TYPE (type);
@@ -2752,6 +2760,7 @@ find_param_candidates (void)
          if (TREE_CODE (type) == FUNCTION_TYPE
              || TYPE_VOLATILE (type)
              || !is_gimple_reg (parm)
+             || is_va_list_type (type)
              || ptr_parm_has_direct_uses (parm))
            continue;
        }