1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details -w" } */
3 
4 typedef struct bitmap_head_def *bitmap;
5 extern void vec_assert_fail (const char *, const char *, const char *file_,
6 			     unsigned line_, const char *function_)
7   __attribute__ ((__noreturn__));
8 typedef struct VEC_int_base
9 {
10   unsigned num;
11   unsigned alloc;
12   int vec[1];
13 }
14 VEC_int_base;
15 static __inline__ int
VEC_int_base_space(VEC_int_base * vec_,int alloc_,const char * file_,unsigned line_,const char * function_)16 VEC_int_base_space (VEC_int_base * vec_, int alloc_, const char *file_,
17 		    unsigned line_, const char *function_)
18 {
19   return vec_ ? vec_->alloc - vec_->num >= (unsigned) alloc_ : !alloc_;
20 }
21 
22 static __inline__ int *
VEC_int_base_quick_push(VEC_int_base * vec_,int obj_,const char * file_,unsigned line_,const char * function_)23 VEC_int_base_quick_push (VEC_int_base * vec_, int obj_, const char *file_,
24 			 unsigned line_, const char *function_)
25 {
26   (void) ((vec_->num <
27 	   vec_->alloc) ? 0 : (vec_assert_fail ("push", "VEC(int,base)",
28 						file_, line_, function_), 0));
29 }
30 
31 typedef struct VEC_int_heap
32 {
33   VEC_int_base base;
34 }
35 VEC_int_heap;
36 static __inline__ int
VEC_int_heap_reserve(VEC_int_heap ** vec_,int alloc_,const char * file_,unsigned line_,const char * function_)37 VEC_int_heap_reserve (VEC_int_heap ** vec_, int alloc_, const char *file_,
38 		      unsigned line_, const char *function_)
39 {
40   int extend =
41     !VEC_int_base_space (((*vec_) ? &(*vec_)->base : 0), alloc_, file_, line_,
42 			 function_);
43   if (extend)
44     *vec_ =
45       (VEC_int_heap *) vec_heap_o_reserve (*vec_, alloc_,
46 					   __builtin_offsetof (VEC_int_heap,
47 							       base.vec),
48 					   sizeof (int));
49 }
50 
51 static __inline__ int *
VEC_int_heap_safe_push(VEC_int_heap ** vec_,const int obj_,const char * file_,unsigned line_,const char * function_)52 VEC_int_heap_safe_push (VEC_int_heap ** vec_, const int obj_,
53 			const char *file_, unsigned line_,
54 			const char *function_)
55 {
56   VEC_int_heap_reserve (vec_, 1, file_, line_, function_);
57   return VEC_int_base_quick_push (((*vec_) ? &(*vec_)->base : 0), obj_, file_,
58 				  line_, function_);
59 };
60 
61 typedef struct bitmap_head_def
62 {
63 }
64 bitmap_head;
65 typedef struct
66 {
67 }
68 bitmap_iterator;
69 bitmap
compute_idf(bitmap_head * dfs)70 compute_idf (bitmap_head * dfs)
71 {
72   bitmap_iterator bi;
73   unsigned bb_index, i;
74   VEC_int_heap *work_stack;
75   bitmap phi_insertion_points;
76   while ((VEC_int_base_length (((work_stack) ? &(work_stack)->base : 0))) > 0)
77     {
78       for (bmp_iter_and_compl_init
79 	   (&(bi), (&dfs[bb_index]), (phi_insertion_points), (0), &(i));
80 	   bmp_iter_and_compl (&(bi), &(i)); bmp_iter_next (&(bi), &(i)))
81 	{
82 	  (VEC_int_heap_safe_push
83 	   (&(work_stack), i, "/home/gcc/virgin-gcc/gcc/cfganal.c", 1349,
84 	    __FUNCTION__));
85 	}
86     }
87   (VEC_int_heap_free (&work_stack));
88 }
89 
90 /* { dg-final { scan-tree-dump-not "Duplicating join block" "split-paths" } } */
91