summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/20050721-1.c
blob: 25a781ddd5ade331660586d4b59bc65e39b7ee23 (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* Test for PR target/20191.  */

struct S1;

struct S1 {
  struct S1 *next;
  float x;
};

struct S2 {
  float y;
};

extern int func_ex1 (float);

extern int f;
extern float n;
extern struct S1 *bp1;
extern struct S2 *bp2;

inline float
func1 (int f, struct S2 *p2)
{
  float a;

  if (f)
    a = n >= p2->y ? n : p2->y;
  else
    a = n;
  return a;
}

inline float
func2 (struct S1 *p1, struct S2 *p2)
{
  float a, b;

  if(n <= 1.0)
    b = func1 (f, p2);
  else
    {
       a = n <= p1->x ? 0.0 : p1->x;
       b = a >= p2->y ? a : p2->y;
    }
  return(b);
}

void
func3 (struct S1 *p)
{
  float a = 0.0;

  if (f)
    a = func2 (bp1, bp2);
  if (func_ex1 (a))
    bp1 = p;
}