1 // RUN: %clang_cc1 -templight-dump %s 2>&1 | FileCheck %s
2 
3 template <int N>
4 struct fib
5 {
6   static const int value = fib<N-1>::value + fib<N-2>::value;
7 };
8 
9 template <>
10 struct fib<0>
11 {
12   static const int value = 1;
13 };
14 
15 template <>
16 struct fib<1>
17 {
18   static const int value = 1;
19 };
20 
21 // CHECK-LABEL: {{^---$}}
22 // CHECK: {{^name:[ ]+'fib<4>'$}}
23 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
24 // CHECK: {{^event:[ ]+Begin$}}
25 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
26 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
27 // CHECK-LABEL: {{^---$}}
28 // CHECK: {{^name:[ ]+'fib<4>'$}}
29 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
30 // CHECK: {{^event:[ ]+End$}}
31 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
32 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
33 // CHECK-LABEL: {{^---$}}
34 // CHECK: {{^name:[ ]+'fib<4>'$}}
35 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
36 // CHECK: {{^event:[ ]+Begin$}}
37 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
38 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
39 //
40 // CHECK-LABEL: {{^---$}}
41 // CHECK: {{^name:[ ]+'fib<3>'$}}
42 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
43 // CHECK: {{^event:[ ]+Begin$}}
44 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
45 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
46 // CHECK-LABEL: {{^---$}}
47 // CHECK: {{^name:[ ]+'fib<3>'$}}
48 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
49 // CHECK: {{^event:[ ]+End$}}
50 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
51 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
52 // CHECK-LABEL: {{^---$}}
53 // CHECK: {{^name:[ ]+'fib<3>'$}}
54 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
55 // CHECK: {{^event:[ ]+Begin$}}
56 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
57 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
58 //
59 // CHECK-LABEL: {{^---$}}
60 // CHECK: {{^name:[ ]+'fib<2>'$}}
61 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
62 // CHECK: {{^event:[ ]+Begin$}}
63 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
64 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
65 // CHECK-LABEL: {{^---$}}
66 // CHECK: {{^name:[ ]+'fib<2>'$}}
67 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
68 // CHECK: {{^event:[ ]+End$}}
69 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
70 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
71 // CHECK-LABEL: {{^---$}}
72 // CHECK: {{^name:[ ]+'fib<2>'$}}
73 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
74 // CHECK: {{^event:[ ]+Begin$}}
75 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
76 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
77 
78 // CHECK-LABEL: {{^---$}}
79 // CHECK: {{^name:[ ]+'fib<1>'$}}
80 // CHECK: {{^kind:[ ]+Memoization$}}
81 // CHECK: {{^event:[ ]+Begin$}}
82 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
83 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
84 // CHECK-LABEL: {{^---$}}
85 // CHECK: {{^name:[ ]+'fib<1>'$}}
86 // CHECK: {{^kind:[ ]+Memoization$}}
87 // CHECK: {{^event:[ ]+End$}}
88 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
89 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
90 // CHECK-LABEL: {{^---$}}
91 // CHECK: {{^name:[ ]+'fib<0>'$}}
92 // CHECK: {{^kind:[ ]+Memoization$}}
93 // CHECK: {{^event:[ ]+Begin$}}
94 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:10:8'}}
95 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
96 // CHECK-LABEL: {{^---$}}
97 // CHECK: {{^name:[ ]+'fib<0>'$}}
98 // CHECK: {{^kind:[ ]+Memoization$}}
99 // CHECK: {{^event:[ ]+End$}}
100 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:10:8'}}
101 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
102 //
103 // CHECK-LABEL: {{^---$}}
104 // CHECK: {{^name:[ ]+'fib<2>'$}}
105 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
106 // CHECK: {{^event:[ ]+End$}}
107 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
108 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
109 // CHECK-LABEL: {{^---$}}
110 // CHECK: {{^name:[ ]+'fib<2>'$}}
111 // CHECK: {{^kind:[ ]+Memoization$}}
112 // CHECK: {{^event:[ ]+Begin$}}
113 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
114 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
115 // CHECK-LABEL: {{^---$}}
116 // CHECK: {{^name:[ ]+'fib<2>'$}}
117 // CHECK: {{^kind:[ ]+Memoization$}}
118 // CHECK: {{^event:[ ]+End$}}
119 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
120 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
121 //
122 // CHECK-LABEL: {{^---$}}
123 // CHECK: {{^name:[ ]+'fib<1>'$}}
124 // CHECK: {{^kind:[ ]+Memoization$}}
125 // CHECK: {{^event:[ ]+Begin$}}
126 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
127 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
128 // CHECK-LABEL: {{^---$}}
129 // CHECK: {{^name:[ ]+'fib<1>'$}}
130 // CHECK: {{^kind:[ ]+Memoization$}}
131 // CHECK: {{^event:[ ]+End$}}
132 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
133 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
134 //
135 // CHECK-LABEL: {{^---$}}
136 // CHECK: {{^name:[ ]+'fib<3>'$}}
137 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
138 // CHECK: {{^event:[ ]+End$}}
139 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
140 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
141 // CHECK-LABEL: {{^---$}}
142 // CHECK: {{^name:[ ]+'fib<3>'$}}
143 // CHECK: {{^kind:[ ]+Memoization$}}
144 // CHECK: {{^event:[ ]+Begin$}}
145 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
146 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
147 // CHECK-LABEL: {{^---$}}
148 // CHECK: {{^name:[ ]+'fib<3>'$}}
149 // CHECK: {{^kind:[ ]+Memoization$}}
150 // CHECK: {{^event:[ ]+End$}}
151 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
152 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
153 //
154 // CHECK-LABEL: {{^---$}}
155 // CHECK: {{^name:[ ]+'fib<2>'$}}
156 // CHECK: {{^kind:[ ]+Memoization$}}
157 // CHECK: {{^event:[ ]+Begin$}}
158 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
159 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
160 // CHECK-LABEL: {{^---$}}
161 // CHECK: {{^name:[ ]+'fib<2>'$}}
162 // CHECK: {{^kind:[ ]+Memoization$}}
163 // CHECK: {{^event:[ ]+End$}}
164 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
165 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
166 // CHECK-LABEL: {{^---$}}
167 //
168 // CHECK: {{^name:[ ]+'fib<4>'$}}
169 // CHECK: {{^kind:[ ]+TemplateInstantiation$}}
170 // CHECK: {{^event:[ ]+End$}}
171 // CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
172 // CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
173 fib<4> x;
174 
175