|
5 | 5 |
|
6 | 6 | //@ compile-flags:-g
|
7 | 7 |
|
8 |
| -// === GDB TESTS =================================================================================== |
| 8 | +// === GDB TESTS ================================================================================== |
9 | 9 |
|
10 | 10 | // gdb-command:run
|
11 | 11 |
|
|
17 | 17 | // gdb-check:type = type_names::GenericStruct<type_names::mod1::Struct2, type_names::mod1::mod2::Struct3>
|
18 | 18 |
|
19 | 19 | // gdb-command:whatis generic_struct2
|
20 |
| -// gdb-check:type = type_names::GenericStruct<type_names::Struct1, extern "system" fn(isize) -> usize> |
| 20 | +// gdb-check:type = type_names::GenericStruct<type_names::Struct1, extern "fastcall" fn(isize) -> usize> |
21 | 21 |
|
22 | 22 | // gdb-command:whatis mod_struct
|
23 | 23 | // gdb-check:type = type_names::mod1::Struct2
|
|
169 | 169 |
|
170 | 170 | // === CDB TESTS ==================================================================================
|
171 | 171 |
|
| 172 | +// Note: `/n` causes the wildcard matches to be sorted to avoid depending on order in PDB which |
| 173 | +// can be arbitrary. |
| 174 | + |
172 | 175 | // cdb-command: g
|
173 | 176 |
|
174 | 177 | // STRUCTS
|
175 | 178 | // 0-sized structs appear to be optimized away in some cases, so only check the structs that do
|
176 | 179 | // actually appear.
|
177 |
| -// cdb-command:dv /t *_struct |
| 180 | +// cdb-command:dv /t /n *_struct |
178 | 181 |
|
179 | 182 | // ENUMS
|
180 |
| -// cdb-command:dv /t *_enum_* |
| 183 | +// cdb-command:dv /t /n *_enum_* |
| 184 | +// cdb-check:union enum2$<type_names::mod1::mod2::Enum3<type_names::mod1::Struct2> > generic_enum_1 = [...] |
| 185 | +// cdb-check:union enum2$<type_names::mod1::mod2::Enum3<type_names::Struct1> > generic_enum_2 = [...] |
181 | 186 | // cdb-check:union enum2$<type_names::Enum1> simple_enum_1 = [...]
|
182 | 187 | // cdb-check:union enum2$<type_names::Enum1> simple_enum_2 = [...]
|
183 | 188 | // cdb-check:union enum2$<type_names::mod1::Enum2> simple_enum_3 = [...]
|
184 |
| -// cdb-check:union enum2$<type_names::mod1::mod2::Enum3<type_names::mod1::Struct2> > generic_enum_1 = [...] |
185 |
| -// cdb-check:union enum2$<type_names::mod1::mod2::Enum3<type_names::Struct1> > generic_enum_2 = [...] |
186 | 189 |
|
187 | 190 | // TUPLES
|
188 |
| -// cdb-command:dv /t tuple* |
| 191 | +// cdb-command:dv /t /n tuple* |
189 | 192 | // cdb-check:struct tuple$<u32,type_names::Struct1,enum2$<type_names::mod1::mod2::Enum3<type_names::mod1::Struct2> > > tuple1 = [...]
|
190 | 193 | // cdb-check:struct tuple$<tuple$<type_names::Struct1,type_names::mod1::mod2::Struct3>,enum2$<type_names::mod1::Enum2>,char> tuple2 = [...]
|
191 | 194 |
|
192 | 195 | // BOX
|
193 |
| -// cdb-command:dv /t box* |
| 196 | +// cdb-command:dv /t /n box* |
194 | 197 | // cdb-check:struct tuple$<alloc::boxed::Box<f32,alloc::alloc::Global>,i32> box1 = [...]
|
195 | 198 | // cdb-check:struct tuple$<alloc::boxed::Box<enum2$<type_names::mod1::mod2::Enum3<f32> >,alloc::alloc::Global>,i32> box2 = [...]
|
196 | 199 |
|
197 | 200 | // REFERENCES
|
198 |
| -// cdb-command:dv /t *ref* |
199 |
| -// cdb-check:struct tuple$<ref$<type_names::Struct1>,i32> ref1 = [...] |
200 |
| -// cdb-check:struct tuple$<ref$<type_names::GenericStruct<char,type_names::Struct1> >,i32> ref2 = [...] |
| 201 | +// cdb-command:dv /t /n *ref* |
201 | 202 | // cdb-check:struct tuple$<ref_mut$<type_names::Struct1>,i32> mut_ref1 = [...]
|
202 | 203 | // cdb-check:struct tuple$<ref_mut$<type_names::GenericStruct<enum2$<type_names::mod1::Enum2>,f64> >,i32> mut_ref2 = [...]
|
| 204 | +// cdb-check:struct tuple$<ref$<type_names::Struct1>,i32> ref1 = [...] |
| 205 | +// cdb-check:struct tuple$<ref$<type_names::GenericStruct<char,type_names::Struct1> >,i32> ref2 = [...] |
203 | 206 |
|
204 | 207 | // RAW POINTERS
|
205 |
| -// cdb-command:dv /t *_ptr* |
206 |
| -// cdb-check:struct tuple$<ptr_mut$<type_names::Struct1>,isize> mut_ptr1 = [...] |
207 |
| -// cdb-check:struct tuple$<ptr_mut$<isize>,isize> mut_ptr2 = [...] |
208 |
| -// cdb-check:struct tuple$<ptr_mut$<enum2$<type_names::mod1::mod2::Enum3<type_names::Struct1> > >,isize> mut_ptr3 = [...] |
| 208 | +// cdb-command:dv /t /n *_ptr* |
209 | 209 | // cdb-check:struct tuple$<ptr_const$<type_names::Struct1>,isize> const_ptr1 = [...]
|
210 | 210 | // cdb-check:struct tuple$<ptr_const$<isize>,isize> const_ptr2 = [...]
|
211 | 211 | // cdb-check:struct tuple$<ptr_const$<enum2$<type_names::mod1::mod2::Enum3<type_names::Struct1> > >,isize> const_ptr3 = [...]
|
| 212 | +// cdb-check:struct tuple$<ptr_mut$<type_names::Struct1>,isize> mut_ptr1 = [...] |
| 213 | +// cdb-check:struct tuple$<ptr_mut$<isize>,isize> mut_ptr2 = [...] |
| 214 | +// cdb-check:struct tuple$<ptr_mut$<enum2$<type_names::mod1::mod2::Enum3<type_names::Struct1> > >,isize> mut_ptr3 = [...] |
212 | 215 |
|
213 | 216 | // VECTORS
|
214 |
| -// cdb-command:dv /t *vec* |
| 217 | +// cdb-command:dv /t /n *vec* |
215 | 218 | // cdb-check:struct tuple$<array$<type_names::Struct1,3>,i16> fixed_size_vec1 = [...]
|
216 | 219 | // cdb-check:struct tuple$<array$<usize,3>,i16> fixed_size_vec2 = [...]
|
217 | 220 | // cdb-check:struct alloc::vec::Vec<usize,alloc::alloc::Global> vec1 = [...]
|
218 | 221 | // cdb-check:struct alloc::vec::Vec<enum2$<type_names::mod1::Enum2>,alloc::alloc::Global> vec2 = [...]
|
219 |
| -// cdb-command:dv /t slice* |
| 222 | +// cdb-command:dv /t /n slice* |
220 | 223 | // cdb-check:struct ref$<slice2$<usize> > slice1 = [...]
|
221 | 224 | // cdb-check:struct ref_mut$<slice2$<enum2$<type_names::mod1::Enum2> > > slice2 = [...]
|
222 | 225 |
|
223 | 226 | // TRAITS
|
224 |
| -// cdb-command:dv /t *_trait |
| 227 | +// cdb-command:dv /t /n *_trait |
| 228 | + |
| 229 | +// cdb-check:struct alloc::boxed::Box<dyn$<type_names::Trait1>,alloc::alloc::Global> box_trait = [...] |
| 230 | +// cdb-check:struct alloc::boxed::Box<dyn$<type_names::Trait2<i32,type_names::mod1::Struct2> >,alloc::alloc::Global> generic_box_trait = [...] |
225 | 231 | // cdb-check:struct ref_mut$<dyn$<type_names::Trait2<type_names::mod1::mod2::Struct3,type_names::GenericStruct<usize,isize> > > > generic_mut_ref_trait = [...]
|
226 | 232 | // cdb-check:struct ref$<dyn$<type_names::Trait2<type_names::Struct1,type_names::Struct1> > > generic_ref_trait = [...]
|
227 |
| -// cdb-check:struct alloc::boxed::Box<dyn$<type_names::Trait2<i32,type_names::mod1::Struct2> >,alloc::alloc::Global> generic_box_trait = [...] |
228 |
| -// cdb-check:struct alloc::boxed::Box<dyn$<type_names::Trait1>,alloc::alloc::Global> box_trait = [...] |
229 |
| -// cdb-check:struct ref$<dyn$<type_names::Trait1> > ref_trait = [...] |
| 233 | +// cdb-check:struct ref$<dyn$<type_names::TraitNoGenericsButWithAssocType<assoc$<Output,isize> > > > has_associated_type_but_no_generics_trait = struct ref$<dyn$<type_names::TraitNoGenericsButWithAssocType<assoc$<Output,isize> > > > |
| 234 | +// cdb-check:struct ref$<dyn$<type_names::Trait3<u32,assoc$<AssocType,isize> >,core::marker::Send> > has_associated_type_trait = struct ref$<dyn$<type_names::Trait3<u32,assoc$<AssocType,isize> >,core::marker::Send> > |
230 | 235 | // cdb-check:struct ref_mut$<dyn$<type_names::Trait1> > mut_ref_trait = [...]
|
231 | 236 | // cdb-check:struct alloc::boxed::Box<dyn$<core::marker::Send,core::marker::Sync>,alloc::alloc::Global> no_principal_trait = [...]
|
232 |
| -// cdb-check:struct ref$<dyn$<type_names::Trait3<u32,assoc$<AssocType,isize> >,core::marker::Send> > has_associated_type_trait = struct ref$<dyn$<type_names::Trait3<u32,assoc$<AssocType,isize> >,core::marker::Send> > |
233 |
| -// cdb-check:struct ref$<dyn$<type_names::TraitNoGenericsButWithAssocType<assoc$<Output,isize> > > > has_associated_type_but_no_generics_trait = struct ref$<dyn$<type_names::TraitNoGenericsButWithAssocType<assoc$<Output,isize> > > > |
| 237 | +// cdb-check:struct ref$<dyn$<type_names::Trait1> > ref_trait = [...] |
234 | 238 |
|
235 | 239 | // BARE FUNCTIONS
|
236 |
| -// cdb-command:dv /t *_fn* |
237 |
| -// cdb-check:struct tuple$<type_names::mod1::Struct2 (*)(type_names::GenericStruct<u16,u8>),usize> unsafe_fn_with_return_value = [...] |
| 240 | +// cdb-command:dv /t /n *_fn* |
| 241 | +// cdb-check:struct tuple$<void (*)(isize),usize> extern_c_fn = [...] |
238 | 242 | // cdb-check:struct tuple$<type_names::Struct1 (*)(),usize> extern_c_fn_with_return_value = [...]
|
| 243 | +// cdb-check:struct tuple$<void (*)(enum2$<core::option::Option<isize> >,enum2$<core::option::Option<ref$<type_names::mod1::Struct2> > >),usize> rust_fn = [...] |
239 | 244 | // cdb-check:struct tuple$<usize (*)(f64),usize> rust_fn_with_return_value = [...]
|
240 | 245 | // cdb-check:struct tuple$<void (*)(enum2$<core::result::Result<char,f64> >),usize> unsafe_fn = [...]
|
241 |
| -// cdb-check:struct tuple$<void (*)(isize),usize> extern_c_fn = [...] |
242 |
| -// cdb-check:struct tuple$<void (*)(enum2$<core::option::Option<isize> >,enum2$<core::option::Option<ref$<type_names::mod1::Struct2> > >),usize> rust_fn = [...] |
243 |
| -// cdb-command:dv /t *_function* |
244 |
| -// cdb-check:struct tuple$<isize (*)(ptr_const$<u8>, ...),usize> variadic_function = [...] |
245 |
| -// cdb-check:struct tuple$<type_names::mod1::mod2::Struct3 (*)(type_names::mod1::mod2::Struct3),usize> generic_function_struct3 = [...] |
| 246 | +// cdb-check:struct tuple$<type_names::mod1::Struct2 (*)(type_names::GenericStruct<u16,u8>),usize> unsafe_fn_with_return_value = [...] |
| 247 | +// cdb-command:dv /t /n *_function* |
246 | 248 | // cdb-check:struct tuple$<isize (*)(isize),usize> generic_function_int = [...]
|
| 249 | +// cdb-check:struct tuple$<type_names::mod1::mod2::Struct3 (*)(type_names::mod1::mod2::Struct3),usize> generic_function_struct3 = [...] |
| 250 | +// cdb-check:struct tuple$<isize (*)(ptr_const$<u8>, ...),usize> variadic_function = [...] |
247 | 251 | // cdb-command:dx Debugger.State.Scripts.@"type-names.cdb".Contents.getFunctionDetails("rust_fn")
|
248 | 252 | // cdb-check:Return Type: void
|
249 | 253 | // cdb-check:Parameter Types: enum2$<core::option::Option<isize> >,enum2$<core::option::Option<ref$<type_names::mod1::Struct2> > >
|
|
255 | 259 | // cdb-check:Parameter Types:
|
256 | 260 |
|
257 | 261 | // CLOSURES
|
258 |
| -// cdb-command:dv /t closure* |
259 |
| -// cdb-check:struct tuple$<type_names::main::closure_env$1,usize> closure2 = [...] |
| 262 | +// cdb-command:dv /t /n closure* |
260 | 263 | // cdb-check:struct tuple$<type_names::main::closure_env$0,usize> closure1 = [...]
|
| 264 | +// cdb-check:struct tuple$<type_names::main::closure_env$1,usize> closure2 = [...] |
261 | 265 |
|
262 | 266 | // FOREIGN TYPES
|
263 |
| -// cdb-command:dv /t foreign* |
264 |
| -// cdb-check:struct type_names::mod1::extern$0::ForeignType2 * foreign2 = [...] |
| 267 | +// cdb-command:dv /t /n foreign* |
265 | 268 | // cdb-check:struct type_names::extern$0::ForeignType1 * foreign1 = [...]
|
| 269 | +// cdb-check:struct type_names::mod1::extern$0::ForeignType2 * foreign2 = [...] |
266 | 270 |
|
267 | 271 | #![allow(unused_variables)]
|
268 | 272 | #![feature(omit_gdb_pretty_printer_section)]
|
269 | 273 | #![omit_gdb_pretty_printer_section]
|
270 | 274 | #![feature(extern_types)]
|
271 | 275 |
|
272 |
| -use self::Enum1::{Variant1, Variant2}; |
273 | 276 | use std::marker::PhantomData;
|
274 | 277 | use std::ptr;
|
275 | 278 |
|
| 279 | +use self::Enum1::{Variant1, Variant2}; |
| 280 | + |
276 | 281 | pub struct Struct1;
|
277 | 282 | struct GenericStruct<T1, T2>(PhantomData<(T1, T2)>);
|
278 | 283 |
|
@@ -372,7 +377,7 @@ fn main() {
|
372 | 377 | let simple_struct = Struct1;
|
373 | 378 | let generic_struct1: GenericStruct<mod1::Struct2, mod1::mod2::Struct3> =
|
374 | 379 | GenericStruct(PhantomData);
|
375 |
| - let generic_struct2: GenericStruct<Struct1, extern "system" fn(isize) -> usize> = |
| 380 | + let generic_struct2: GenericStruct<Struct1, extern "fastcall" fn(isize) -> usize> = |
376 | 381 | GenericStruct(PhantomData);
|
377 | 382 | let mod_struct = mod1::Struct2;
|
378 | 383 |
|
|
0 commit comments