bitmap.c (bitmap_union_of_diff): Don't use BITMAP_ALLOCA.
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Wed, 4 Jul 2001 17:25:58 +0000 (17:25 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Wed, 4 Jul 2001 17:25:58 +0000 (17:25 +0000)
* bitmap.c (bitmap_union_of_diff): Don't use BITMAP_ALLOCA.

* bitmap.h (BITMAP_ALLOCA): Don't pass alloca as an argument to a
function.

From-SVN: r43760

gcc/ChangeLog
gcc/bitmap.c
gcc/bitmap.h

index 8152ba6e255e45ca15339255833793e3341c9e12..2b66dcb05d317ae18f1c1087c5fdfcdc82f7d89c 100644 (file)
@@ -1,3 +1,10 @@
+2001-07-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * bitmap.c (bitmap_union_of_diff): Don't use BITMAP_ALLOCA.
+
+       * bitmap.h (BITMAP_ALLOCA): Don't pass alloca as an argument to a
+       function.
+
 2001-07-04  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * doc/include: New directory.
index 3fa0fb6286adbd89784b2b8f94bde9834d192e81..5f343a0aa0efed2e153f670b422791ca79d84fc9 100644 (file)
@@ -687,9 +687,11 @@ bitmap_union_of_diff (dst, a, b, c)
      bitmap c;
 {
   int changed = 0;
-  bitmap temp = BITMAP_ALLOCA ();
+  bitmap temp = BITMAP_XMALLOC ();
+  
   bitmap_operation (temp, b, c, BITMAP_AND_COMPL);
   changed = bitmap_operation (dst, temp, a, BITMAP_IOR);
+  BITMAP_XFREE (temp);
   return changed;
 }
 
index 95c2a5e8f0d528c26d48ac9789891d4da242c9b6..58e14ee08c5d600a2f21ad6e83414e1976490af8 100644 (file)
@@ -119,10 +119,17 @@ extern int bitmap_last_set_bit PARAMS((bitmap));
 #define BITMAP_OBSTACK_ALLOC(OBSTACK)                          \
   bitmap_initialize ((bitmap) obstack_alloc (OBSTACK, sizeof (bitmap_head)))
 
-/* Allocate a bitmap with alloca.  */
-#define BITMAP_ALLOCA()                                                \
-  bitmap_initialize ((bitmap) alloca (sizeof (bitmap_head)))
-
+/* Allocate a bitmap with alloca.  Note alloca cannot be passed as an
+   argument to a function, so we set a temporary variable to the value
+   returned by alloca and pass that variable to bitmap_initialize().
+   PTR is then set to the value returned from bitmap_initialize() to
+   avoid having it appear more than once in case it has side effects.  */
+#define BITMAP_ALLOCA(PTR) \
+do { \
+  bitmap temp_bitmap_ = (bitmap) alloca (sizeof (bitmap_head)); \
+  (PTR) = bitmap_initialize (temp_bitmap_); \
+} while (0)
+  
 /* Allocate a bitmap with xmalloc.  */
 #define BITMAP_XMALLOC()                                        \
   bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head)))