OSDN Git Service

Backported from mainline
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / 20011008-3.c
1 extern void exit (int);
2 extern void abort (void);
3
4 typedef unsigned int u_int32_t;
5 typedef unsigned char u_int8_t;
6 typedef int int32_t;
7
8 typedef enum {
9         TXNLIST_DELETE,
10         TXNLIST_LSN,
11         TXNLIST_TXNID,
12         TXNLIST_PGNO
13 } db_txnlist_type;
14
15 struct __db_lsn; typedef struct __db_lsn DB_LSN;
16 struct __db_lsn {
17         u_int32_t file;
18         u_int32_t offset;
19 };
20 struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;
21
22 struct __db_txnlist {
23         db_txnlist_type type;
24         struct { struct __db_txnlist *le_next; struct __db_txnlist **le_prev; } links;
25         union {
26                 struct {
27                         u_int32_t txnid;
28                         int32_t generation;
29                         int32_t aborted;
30                 } t;
31                 struct {
32
33
34                         u_int32_t flags;
35                         int32_t fileid;
36                         u_int32_t count;
37                         char *fname;
38                 } d;
39                 struct {
40                         int32_t ntxns;
41                         int32_t maxn;
42                         DB_LSN *lsn_array;
43                 } l;
44                 struct {
45                         int32_t nentries;
46                         int32_t maxentry;
47                         char *fname;
48                         int32_t fileid;
49                         void *pgno_array;
50                         u_int8_t uid[20];
51                 } p;
52         } u;
53 };
54
55 int log_compare (const DB_LSN *a, const DB_LSN *b)
56 {
57   return 1;
58 }
59
60
61 int
62 __db_txnlist_lsnadd(int val, DB_TXNLIST *elp, DB_LSN *lsnp, u_int32_t flags)
63 {
64    int i;
65  
66    for (i = 0; i < (!(flags & (0x1)) ? 1 : elp->u.l.ntxns); i++)
67      {
68         int __j;
69         DB_LSN __tmp;
70         val++; 
71         for (__j = 0; __j < elp->u.l.ntxns - 1; __j++)
72           if (log_compare(&elp->u.l.lsn_array[__j], &elp->u.l.lsn_array[__j + 1]) < 0)
73           {
74              __tmp = elp->u.l.lsn_array[__j];
75              elp->u.l.lsn_array[__j] = elp->u.l.lsn_array[__j + 1];
76              elp->u.l.lsn_array[__j + 1] = __tmp;
77           }
78      }
79
80    *lsnp = elp->u.l.lsn_array[0];
81    return val;
82 }
83
84 #ifndef STACK_SIZE
85 #define VLEN    1235
86 #else
87 #define VLEN (STACK_SIZE/10)
88 #endif
89
90 int main (void)
91 {
92   DB_TXNLIST el;
93   DB_LSN lsn, lsn_a[VLEN];
94   
95   el.u.l.ntxns = VLEN-1;
96   el.u.l.lsn_array = lsn_a;
97   
98   if (__db_txnlist_lsnadd (0, &el, &lsn, 0) != 1)
99     abort ();
100   
101   if (__db_txnlist_lsnadd (0, &el, &lsn, 1) != VLEN-1)
102     abort ();
103   
104   exit (0);
105 }