]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR pch/13689 (GGC PCH breaks aliasing)
authorGeoffrey Keating <geoffk@apple.com>
Fri, 16 Jan 2004 07:28:11 +0000 (07:28 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Fri, 16 Jan 2004 07:28:11 +0000 (07:28 +0000)
PR pch/13689
* alias.c (struct alias_set_entry): Mark for GC.
(alias_sets): Make static, mark for GC.
(record_alias_subset): Use GC to allocate alias structures.
* varray.c (element): Make generic varrays GCed.

From-SVN: r75962

gcc/ChangeLog
gcc/alias.c
gcc/varray.c

index 35f3b982131f7caf89d4643fe3e0efa6b4b30b3f..adc7d9bd8b70e8d5d7577e7501a0ec385065bd70 100644 (file)
@@ -1,5 +1,11 @@
 2004-01-15  Geoffrey Keating  <geoffk@apple.com>
 
+       PR pch/13689
+       * alias.c (struct alias_set_entry): Mark for GC.
+       (alias_sets): Make static, mark for GC.
+       (record_alias_subset): Use GC to allocate alias structures.
+       * varray.c (element): Make generic varrays GCed.
+
        PR pch/13361
        * c-typeck.c (constructor_asmspec): Delete.
        (struct initializer_stack): Delete field 'asmspec'.
index f1975cead5b423fedfddf2b5c1c8f8194f9f523d..a56feae11707c1bae9c4af2d80702c77c25b2758 100644 (file)
@@ -74,7 +74,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
    However, this is no actual entry for alias set zero.  It is an
    error to attempt to explicitly construct a subset of zero.  */
 
-typedef struct alias_set_entry
+struct alias_set_entry GTY(())
 {
   /* The alias set number, as stored in MEM_ALIAS_SET.  */
   HOST_WIDE_INT alias_set;
@@ -86,12 +86,13 @@ typedef struct alias_set_entry
 
      continuing our example above, the children here will be all of
      `int', `double', `float', and `struct S'.  */
-  splay_tree children;
+  splay_tree GTY((param1_is (int), param2_is (int))) children;
 
   /* Nonzero if would have a child of zero: this effectively makes this
      alias set the same as alias set zero.  */
   int has_zero_child;
-} *alias_set_entry;
+};
+typedef struct alias_set_entry *alias_set_entry;
 
 static int rtx_equal_for_memref_p (rtx, rtx);
 static rtx find_symbolic_term (rtx);
@@ -206,7 +207,7 @@ char *reg_known_equiv_p;
 static bool copying_arguments;
 
 /* The splay-tree used to store the various alias set entries.  */
-varray_type alias_sets;
+static GTY ((param_is (struct alias_set_entry))) varray_type alias_sets;
 \f
 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
    such an entry, or NULL otherwise.  */
@@ -640,10 +641,10 @@ record_alias_subset (HOST_WIDE_INT superset, HOST_WIDE_INT subset)
     {
       /* Create an entry for the SUPERSET, so that we have a place to
         attach the SUBSET.  */
-      superset_entry = xmalloc (sizeof (struct alias_set_entry));
+      superset_entry = ggc_alloc (sizeof (struct alias_set_entry));
       superset_entry->alias_set = superset;
       superset_entry->children
-       = splay_tree_new (splay_tree_compare_ints, 0, 0);
+       = splay_tree_new_ggc (splay_tree_compare_ints);
       superset_entry->has_zero_child = 0;
       VARRAY_GENERIC_PTR (alias_sets, superset) = superset_entry;
     }
index b748d438e9ada4ebc2114814453fa07481c2f246..dd4640d5d7798042aed34a1a5c2818dc97f3abb6 100644 (file)
@@ -30,8 +30,8 @@
 
 #define VARRAY_HDR_SIZE (sizeof (struct varray_head_tag) - sizeof (varray_data))
 
-/* Do not add any more non-GC items here.  Please either remove or GC those items that
-   are not GCed.  */
+/* Do not add any more non-GC items here.  Please either remove or GC
+   those items that are not GCed.  */
 
 static const struct {
   unsigned char size;
@@ -47,7 +47,7 @@ static const struct {
   { sizeof (unsigned long), 1 },
   { sizeof (HOST_WIDE_INT), 1 },
   { sizeof (unsigned HOST_WIDE_INT), 1 },
-  { sizeof (void *), 0 },
+  { sizeof (void *), 1 },
   { sizeof (char *), 1 },
   { sizeof (struct rtx_def *), 1 },
   { sizeof (struct rtvec_def *), 1 },