]> git.lizzy.rs Git - rust.git/blob - tests/codegen/sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs
Auto merge of #107843 - bjorn3:sync_cg_clif-2023-02-09, r=bjorn3
[rust.git] / tests / codegen / sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs
1 // Verifies that type metadata identifiers for functions are emitted correctly.
2 //
3 // needs-sanitizer-cfi
4 // compile-flags: -Clto -Cno-prepopulate-passes -Ctarget-feature=-crt-static -Zsanitizer=cfi
5
6 #![crate_type="lib"]
7 #![allow(dead_code)]
8 #![allow(incomplete_features)]
9 #![allow(unused_must_use)]
10 #![feature(adt_const_params, extern_types, inline_const, type_alias_impl_trait)]
11
12 extern crate core;
13 use core::ffi::c_void;
14 use std::marker::PhantomData;
15
16 // User-defined type (structure)
17 pub struct Struct1<T> {
18     member1: T,
19 }
20
21 // User-defined type (enum)
22 pub enum Enum1<T> {
23     Variant1(T),
24 }
25
26 // User-defined type (union)
27 pub union Union1<T> {
28     member1: std::mem::ManuallyDrop<T>,
29 }
30
31 // Extern type
32 extern {
33     pub type type1;
34 }
35
36 // Trait
37 pub trait Trait1<T> {
38     fn foo(&self) { }
39 }
40
41 // Trait implementation
42 impl<T> Trait1<T> for i32 {
43     fn foo(&self) { }
44 }
45
46 // Trait implementation
47 impl<T> Trait1<T> for Struct1<T> {
48     fn foo(&self) { }
49 }
50
51 // impl Trait type aliases for helping with defining other types (see below)
52 pub type Type1 = impl Send;
53 pub type Type2 = impl Send;
54 pub type Type3 = impl Send;
55 pub type Type4 = impl Send;
56 pub type Type5 = impl Send;
57 pub type Type6 = impl Send;
58 pub type Type7 = impl Send;
59 pub type Type8 = impl Send;
60 pub type Type9 = impl Send;
61 pub type Type10 = impl Send;
62 pub type Type11 = impl Send;
63
64 pub fn fn1<'a>() {
65     // Closure
66     let closure1 = || { };
67     let _: Type1 = closure1;
68
69     // Constructor
70     pub struct Foo(i32);
71     let _: Type2 = Foo;
72
73     // Type in extern path
74     extern {
75         fn foo();
76     }
77     let _: Type3 = foo;
78
79     // Type in closure path
80     || {
81         pub struct Foo;
82         let _: Type4 = Foo;
83     };
84
85     // Type in const path
86     const {
87         pub struct Foo;
88         fn foo() -> Type5 { Foo }
89     };
90
91     // Type in impl path
92     impl<T> Struct1<T> {
93         fn foo(&self) { }
94     }
95     let _: Type6 = <Struct1<i32>>::foo;
96
97     // Trait method
98     let _: Type7 = <dyn Trait1<i32>>::foo;
99
100     // Trait method
101     let _: Type8 = <i32 as Trait1<i32>>::foo;
102
103     // Trait method
104     let _: Type9 = <Struct1<i32> as Trait1<i32>>::foo;
105
106     // Const generics
107     pub struct Qux<T, const N: usize>([T; N]);
108     let _: Type10 = Qux([0; 32]);
109
110     // Lifetimes/regions
111     pub struct Quux<'a>(&'a i32);
112     pub struct Quuux<'a, 'b>(&'a i32, &'b Quux<'b>);
113     let _: Type11 = Quuux;
114 }
115
116 // repr(transparent) user-defined type
117 struct Foo(i32);
118
119 #[repr(transparent)]
120 pub struct Type12 {
121     member1: (),
122     member2: PhantomData<i32>,
123     member3: Foo,
124 }
125
126 // Self-referencing repr(transparent) user-defined type
127 #[repr(transparent)]
128 pub struct Type13<'a> {
129     member1: (),
130     member2: PhantomData<i32>,
131     member3: &'a Type13<'a>,
132 }
133
134 // Helper type to allow `Type14<Bar>` to be a unique ID
135 pub struct Bar;
136
137 // repr(transparent) parameterized type
138 #[repr(transparent)]
139 pub struct Type14<T>(T);
140
141 pub fn foo0(_: ()) { }
142 // CHECK: define{{.*}}foo0{{.*}}!type ![[TYPE0:[0-9]+]]
143 pub fn foo1(_: c_void, _: ()) { }
144 // CHECK: define{{.*}}foo1{{.*}}!type ![[TYPE1:[0-9]+]]
145 pub fn foo2(_: (), _: c_void, _: c_void) { }
146 // CHECK: define{{.*}}foo2{{.*}}!type ![[TYPE2:[0-9]+]]
147 pub fn foo3(_: *mut c_void) { }
148 // CHECK: define{{.*}}foo3{{.*}}!type ![[TYPE3:[0-9]+]]
149 pub fn foo4(_: *mut c_void, _: *mut ()) { }
150 // CHECK: define{{.*}}foo4{{.*}}!type ![[TYPE4:[0-9]+]]
151 pub fn foo5(_: *mut (), _: *mut c_void, _: *mut c_void) { }
152 // CHECK: define{{.*}}foo5{{.*}}!type ![[TYPE5:[0-9]+]]
153 pub fn foo6(_: *const c_void) { }
154 // CHECK: define{{.*}}foo6{{.*}}!type ![[TYPE6:[0-9]+]]
155 pub fn foo7(_: *const c_void, _: *const ()) { }
156 // CHECK: define{{.*}}foo7{{.*}}!type ![[TYPE7:[0-9]+]]
157 pub fn foo8(_: *const (), _: *const c_void, _: *const c_void) { }
158 // CHECK: define{{.*}}foo8{{.*}}!type ![[TYPE8:[0-9]+]]
159 pub fn foo9(_: bool) { }
160 // CHECK: define{{.*}}foo9{{.*}}!type ![[TYPE9:[0-9]+]]
161 pub fn foo10(_: bool, _: bool) { }
162 // CHECK: define{{.*}}foo10{{.*}}!type ![[TYPE10:[0-9]+]]
163 pub fn foo11(_: bool, _: bool, _: bool) { }
164 // CHECK: define{{.*}}foo11{{.*}}!type ![[TYPE11:[0-9]+]]
165 pub fn foo12(_: i8) { }
166 // CHECK: define{{.*}}foo12{{.*}}!type ![[TYPE12:[0-9]+]]
167 pub fn foo13(_: i8, _: i8) { }
168 // CHECK: define{{.*}}foo13{{.*}}!type ![[TYPE13:[0-9]+]]
169 pub fn foo14(_: i8, _: i8, _: i8) { }
170 // CHECK: define{{.*}}foo14{{.*}}!type ![[TYPE14:[0-9]+]]
171 pub fn foo15(_: i16) { }
172 // CHECK: define{{.*}}foo15{{.*}}!type ![[TYPE15:[0-9]+]]
173 pub fn foo16(_: i16, _: i16) { }
174 // CHECK: define{{.*}}foo16{{.*}}!type ![[TYPE16:[0-9]+]]
175 pub fn foo17(_: i16, _: i16, _: i16) { }
176 // CHECK: define{{.*}}foo17{{.*}}!type ![[TYPE17:[0-9]+]]
177 pub fn foo18(_: i32) { }
178 // CHECK: define{{.*}}foo18{{.*}}!type ![[TYPE18:[0-9]+]]
179 pub fn foo19(_: i32, _: i32) { }
180 // CHECK: define{{.*}}foo19{{.*}}!type ![[TYPE19:[0-9]+]]
181 pub fn foo20(_: i32, _: i32, _: i32) { }
182 // CHECK: define{{.*}}foo20{{.*}}!type ![[TYPE20:[0-9]+]]
183 pub fn foo21(_: i64) { }
184 // CHECK: define{{.*}}foo21{{.*}}!type ![[TYPE21:[0-9]+]]
185 pub fn foo22(_: i64, _: i64) { }
186 // CHECK: define{{.*}}foo22{{.*}}!type ![[TYPE22:[0-9]+]]
187 pub fn foo23(_: i64, _: i64, _: i64) { }
188 // CHECK: define{{.*}}foo23{{.*}}!type ![[TYPE23:[0-9]+]]
189 pub fn foo24(_: i128) { }
190 // CHECK: define{{.*}}foo24{{.*}}!type ![[TYPE24:[0-9]+]]
191 pub fn foo25(_: i128, _: i128) { }
192 // CHECK: define{{.*}}foo25{{.*}}!type ![[TYPE25:[0-9]+]]
193 pub fn foo26(_: i128, _: i128, _: i128) { }
194 // CHECK: define{{.*}}foo26{{.*}}!type ![[TYPE26:[0-9]+]]
195 pub fn foo27(_: isize) { }
196 // CHECK: define{{.*}}foo27{{.*}}!type ![[TYPE27:[0-9]+]]
197 pub fn foo28(_: isize, _: isize) { }
198 // CHECK: define{{.*}}foo28{{.*}}!type ![[TYPE28:[0-9]+]]
199 pub fn foo29(_: isize, _: isize, _: isize) { }
200 // CHECK: define{{.*}}foo29{{.*}}!type ![[TYPE29:[0-9]+]]
201 pub fn foo30(_: u8) { }
202 // CHECK: define{{.*}}foo30{{.*}}!type ![[TYPE30:[0-9]+]]
203 pub fn foo31(_: u8, _: u8) { }
204 // CHECK: define{{.*}}foo31{{.*}}!type ![[TYPE31:[0-9]+]]
205 pub fn foo32(_: u8, _: u8, _: u8) { }
206 // CHECK: define{{.*}}foo32{{.*}}!type ![[TYPE32:[0-9]+]]
207 pub fn foo33(_: u16) { }
208 // CHECK: define{{.*}}foo33{{.*}}!type ![[TYPE33:[0-9]+]]
209 pub fn foo34(_: u16, _: u16) { }
210 // CHECK: define{{.*}}foo34{{.*}}!type ![[TYPE34:[0-9]+]]
211 pub fn foo35(_: u16, _: u16, _: u16) { }
212 // CHECK: define{{.*}}foo35{{.*}}!type ![[TYPE35:[0-9]+]]
213 pub fn foo36(_: u32) { }
214 // CHECK: define{{.*}}foo36{{.*}}!type ![[TYPE36:[0-9]+]]
215 pub fn foo37(_: u32, _: u32) { }
216 // CHECK: define{{.*}}foo37{{.*}}!type ![[TYPE37:[0-9]+]]
217 pub fn foo38(_: u32, _: u32, _: u32) { }
218 // CHECK: define{{.*}}foo38{{.*}}!type ![[TYPE38:[0-9]+]]
219 pub fn foo39(_: u64) { }
220 // CHECK: define{{.*}}foo39{{.*}}!type ![[TYPE39:[0-9]+]]
221 pub fn foo40(_: u64, _: u64) { }
222 // CHECK: define{{.*}}foo40{{.*}}!type ![[TYPE40:[0-9]+]]
223 pub fn foo41(_: u64, _: u64, _: u64) { }
224 // CHECK: define{{.*}}foo41{{.*}}!type ![[TYPE41:[0-9]+]]
225 pub fn foo42(_: u128) { }
226 // CHECK: define{{.*}}foo42{{.*}}!type ![[TYPE42:[0-9]+]]
227 pub fn foo43(_: u128, _: u128) { }
228 // CHECK: define{{.*}}foo43{{.*}}!type ![[TYPE43:[0-9]+]]
229 pub fn foo44(_: u128, _: u128, _: u128) { }
230 // CHECK: define{{.*}}foo44{{.*}}!type ![[TYPE44:[0-9]+]]
231 pub fn foo45(_: usize) { }
232 // CHECK: define{{.*}}foo45{{.*}}!type ![[TYPE45:[0-9]+]]
233 pub fn foo46(_: usize, _: usize) { }
234 // CHECK: define{{.*}}foo46{{.*}}!type ![[TYPE46:[0-9]+]]
235 pub fn foo47(_: usize, _: usize, _: usize) { }
236 // CHECK: define{{.*}}foo47{{.*}}!type ![[TYPE47:[0-9]+]]
237 pub fn foo48(_: f32) { }
238 // CHECK: define{{.*}}foo48{{.*}}!type ![[TYPE48:[0-9]+]]
239 pub fn foo49(_: f32, _: f32) { }
240 // CHECK: define{{.*}}foo49{{.*}}!type ![[TYPE49:[0-9]+]]
241 pub fn foo50(_: f32, _: f32, _: f32) { }
242 // CHECK: define{{.*}}foo50{{.*}}!type ![[TYPE50:[0-9]+]]
243 pub fn foo51(_: f64) { }
244 // CHECK: define{{.*}}foo51{{.*}}!type ![[TYPE51:[0-9]+]]
245 pub fn foo52(_: f64, _: f64) { }
246 // CHECK: define{{.*}}foo52{{.*}}!type ![[TYPE52:[0-9]+]]
247 pub fn foo53(_: f64, _: f64, _: f64) { }
248 // CHECK: define{{.*}}foo53{{.*}}!type ![[TYPE53:[0-9]+]]
249 pub fn foo54(_: char) { }
250 // CHECK: define{{.*}}foo54{{.*}}!type ![[TYPE54:[0-9]+]]
251 pub fn foo55(_: char, _: char) { }
252 // CHECK: define{{.*}}foo55{{.*}}!type ![[TYPE55:[0-9]+]]
253 pub fn foo56(_: char, _: char, _: char) { }
254 // CHECK: define{{.*}}foo56{{.*}}!type ![[TYPE56:[0-9]+]]
255 pub fn foo57(_: &str) { }
256 // CHECK: define{{.*}}foo57{{.*}}!type ![[TYPE57:[0-9]+]]
257 pub fn foo58(_: &str, _: &str) { }
258 // CHECK: define{{.*}}foo58{{.*}}!type ![[TYPE58:[0-9]+]]
259 pub fn foo59(_: &str, _: &str, _: &str) { }
260 // CHECK: define{{.*}}foo59{{.*}}!type ![[TYPE59:[0-9]+]]
261 pub fn foo60(_: (i32, i32)) { }
262 // CHECK: define{{.*}}foo60{{.*}}!type ![[TYPE60:[0-9]+]]
263 pub fn foo61(_: (i32, i32), _: (i32, i32)) { }
264 // CHECK: define{{.*}}foo61{{.*}}!type ![[TYPE61:[0-9]+]]
265 pub fn foo62(_: (i32, i32), _: (i32, i32), _: (i32, i32)) { }
266 // CHECK: define{{.*}}foo62{{.*}}!type ![[TYPE62:[0-9]+]]
267 pub fn foo63(_: [i32; 32]) { }
268 // CHECK: define{{.*}}foo63{{.*}}!type ![[TYPE63:[0-9]+]]
269 pub fn foo64(_: [i32; 32], _: [i32; 32]) { }
270 // CHECK: define{{.*}}foo64{{.*}}!type ![[TYPE64:[0-9]+]]
271 pub fn foo65(_: [i32; 32], _: [i32; 32], _: [i32; 32]) { }
272 // CHECK: define{{.*}}foo65{{.*}}!type ![[TYPE65:[0-9]+]]
273 pub fn foo66(_: &[i32]) { }
274 // CHECK: define{{.*}}foo66{{.*}}!type ![[TYPE66:[0-9]+]]
275 pub fn foo67(_: &[i32], _: &[i32]) { }
276 // CHECK: define{{.*}}foo67{{.*}}!type ![[TYPE67:[0-9]+]]
277 pub fn foo68(_: &[i32], _: &[i32], _: &[i32]) { }
278 // CHECK: define{{.*}}foo68{{.*}}!type ![[TYPE68:[0-9]+]]
279 pub fn foo69(_: &Struct1::<i32>) { }
280 // CHECK: define{{.*}}foo69{{.*}}!type ![[TYPE69:[0-9]+]]
281 pub fn foo70(_: &Struct1::<i32>, _: &Struct1::<i32>) { }
282 // CHECK: define{{.*}}foo70{{.*}}!type ![[TYPE70:[0-9]+]]
283 pub fn foo71(_: &Struct1::<i32>, _: &Struct1::<i32>, _: &Struct1::<i32>) { }
284 // CHECK: define{{.*}}foo71{{.*}}!type ![[TYPE71:[0-9]+]]
285 pub fn foo72(_: &Enum1::<i32>) { }
286 // CHECK: define{{.*}}foo72{{.*}}!type ![[TYPE72:[0-9]+]]
287 pub fn foo73(_: &Enum1::<i32>, _: &Enum1::<i32>) { }
288 // CHECK: define{{.*}}foo73{{.*}}!type ![[TYPE73:[0-9]+]]
289 pub fn foo74(_: &Enum1::<i32>, _: &Enum1::<i32>, _: &Enum1::<i32>) { }
290 // CHECK: define{{.*}}foo74{{.*}}!type ![[TYPE74:[0-9]+]]
291 pub fn foo75(_: &Union1::<i32>) { }
292 // CHECK: define{{.*}}foo75{{.*}}!type ![[TYPE75:[0-9]+]]
293 pub fn foo76(_: &Union1::<i32>, _: &Union1::<i32>) { }
294 // CHECK: define{{.*}}foo76{{.*}}!type ![[TYPE76:[0-9]+]]
295 pub fn foo77(_: &Union1::<i32>, _: &Union1::<i32>, _: &Union1::<i32>) { }
296 // CHECK: define{{.*}}foo77{{.*}}!type ![[TYPE77:[0-9]+]]
297 pub fn foo78(_: *mut type1) { }
298 // CHECK: define{{.*}}foo78{{.*}}!type ![[TYPE78:[0-9]+]]
299 pub fn foo79(_: *mut type1, _: *mut type1) { }
300 // CHECK: define{{.*}}foo79{{.*}}!type ![[TYPE79:[0-9]+]]
301 pub fn foo80(_: *mut type1, _: *mut type1, _: *mut type1) { }
302 // CHECK: define{{.*}}foo80{{.*}}!type ![[TYPE80:[0-9]+]]
303 pub fn foo81(_: &mut i32) { }
304 // CHECK: define{{.*}}foo81{{.*}}!type ![[TYPE81:[0-9]+]]
305 pub fn foo82(_: &mut i32, _: &i32) { }
306 // CHECK: define{{.*}}foo82{{.*}}!type ![[TYPE82:[0-9]+]]
307 pub fn foo83(_: &mut i32, _: &i32, _: &i32) { }
308 // CHECK: define{{.*}}foo83{{.*}}!type ![[TYPE83:[0-9]+]]
309 pub fn foo84(_: &i32) { }
310 // CHECK: define{{.*}}foo84{{.*}}!type ![[TYPE84:[0-9]+]]
311 pub fn foo85(_: &i32, _: &mut i32) { }
312 // CHECK: define{{.*}}foo85{{.*}}!type ![[TYPE85:[0-9]+]]
313 pub fn foo86(_: &i32, _: &mut i32, _: &mut i32) { }
314 // CHECK: define{{.*}}foo86{{.*}}!type ![[TYPE86:[0-9]+]]
315 pub fn foo87(_: *mut i32) { }
316 // CHECK: define{{.*}}foo87{{.*}}!type ![[TYPE87:[0-9]+]]
317 pub fn foo88(_: *mut i32, _: *const i32) { }
318 // CHECK: define{{.*}}foo88{{.*}}!type ![[TYPE88:[0-9]+]]
319 pub fn foo89(_: *mut i32, _: *const i32, _: *const i32) { }
320 // CHECK: define{{.*}}foo89{{.*}}!type ![[TYPE89:[0-9]+]]
321 pub fn foo90(_: *const i32) { }
322 // CHECK: define{{.*}}foo90{{.*}}!type ![[TYPE90:[0-9]+]]
323 pub fn foo91(_: *const i32, _: *mut i32) { }
324 // CHECK: define{{.*}}foo91{{.*}}!type ![[TYPE91:[0-9]+]]
325 pub fn foo92(_: *const i32, _: *mut i32, _: *mut i32) { }
326 // CHECK: define{{.*}}foo92{{.*}}!type ![[TYPE92:[0-9]+]]
327 pub fn foo93(_: fn(i32) -> i32) { }
328 // CHECK: define{{.*}}foo93{{.*}}!type ![[TYPE93:[0-9]+]]
329 pub fn foo94(_: fn(i32) -> i32, _: fn(i32) -> i32) { }
330 // CHECK: define{{.*}}foo94{{.*}}!type ![[TYPE94:[0-9]+]]
331 pub fn foo95(_: fn(i32) -> i32, _: fn(i32) -> i32, _: fn(i32) -> i32) { }
332 // CHECK: define{{.*}}foo95{{.*}}!type ![[TYPE95:[0-9]+]]
333 pub fn foo96(_: &dyn Fn(i32) -> i32) { }
334 // CHECK: define{{.*}}foo96{{.*}}!type ![[TYPE96:[0-9]+]]
335 pub fn foo97(_: &dyn Fn(i32) -> i32, _: &dyn Fn(i32) -> i32) { }
336 // CHECK: define{{.*}}foo97{{.*}}!type ![[TYPE97:[0-9]+]]
337 pub fn foo98(_: &dyn Fn(i32) -> i32, _: &dyn Fn(i32) -> i32, _: &dyn Fn(i32) -> i32) { }
338 // CHECK: define{{.*}}foo98{{.*}}!type ![[TYPE98:[0-9]+]]
339 pub fn foo99(_: &dyn FnMut(i32) -> i32) { }
340 // CHECK: define{{.*}}foo99{{.*}}!type ![[TYPE99:[0-9]+]]
341 pub fn foo100(_: &dyn FnMut(i32) -> i32, _: &dyn FnMut(i32) -> i32) { }
342 // CHECK: define{{.*}}foo100{{.*}}!type ![[TYPE100:[0-9]+]]
343 pub fn foo101(_: &dyn FnMut(i32) -> i32, _: &dyn FnMut(i32) -> i32, _: &dyn FnMut(i32) -> i32) { }
344 // CHECK: define{{.*}}foo101{{.*}}!type ![[TYPE101:[0-9]+]]
345 pub fn foo102(_: &dyn FnOnce(i32) -> i32) { }
346 // CHECK: define{{.*}}foo102{{.*}}!type ![[TYPE102:[0-9]+]]
347 pub fn foo103(_: &dyn FnOnce(i32) -> i32, _: &dyn FnOnce(i32) -> i32) { }
348 // CHECK: define{{.*}}foo103{{.*}}!type ![[TYPE103:[0-9]+]]
349 pub fn foo104(_: &dyn FnOnce(i32) -> i32, _: &dyn FnOnce(i32) -> i32, _: &dyn FnOnce(i32) -> i32) {}
350 // CHECK: define{{.*}}foo104{{.*}}!type ![[TYPE104:[0-9]+]]
351 pub fn foo105(_: &dyn Send) { }
352 // CHECK: define{{.*}}foo105{{.*}}!type ![[TYPE105:[0-9]+]]
353 pub fn foo106(_: &dyn Send, _: &dyn Send) { }
354 // CHECK: define{{.*}}foo106{{.*}}!type ![[TYPE106:[0-9]+]]
355 pub fn foo107(_: &dyn Send, _: &dyn Send, _: &dyn Send) { }
356 // CHECK: define{{.*}}foo107{{.*}}!type ![[TYPE107:[0-9]+]]
357 pub fn foo108(_: Type1) { }
358 // CHECK: define{{.*}}foo108{{.*}}!type ![[TYPE108:[0-9]+]]
359 pub fn foo109(_: Type1, _: Type1) { }
360 // CHECK: define{{.*}}foo109{{.*}}!type ![[TYPE109:[0-9]+]]
361 pub fn foo110(_: Type1, _: Type1, _: Type1) { }
362 // CHECK: define{{.*}}foo110{{.*}}!type ![[TYPE110:[0-9]+]]
363 pub fn foo111(_: Type2) { }
364 // CHECK: define{{.*}}foo111{{.*}}!type ![[TYPE111:[0-9]+]]
365 pub fn foo112(_: Type2, _: Type2) { }
366 // CHECK: define{{.*}}foo112{{.*}}!type ![[TYPE112:[0-9]+]]
367 pub fn foo113(_: Type2, _: Type2, _: Type2) { }
368 // CHECK: define{{.*}}foo113{{.*}}!type ![[TYPE113:[0-9]+]]
369 pub fn foo114(_: Type3) { }
370 // CHECK: define{{.*}}foo114{{.*}}!type ![[TYPE114:[0-9]+]]
371 pub fn foo115(_: Type3, _: Type3) { }
372 // CHECK: define{{.*}}foo115{{.*}}!type ![[TYPE115:[0-9]+]]
373 pub fn foo116(_: Type3, _: Type3, _: Type3) { }
374 // CHECK: define{{.*}}foo116{{.*}}!type ![[TYPE116:[0-9]+]]
375 pub fn foo117(_: Type4) { }
376 // CHECK: define{{.*}}foo117{{.*}}!type ![[TYPE117:[0-9]+]]
377 pub fn foo118(_: Type4, _: Type4) { }
378 // CHECK: define{{.*}}foo118{{.*}}!type ![[TYPE118:[0-9]+]]
379 pub fn foo119(_: Type4, _: Type4, _: Type4) { }
380 // CHECK: define{{.*}}foo119{{.*}}!type ![[TYPE119:[0-9]+]]
381 pub fn foo120(_: Type5) { }
382 // CHECK: define{{.*}}foo120{{.*}}!type ![[TYPE120:[0-9]+]]
383 pub fn foo121(_: Type5, _: Type5) { }
384 // CHECK: define{{.*}}foo121{{.*}}!type ![[TYPE121:[0-9]+]]
385 pub fn foo122(_: Type5, _: Type5, _: Type5) { }
386 // CHECK: define{{.*}}foo122{{.*}}!type ![[TYPE122:[0-9]+]]
387 pub fn foo123(_: Type6) { }
388 // CHECK: define{{.*}}foo123{{.*}}!type ![[TYPE123:[0-9]+]]
389 pub fn foo124(_: Type6, _: Type6) { }
390 // CHECK: define{{.*}}foo124{{.*}}!type ![[TYPE124:[0-9]+]]
391 pub fn foo125(_: Type6, _: Type6, _: Type6) { }
392 // CHECK: define{{.*}}foo125{{.*}}!type ![[TYPE125:[0-9]+]]
393 pub fn foo126(_: Type7) { }
394 // CHECK: define{{.*}}foo126{{.*}}!type ![[TYPE126:[0-9]+]]
395 pub fn foo127(_: Type7, _: Type7) { }
396 // CHECK: define{{.*}}foo127{{.*}}!type ![[TYPE127:[0-9]+]]
397 pub fn foo128(_: Type7, _: Type7, _: Type7) { }
398 // CHECK: define{{.*}}foo128{{.*}}!type ![[TYPE128:[0-9]+]]
399 pub fn foo129(_: Type8) { }
400 // CHECK: define{{.*}}foo129{{.*}}!type ![[TYPE129:[0-9]+]]
401 pub fn foo130(_: Type8, _: Type8) { }
402 // CHECK: define{{.*}}foo130{{.*}}!type ![[TYPE130:[0-9]+]]
403 pub fn foo131(_: Type8, _: Type8, _: Type8) { }
404 // CHECK: define{{.*}}foo131{{.*}}!type ![[TYPE131:[0-9]+]]
405 pub fn foo132(_: Type9) { }
406 // CHECK: define{{.*}}foo132{{.*}}!type ![[TYPE132:[0-9]+]]
407 pub fn foo133(_: Type9, _: Type9) { }
408 // CHECK: define{{.*}}foo133{{.*}}!type ![[TYPE133:[0-9]+]]
409 pub fn foo134(_: Type9, _: Type9, _: Type9) { }
410 // CHECK: define{{.*}}foo134{{.*}}!type ![[TYPE134:[0-9]+]]
411 pub fn foo135(_: Type10) { }
412 // CHECK: define{{.*}}foo135{{.*}}!type ![[TYPE135:[0-9]+]]
413 pub fn foo136(_: Type10, _: Type10) { }
414 // CHECK: define{{.*}}foo136{{.*}}!type ![[TYPE136:[0-9]+]]
415 pub fn foo137(_: Type10, _: Type10, _: Type10) { }
416 // CHECK: define{{.*}}foo137{{.*}}!type ![[TYPE137:[0-9]+]]
417 pub fn foo138(_: Type11) { }
418 // CHECK: define{{.*}}foo138{{.*}}!type ![[TYPE138:[0-9]+]]
419 pub fn foo139(_: Type11, _: Type11) { }
420 // CHECK: define{{.*}}foo139{{.*}}!type ![[TYPE139:[0-9]+]]
421 pub fn foo140(_: Type11, _: Type11, _: Type11) { }
422 // CHECK: define{{.*}}foo140{{.*}}!type ![[TYPE140:[0-9]+]]
423 pub fn foo141(_: Type12) { }
424 // CHECK: define{{.*}}foo141{{.*}}!type ![[TYPE141:[0-9]+]]
425 pub fn foo142(_: Type12, _: Type12) { }
426 // CHECK: define{{.*}}foo142{{.*}}!type ![[TYPE142:[0-9]+]]
427 pub fn foo143(_: Type12, _: Type12, _: Type12) { }
428 // CHECK: define{{.*}}foo143{{.*}}!type ![[TYPE143:[0-9]+]]
429 pub fn foo144(_: Type13) { }
430 // CHECK: define{{.*}}foo144{{.*}}!type ![[TYPE144:[0-9]+]]
431 pub fn foo145(_: Type13, _: Type13) { }
432 // CHECK: define{{.*}}foo145{{.*}}!type ![[TYPE145:[0-9]+]]
433 pub fn foo146(_: Type13, _: Type13, _: Type13) { }
434 // CHECK: define{{.*}}foo146{{.*}}!type ![[TYPE146:[0-9]+]]
435 pub fn foo147(_: Type14<Bar>) { }
436 // CHECK: define{{.*}}foo147{{.*}}!type ![[TYPE147:[0-9]+]]
437 pub fn foo148(_: Type14<Bar>, _: Type14<Bar>) { }
438 // CHECK: define{{.*}}foo148{{.*}}!type ![[TYPE148:[0-9]+]]
439 pub fn foo149(_: Type14<Bar>, _: Type14<Bar>, _: Type14<Bar>) { }
440 // CHECK: define{{.*}}foo149{{.*}}!type ![[TYPE149:[0-9]+]]
441
442 // CHECK: ![[TYPE0]] = !{i64 0, !"_ZTSFvvE"}
443 // CHECK: ![[TYPE1]] = !{i64 0, !"_ZTSFvvvE"}
444 // CHECK: ![[TYPE2]] = !{i64 0, !"_ZTSFvvvvE"}
445 // CHECK: ![[TYPE3]] = !{i64 0, !"_ZTSFvPvE"}
446 // CHECK: ![[TYPE4]] = !{i64 0, !"_ZTSFvPvS_E"}
447 // CHECK: ![[TYPE5]] = !{i64 0, !"_ZTSFvPvS_S_E"}
448 // CHECK: ![[TYPE6]] = !{i64 0, !"_ZTSFvPKvE"}
449 // CHECK: ![[TYPE7]] = !{i64 0, !"_ZTSFvPKvS0_E"}
450 // CHECK: ![[TYPE8]] = !{i64 0, !"_ZTSFvPKvS0_S0_E"}
451 // CHECK: ![[TYPE9]] = !{i64 0, !"_ZTSFvbE"}
452 // CHECK: ![[TYPE10]] = !{i64 0, !"_ZTSFvbbE"}
453 // CHECK: ![[TYPE11]] = !{i64 0, !"_ZTSFvbbbE"}
454 // CHECK: ![[TYPE12]] = !{i64 0, !"_ZTSFvu2i8E"}
455 // CHECK: ![[TYPE13]] = !{i64 0, !"_ZTSFvu2i8S_E"}
456 // CHECK: ![[TYPE14]] = !{i64 0, !"_ZTSFvu2i8S_S_E"}
457 // CHECK: ![[TYPE15]] = !{i64 0, !"_ZTSFvu3i16E"}
458 // CHECK: ![[TYPE16]] = !{i64 0, !"_ZTSFvu3i16S_E"}
459 // CHECK: ![[TYPE17]] = !{i64 0, !"_ZTSFvu3i16S_S_E"}
460 // CHECK: ![[TYPE18]] = !{i64 0, !"_ZTSFvu3i32E"}
461 // CHECK: ![[TYPE19]] = !{i64 0, !"_ZTSFvu3i32S_E"}
462 // CHECK: ![[TYPE20]] = !{i64 0, !"_ZTSFvu3i32S_S_E"}
463 // CHECK: ![[TYPE21]] = !{i64 0, !"_ZTSFvu3i64E"}
464 // CHECK: ![[TYPE22]] = !{i64 0, !"_ZTSFvu3i64S_E"}
465 // CHECK: ![[TYPE23]] = !{i64 0, !"_ZTSFvu3i64S_S_E"}
466 // CHECK: ![[TYPE24]] = !{i64 0, !"_ZTSFvu4i128E"}
467 // CHECK: ![[TYPE25]] = !{i64 0, !"_ZTSFvu4i128S_E"}
468 // CHECK: ![[TYPE26]] = !{i64 0, !"_ZTSFvu4i128S_S_E"}
469 // CHECK: ![[TYPE27]] = !{i64 0, !"_ZTSFvu5isizeE"}
470 // CHECK: ![[TYPE28]] = !{i64 0, !"_ZTSFvu5isizeS_E"}
471 // CHECK: ![[TYPE29]] = !{i64 0, !"_ZTSFvu5isizeS_S_E"}
472 // CHECK: ![[TYPE30]] = !{i64 0, !"_ZTSFvu2u8E"}
473 // CHECK: ![[TYPE31]] = !{i64 0, !"_ZTSFvu2u8S_E"}
474 // CHECK: ![[TYPE32]] = !{i64 0, !"_ZTSFvu2u8S_S_E"}
475 // CHECK: ![[TYPE33]] = !{i64 0, !"_ZTSFvu3u16E"}
476 // CHECK: ![[TYPE34]] = !{i64 0, !"_ZTSFvu3u16S_E"}
477 // CHECK: ![[TYPE35]] = !{i64 0, !"_ZTSFvu3u16S_S_E"}
478 // CHECK: ![[TYPE36]] = !{i64 0, !"_ZTSFvu3u32E"}
479 // CHECK: ![[TYPE37]] = !{i64 0, !"_ZTSFvu3u32S_E"}
480 // CHECK: ![[TYPE38]] = !{i64 0, !"_ZTSFvu3u32S_S_E"}
481 // CHECK: ![[TYPE39]] = !{i64 0, !"_ZTSFvu3u64E"}
482 // CHECK: ![[TYPE40]] = !{i64 0, !"_ZTSFvu3u64S_E"}
483 // CHECK: ![[TYPE41]] = !{i64 0, !"_ZTSFvu3u64S_S_E"}
484 // CHECK: ![[TYPE42]] = !{i64 0, !"_ZTSFvu4u128E"}
485 // CHECK: ![[TYPE43]] = !{i64 0, !"_ZTSFvu4u128S_E"}
486 // CHECK: ![[TYPE44]] = !{i64 0, !"_ZTSFvu4u128S_S_E"}
487 // CHECK: ![[TYPE45]] = !{i64 0, !"_ZTSFvu5usizeE"}
488 // CHECK: ![[TYPE46]] = !{i64 0, !"_ZTSFvu5usizeS_E"}
489 // CHECK: ![[TYPE47]] = !{i64 0, !"_ZTSFvu5usizeS_S_E"}
490 // CHECK: ![[TYPE48]] = !{i64 0, !"_ZTSFvu3f32E"}
491 // CHECK: ![[TYPE49]] = !{i64 0, !"_ZTSFvu3f32S_E"}
492 // CHECK: ![[TYPE50]] = !{i64 0, !"_ZTSFvu3f32S_S_E"}
493 // CHECK: ![[TYPE51]] = !{i64 0, !"_ZTSFvu3f64E"}
494 // CHECK: ![[TYPE52]] = !{i64 0, !"_ZTSFvu3f64S_E"}
495 // CHECK: ![[TYPE53]] = !{i64 0, !"_ZTSFvu3f64S_S_E"}
496 // CHECK: ![[TYPE54]] = !{i64 0, !"_ZTSFvu4charE"}
497 // CHECK: ![[TYPE55]] = !{i64 0, !"_ZTSFvu4charS_E"}
498 // CHECK: ![[TYPE56]] = !{i64 0, !"_ZTSFvu4charS_S_E"}
499 // CHECK: ![[TYPE57]] = !{i64 0, !"_ZTSFvu3refIu3strEE"}
500 // CHECK: ![[TYPE58]] = !{i64 0, !"_ZTSFvu3refIu3strES0_E"}
501 // CHECK: ![[TYPE59]] = !{i64 0, !"_ZTSFvu3refIu3strES0_S0_E"}
502 // CHECK: ![[TYPE60]] = !{i64 0, !"_ZTSFvu5tupleIu3i32S_EE"}
503 // CHECK: ![[TYPE61]] = !{i64 0, !"_ZTSFvu5tupleIu3i32S_ES0_E"}
504 // CHECK: ![[TYPE62]] = !{i64 0, !"_ZTSFvu5tupleIu3i32S_ES0_S0_E"}
505 // CHECK: ![[TYPE63]] = !{i64 0, !"_ZTSFvA32u3i32E"}
506 // CHECK: ![[TYPE64]] = !{i64 0, !"_ZTSFvA32u3i32S0_E"}
507 // CHECK: ![[TYPE65]] = !{i64 0, !"_ZTSFvA32u3i32S0_S0_E"}
508 // CHECK: ![[TYPE66]] = !{i64 0, !"_ZTSFvu3refIu5sliceIu3i32EEE"}
509 // CHECK: ![[TYPE67]] = !{i64 0, !"_ZTSFvu3refIu5sliceIu3i32EES1_E"}
510 // CHECK: ![[TYPE68]] = !{i64 0, !"_ZTSFvu3refIu5sliceIu3i32EES1_S1_E"}
511 // CHECK: ![[TYPE69]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi7Struct1Iu3i32EEE"}
512 // CHECK: ![[TYPE70]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi7Struct1Iu3i32EES1_E"}
513 // CHECK: ![[TYPE71]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi7Struct1Iu3i32EES1_S1_E"}
514 // CHECK: ![[TYPE72]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi5Enum1Iu3i32EEE"}
515 // CHECK: ![[TYPE73]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi5Enum1Iu3i32EES1_E"}
516 // CHECK: ![[TYPE74]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi5Enum1Iu3i32EES1_S1_E"}
517 // CHECK: ![[TYPE75]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Union1Iu3i32EEE"}
518 // CHECK: ![[TYPE76]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Union1Iu3i32EES1_E"}
519 // CHECK: ![[TYPE77]] = !{i64 0, !"_ZTSFvu3refIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Union1Iu3i32EES1_S1_E"}
520 // CHECK: ![[TYPE78]] = !{i64 0, !"_ZTSFvP5type1E"}
521 // CHECK: ![[TYPE79]] = !{i64 0, !"_ZTSFvP5type1S0_E"}
522 // CHECK: ![[TYPE80]] = !{i64 0, !"_ZTSFvP5type1S0_S0_E"}
523 // CHECK: ![[TYPE81]] = !{i64 0, !"_ZTSFvU3mutu3refIu3i32EE"}
524 // CHECK: ![[TYPE82]] = !{i64 0, !"_ZTSFvU3mutu3refIu3i32ES0_E"}
525 // CHECK: ![[TYPE83]] = !{i64 0, !"_ZTSFvU3mutu3refIu3i32ES0_S0_E"}
526 // CHECK: ![[TYPE84]] = !{i64 0, !"_ZTSFvu3refIu3i32EE"}
527 // CHECK: ![[TYPE85]] = !{i64 0, !"_ZTSFvu3refIu3i32EU3mutS0_E"}
528 // CHECK: ![[TYPE86]] = !{i64 0, !"_ZTSFvu3refIu3i32EU3mutS0_S1_E"}
529 // CHECK: ![[TYPE87]] = !{i64 0, !"_ZTSFvPu3i32E"}
530 // CHECK: ![[TYPE88]] = !{i64 0, !"_ZTSFvPu3i32PKS_E"}
531 // CHECK: ![[TYPE89]] = !{i64 0, !"_ZTSFvPu3i32PKS_S2_E"}
532 // CHECK: ![[TYPE90]] = !{i64 0, !"_ZTSFvPKu3i32E"}
533 // CHECK: ![[TYPE91]] = !{i64 0, !"_ZTSFvPKu3i32PS_E"}
534 // CHECK: ![[TYPE92]] = !{i64 0, !"_ZTSFvPKu3i32PS_S2_E"}
535 // CHECK: ![[TYPE93]] = !{i64 0, !"_ZTSFvPFu3i32S_EE"}
536 // CHECK: ![[TYPE94]] = !{i64 0, !"_ZTSFvPFu3i32S_ES0_E"}
537 // CHECK: ![[TYPE95]] = !{i64 0, !"_ZTSFvPFu3i32S_ES0_S0_E"}
538 // CHECK: ![[TYPE96]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEEE"}
539 // CHECK: ![[TYPE97]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEES5_E"}
540 // CHECK: ![[TYPE98]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEES5_S5_E"}
541 // CHECK: ![[TYPE99]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEEE"}
542 // CHECK: ![[TYPE100]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEES5_E"}
543 // CHECK: ![[TYPE101]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEES5_S5_E"}
544 // CHECK: ![[TYPE102]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEEE"}
545 // CHECK: ![[TYPE103]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEES5_E"}
546 // CHECK: ![[TYPE104]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5tupleIu3i32EEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIS0_ES_u6regionEES5_S5_E"}
547 // CHECK: ![[TYPE105]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtC{{[[:print:]]+}}_4core6marker4Sendu6regionEEE"}
548 // CHECK: ![[TYPE106]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtC{{[[:print:]]+}}_4core6marker4Sendu6regionEES2_E"}
549 // CHECK: ![[TYPE107]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtC{{[[:print:]]+}}_4core6marker4Sendu6regionEES2_S2_E"}
550 // CHECK: ![[TYPE108]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NCNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn111{{[{}][{}]}}closure{{[}][}]}}Iu2i8PFvvEvEE"}
551 // CHECK: ![[TYPE109]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NCNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn111{{[{}][{}]}}closure{{[}][}]}}Iu2i8PFvvEvES1_E"}
552 // CHECK: ![[TYPE110]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NCNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn111{{[{}][{}]}}closure{{[}][}]}}Iu2i8PFvvEvES1_S1_E"}
553 // CHECK: ![[TYPE111]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NcNtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn13Foo15{{[{}][{}]}}constructor{{[}][}]}}E"}
554 // CHECK: ![[TYPE112]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NcNtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn13Foo15{{[{}][{}]}}constructor{{[}][}]}}S_E"}
555 // CHECK: ![[TYPE113]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NcNtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn13Foo15{{[{}][{}]}}constructor{{[}][}]}}S_S_E"}
556 // CHECK: ![[TYPE114]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn110{{[{}][{}]}}extern{{[}][}]}}3fooE"}
557 // CHECK: ![[TYPE115]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn110{{[{}][{}]}}extern{{[}][}]}}3fooS_E"}
558 // CHECK: ![[TYPE116]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn110{{[{}][{}]}}extern{{[}][}]}}3fooS_S_E"}
559 // CHECK: ![[TYPE117]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn1s0_11{{[{}][{}]}}closure{{[}][}]}}3FooE"}
560 // CHECK: ![[TYPE118]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn1s0_11{{[{}][{}]}}closure{{[}][}]}}3FooS_E"}
561 // CHECK: ![[TYPE119]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn1s0_11{{[{}][{}]}}closure{{[}][}]}}3FooS_S_E"}
562 // CHECK: ![[TYPE120]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn112{{[{}][{}]}}constant{{[}][}]}}3FooE"}
563 // CHECK: ![[TYPE121]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn112{{[{}][{}]}}constant{{[}][}]}}3FooS_E"}
564 // CHECK: ![[TYPE122]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn112{{[{}][{}]}}constant{{[}][}]}}3FooS_S_E"}
565 // CHECK: ![[TYPE123]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNINvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn18{{[{}][{}]}}impl{{[}][}]}}3fooIu3i32EE"}
566 // CHECK: ![[TYPE124]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNINvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn18{{[{}][{}]}}impl{{[}][}]}}3fooIu3i32ES0_E"}
567 // CHECK: ![[TYPE125]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNINvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn18{{[{}][{}]}}impl{{[}][}]}}3fooIu3i32ES0_S0_E"}
568 // CHECK: ![[TYPE126]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu3dynIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait1Iu3i32Eu6regionES_EE"}
569 // CHECK: ![[TYPE127]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu3dynIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait1Iu3i32Eu6regionES_ES3_E"}
570 // CHECK: ![[TYPE128]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu3dynIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait1Iu3i32Eu6regionES_ES3_S3_E"}
571 // CHECK: ![[TYPE129]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu3i32S_EE"}
572 // CHECK: ![[TYPE130]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu3i32S_ES0_E"}
573 // CHECK: ![[TYPE131]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu3i32S_ES0_S0_E"}
574 // CHECK: ![[TYPE132]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi7Struct1Iu3i32ES_EE"}
575 // CHECK: ![[TYPE133]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi7Struct1Iu3i32ES_ES1_E"}
576 // CHECK: ![[TYPE134]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NvNtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi6Trait13fooIu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi7Struct1Iu3i32ES_ES1_S1_E"}
577 // CHECK: ![[TYPE135]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn13QuxIu3i32Lu5usize32EEE"}
578 // CHECK: ![[TYPE136]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn13QuxIu3i32Lu5usize32EES2_E"}
579 // CHECK: ![[TYPE137]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn13QuxIu3i32Lu5usize32EES2_S2_E"}
580 // CHECK: ![[TYPE138]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NcNtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn15Quuux15{{[{}][{}]}}constructor{{[}][}]}}Iu6regionS_EE"}
581 // CHECK: ![[TYPE139]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NcNtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn15Quuux15{{[{}][{}]}}constructor{{[}][}]}}Iu6regionS_ES0_E"}
582 // CHECK: ![[TYPE140]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NcNtNvC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3fn15Quuux15{{[{}][{}]}}constructor{{[}][}]}}Iu6regionS_ES0_S0_E"}
583 // CHECK: ![[TYPE141]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3FooE"}
584 // CHECK: ![[TYPE142]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3FooS_E"}
585 // CHECK: ![[TYPE143]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3FooS_S_E"}
586 // CHECK: ![[TYPE144]] = !{i64 0, !"_ZTSFvu3refIvEE"}
587 // CHECK: ![[TYPE145]] = !{i64 0, !"_ZTSFvu3refIvES_E"}
588 // CHECK: ![[TYPE146]] = !{i64 0, !"_ZTSFvu3refIvES_S_E"}
589 // CHECK: ![[TYPE147]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarE
590 // CHECK: ![[TYPE148]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_E
591 // CHECK: ![[TYPE149]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_S_E