OSDN Git Service

* gcc.c-torture/execute/960321-1.x: Remove.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / 20020402-3.c
1 /* extracted from gdb sources */
2
3 typedef unsigned long long CORE_ADDR;
4
5 struct blockvector;
6
7 struct symtab {
8   struct blockvector *blockvector;
9 };
10
11 struct sec {
12   void *unused;
13 };
14
15 struct symbol {
16   int len;
17   char *name;
18 };
19
20 struct block {
21         CORE_ADDR startaddr, endaddr;
22         struct symbol *function;
23         struct block *superblock;
24         unsigned char gcc_compile_flag;
25         int nsyms;
26         struct symbol syms[1];
27 };
28
29 struct blockvector {
30         int nblocks;
31         struct block *block[2];
32 };
33
34 struct blockvector *blockvector_for_pc_sect(register CORE_ADDR pc,
35                                             struct symtab *symtab)
36 {
37   register struct block *b;
38   register int bot, top, half;
39   struct blockvector *bl;
40
41   bl = symtab->blockvector;
42   b = bl->block[0];
43
44   bot = 0;
45   top = bl->nblocks;
46
47   while (top - bot > 1)
48     {
49       half = (top - bot + 1) >> 1;
50       b = bl->block[bot + half];
51       if (b->startaddr <= pc)
52         bot += half;
53       else
54         top = bot + half;
55     }
56
57   while (bot >= 0)
58     {
59       b = bl->block[bot];
60       if (b->endaddr > pc)
61         {
62           return bl;
63         }
64       bot--;
65     }
66   return 0;
67 }
68
69 int main(void)
70 {
71   struct block a = { 0, 0x10000, 0, 0, 1, 20 };
72   struct block b = { 0x10000, 0x20000, 0, 0, 1, 20 };
73   struct blockvector bv = { 2, { &a, &b } };
74   struct symtab s = { &bv };
75
76   struct blockvector *ret;
77
78   ret = blockvector_for_pc_sect(0x500, &s);
79
80   return 0;
81 }