rust/tests
bors 154ae32a55 Auto merge of #114643 - dpaoliello:inlinedebuginfo, r=wesleywiser
Use the same DISubprogram for each instance of the same inlined function within a caller

# Issue Details:
The call to `panic` within a function like `Option::unwrap` is translated to LLVM as a `tail call` (as it will never return), when multiple calls to the same function like this is inlined LLVM will notice the common `tail call` block (i.e., loading the same panic string + location info and then calling `panic`) and merge them together.

When merging these instructions together, LLVM will also attempt to merge the debug locations as well, but this fails (i.e., debug info is dropped) as Rust emits a new `DISubprogram` at each inline site thus LLVM doesn't recognize that these are actually the same function and so thinks that there isn't a common debug location.

As an example of this when building for x86_64 Windows (note the lack of `.cv_loc` before the call to `panic`, thus it will be attributed to the same line at the `addq` instruction):

```
	.cv_loc	0 1 23 0                        # src\lib.rs:23:0
	addq	$40, %rsp
	retq
	leaq	.Lalloc_f570dea0a53168780ce9a91e67646421(%rip), %rcx
	leaq	.Lalloc_629ace53b7e5b76aaa810d549cc84ea3(%rip), %r8
	movl	$43, %edx
	callq	_ZN4core9panicking5panic17h12e60b9063f6dee8E
	int3
```

# Fix Details:
Cache the `DISubprogram` emitted for each inlined function instance within a caller so that this can be reused if that instance is encountered again, this also requires caching the `DILexicalBlock` and `DIVariable` objects to avoid creating duplicates.

After this change the above assembly now looks like:

```
	.cv_loc	0 1 23 0                        # src\lib.rs:23:0
	addq	$40, %rsp
	retq
	.cv_inline_site_id 5 within 0 inlined_at 1 0 0
	.cv_inline_site_id 6 within 5 inlined_at 1 12 0
	.cv_loc	6 2 935 0                       # library\core\src\option.rs:935:0
	leaq	.Lalloc_5f55955de67e57c79064b537689facea(%rip), %rcx
	leaq	.Lalloc_e741d4de8cb5801e1fd7a6c6795c1559(%rip), %r8
	movl	$43, %edx
	callq	_ZN4core9panicking5panic17hde1558f32d5b1c04E
	int3
```
2023-08-22 20:15:29 +00:00
..
assembly Auto merge of #112922 - g0djan:godjan/wasi-threads, r=wesleywiser 2023-08-02 01:01:48 +00:00
auxiliary
codegen Auto merge of #114643 - dpaoliello:inlinedebuginfo, r=wesleywiser 2023-08-22 20:15:29 +00:00
codegen-units
debuginfo Replace ignore-everything with only-arch 2023-07-29 15:49:07 -07:00
incremental Forbid old-style simd_shuffleN intrinsics 2023-08-03 09:29:00 +00:00
mir-opt Auto merge of #113124 - nbdd0121:eh_frame, r=cjgillot 2023-08-20 09:58:52 +00:00
pretty
run-coverage coverage: Anonymize line numbers in run-coverage test snapshots 2023-08-17 10:03:32 +10:00
run-coverage-rustdoc coverage: Anonymize line numbers in run-coverage test snapshots 2023-08-17 10:03:32 +10:00
run-make Auto merge of #113124 - nbdd0121:eh_frame, r=cjgillot 2023-08-20 09:58:52 +00:00
run-make-fulldeps On nightly, dump ICE backtraces to disk 2023-07-19 14:10:07 +00:00
run-pass-valgrind
rustdoc Add check-pass tests and fix test behavior 2023-08-18 15:19:18 +08:00
rustdoc-gui Auto merge of #106561 - GuillaumeGomez:warning-block, r=rustdoc 2023-08-21 09:26:02 +00:00
rustdoc-js Auto merge of #112233 - notriddle:notriddle/search-unify, r=GuillaumeGomez 2023-06-15 03:04:46 +00:00
rustdoc-js-std Auto merge of #108537 - GuillaumeGomez:rustdoc-search-whitespace-as-separator, r=notriddle 2023-07-02 18:49:29 +00:00
rustdoc-json rustdoc-json: Add tests for field/variant ordering. 2023-08-09 00:32:03 +00:00
rustdoc-ui Add regression test for inline doc 2023-08-18 15:31:36 +08:00
ui Rollup merge of #115077 - estebank:issue-115019, r=compiler-errors 2023-08-22 09:00:49 -07:00
ui-fulldeps Bump syn dependency 2023-07-26 08:42:40 +00:00
COMPILER_TESTS.md