aboutsummaryrefslogtreecommitdiff
path: root/test/cfi/utils.h
blob: 5c290d15106966a8dcc5b5a9c625f36755242da9 (plain) (blame)
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
#ifndef UTILS_H
#define UTILS_H

inline void break_optimization(void *arg) {
  __asm__ __volatile__("" : : "r" (arg) : "memory");
}

// Tests will instantiate this class to pad out bit sets to test out the various
// ways we can represent the bit set (32-bit inline, 64-bit inline, memory).
// This class has 37 virtual member functions, which forces us to use a
// pointer-aligned bitset.
template <typename T, unsigned I>
class Deriver : T {
  virtual void f() {}
  virtual void g() {}
  virtual void f1() {}
  virtual void f2() {}
  virtual void f3() {}
  virtual void f4() {}
  virtual void f5() {}
  virtual void f6() {}
  virtual void f7() {}
  virtual void f8() {}
  virtual void f9() {}
  virtual void f10() {}
  virtual void f11() {}
  virtual void f12() {}
  virtual void f13() {}
  virtual void f14() {}
  virtual void f15() {}
  virtual void f16() {}
  virtual void f17() {}
  virtual void f18() {}
  virtual void f19() {}
  virtual void f20() {}
  virtual void f21() {}
  virtual void f22() {}
  virtual void f23() {}
  virtual void f24() {}
  virtual void f25() {}
  virtual void f26() {}
  virtual void f27() {}
  virtual void f28() {}
  virtual void f29() {}
  virtual void f30() {}
  virtual void f31() {}
  virtual void f32() {}
  virtual void f33() {}
  virtual void f34() {}
  virtual void f35() {}
};

#endif