summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/20040121-1.c
blob: 2039472fd4ebdd65420a767773eef3bb60786488 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* PR target/12898
   0x8000 needs multiple instructions to be emitted on Alpha; the
   fluff around it causes it to be emitted in a no_new_pseudos
   context, which triggered a problem in alpha.c.  */

void f (const char *, ...);
int g (void);
void *p (void);

int isymBase, ilineBase, sym_hdr, want_line, proc_desc;
char *lines;

void print_file_desc (int *fdp)
{
  char *str_base = p ();
  int symi, pdi = g ();

  for (symi = 0; isymBase;)
    {
      int proc_ptr = proc_desc + pdi;
      f("1", isymBase, proc_ptr + *fdp, str_base);
      if (want_line && *fdp)
	{
	  int delta;
	  long cur_line = proc_ptr;
	  char *line_ptr = lines + proc_ptr;
	  char *line_end = p ();

	  f("2", sym_hdr);
	  while (line_ptr < line_end)
	    {
	      delta = *line_ptr;
	      if (delta)
		line_ptr++;
	      else
		delta = line_ptr[1] ^ 0x8000;
	      f("3", cur_line, delta);
	    }
	}
    }
}