OSDN Git Service

* gcc.dg/torture/builtin-math-7.c: Add -mieee for sh*-*-* targets.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / torture / 20080716-1.c
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;
25 static __inline__ unsigned VEC_tree_base_length (const VEC_tree_base *vec_)
26 { return vec_ ? vec_->num : 0; }
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);
32 void __attribute__((noinline)) foo (size_t x)
33 {
34   if (x != 18446744073709551614UL)
35     abort ();
36 }
37 void
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
54 int main ()
55 {
56   resort_type_method_vec ((void *)0);
57   return 0;
58 }