aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C
blob: 95288836c36011e2f31022f3296068d16c034da1 (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
/* { dg-do compile } */
/* { dg-options "-O2" } */

typedef int PROV_ENUMALGS_EX, PCCRYPT_OID_INFO;
class A {
  int m_fn2();
  virtual bool m_fn1(PCCRYPT_OID_INFO);
};
int fn1();
void fn2();
int A::m_fn2() { m_fn1(0); }

bool fn3() {
  for (;;) {
    if (fn1()) {
      if (fn1() != 259)
        fn2();
      break;
    }
    return 1;
  }
  return 0;
}

class B {
public:
  B() { fn3(); }
};
class C : A {
  bool m_fn1(PCCRYPT_OID_INFO) { m_fn3(); }
  int isSupportedByProvider_algId;
  PROV_ENUMALGS_EX isSupportedByProvider_outEnumAlgs;
  PROV_ENUMALGS_EX isSupportedByProvider_enumAlgs;
  bool m_fn3() {
    while (1) {
      if (fn1()) {
        if (fn1() != 259)
          fn2();
        break;
      }
      if (isSupportedByProvider_algId)
        isSupportedByProvider_outEnumAlgs = isSupportedByProvider_enumAlgs;
      return 1;
    }
    return 0;
  }
};

void fn4() { B(); }