1 /* { dg-do run } */
2 /* { dg-require-effective-target lp64 } */
3 
4 typedef unsigned long size_t;
5 struct tree_base
6 {
7   int code;
8 };
9 struct tree_decl_minimal
10 {
11   struct tree_base base;
12   const char *name;
13 };
14 typedef union tree_node {
15   struct tree_base base;
16   struct tree_decl_minimal decl_minimal;
17 } *tree;
18 struct tree_overload
19 {
20   struct tree_base common;
21   tree function;
22 };
23 typedef struct VEC_tree_base { unsigned num; unsigned alloc; tree vec[1]; } VEC_tree_base;
24 typedef struct VEC_tree_gc { VEC_tree_base base; } VEC_tree_gc;
VEC_tree_base_length(const VEC_tree_base * vec_)25 static __inline__ unsigned VEC_tree_base_length (const VEC_tree_base *vec_)
26 { return vec_ ? vec_->num : 0; }
VEC_tree_base_iterate(const VEC_tree_base * vec_,unsigned ix_,tree * ptr)27 static __inline__ int VEC_tree_base_iterate (const VEC_tree_base *vec_, unsigned ix_, tree *ptr)
28 {
29   if (vec_ && ix_ < vec_->num) { *ptr = vec_->vec[ix_]; return 1; } else { *ptr = 0; return 0; }
30 }
31 extern void abort (void);
foo(size_t x)32 void __attribute__((noinline)) foo (size_t x)
33 {
34   if (x != 18446744073709551614UL)
35     abort ();
36 }
37 void
resort_type_method_vec(VEC_tree_gc * method_vec)38 resort_type_method_vec (VEC_tree_gc *method_vec)
39 {
40   int len = (VEC_tree_base_length(((method_vec) ? &(method_vec)->base : 0)));
41   size_t slot;
42   tree fn;
43 
44   for (slot = 2;
45        (VEC_tree_base_iterate(((method_vec) ? &(method_vec)->base : 0),slot,&(fn)));
46        ++slot)
47     if (!(((((((fn)->base.code) == 225) ? (((struct tree_overload*)(fn))->function) : (fn)))->decl_minimal.name)))
48       break;
49 
50   if (len - slot > 1)
51     foo (len - slot);
52 }
53 
main()54 int main ()
55 {
56   resort_type_method_vec ((void *)0);
57   return 0;
58 }
59