1// RUN: %clang_cc1 -x c++ -include %s -emit-llvm-only %s
2// RUN: %clang_cc1 -x c++ -emit-pch %s -o %t
3// RUN: %clang_cc1 -include-pch %t -emit-llvm-only %s
4
5#ifndef HEADER
6#define HEADER
7
8struct S00 { virtual void f(); };
9struct S01 { virtual void f(); };
10struct S02 { virtual void f(); };
11struct S03 { virtual void f(); };
12struct S04 { virtual void f(); };
13struct S05 { virtual void f(); };
14struct S06 { virtual void f(); };
15struct S07 { virtual void f(); };
16struct S08 { virtual void f(); };
17struct S09 { virtual void f(); };
18struct S10 { virtual void f(); };
19struct S11 { virtual void f(); };
20struct S12 { virtual void f(); };
21struct S13 { virtual void f(); };
22struct S14 { virtual void f(); };
23struct S15 { virtual void f(); };
24struct S16 { virtual void f(); };
25struct S17 { virtual void f(); };
26struct S18 { virtual void f(); };
27struct S19 { virtual void f(); };
28struct S20 { virtual void f(); };
29struct S21 { virtual void f(); };
30struct S22 { virtual void f(); };
31struct S23 { virtual void f(); };
32struct S24 { virtual void f(); };
33struct S25 { virtual void f(); };
34struct S26 { virtual void f(); };
35struct S27 { virtual void f(); };
36struct S28 { virtual void f(); };
37struct S29 { virtual void f(); };
38struct S30 { virtual void f(); };
39struct S31 { virtual void f(); };
40struct S32 { virtual void f(); };
41struct S33 { virtual void f(); };
42struct S34 { virtual void f(); };
43struct S35 { virtual void f(); };
44struct S36 { virtual void f(); };
45struct S37 { virtual void f(); };
46struct S38 { virtual void f(); };
47struct S39 { virtual void f(); };
48struct S40 { virtual void f(); };
49struct S41 { virtual void f(); };
50struct S42 { virtual void f(); };
51struct S43 { virtual void f(); };
52struct S44 { virtual void f(); };
53struct S45 { virtual void f(); };
54struct S46 { virtual void f(); };
55struct S47 { virtual void f(); };
56struct S48 { virtual void f(); };
57struct S49 { virtual void f(); };
58struct S50 { virtual void f(); };
59struct S51 { virtual void f(); };
60struct S52 { virtual void f(); };
61struct S53 { virtual void f(); };
62struct S54 { virtual void f(); };
63struct S55 { virtual void f(); };
64struct S56 { virtual void f(); };
65struct S57 { virtual void f(); };
66struct S58 { virtual void f(); };
67struct S59 { virtual void f(); };
68struct S60 { virtual void f(); };
69struct S61 { virtual void f(); };
70struct S62 { virtual void f(); };
71struct S63 { virtual void f(); };
72struct S64 { virtual void f(); };
73struct S65 { virtual void f(); };
74struct S66 { virtual void f(); };
75struct S67 { virtual void f(); };
76struct S68 { virtual void f(); };
77struct S69 { virtual void f(); };
78
79struct Test {
80  // Deserializing this key function should cause the key functions
81  // table to get resized.
82  virtual void f(S00, S01, S02, S03, S04, S05, S06, S07, S08, S09,
83                 S10, S11, S12, S13, S14, S15, S16, S17, S18, S19,
84                 S20, S21, S22, S23, S24, S25, S26, S27, S28, S29,
85                 S30, S31, S32, S33, S34, S35, S36, S37, S38, S39,
86                 S40, S41, S42, S43, S44, S45, S46, S47, S48, S49,
87                 S50, S51, S52, S53, S54, S55, S56, S57, S58, S59,
88                 S60, S61, S62, S63, S64, S65, S66, S67, S68, S69);
89  virtual void g();
90};
91
92#else
93
94void Test::g() {}
95void h(Test &t) { t.g(); }
96
97#endif
98