Skip to content

Commit 8595fdd

Browse files
authored
Rollup merge of rust-lang#144034 - Enselic:diverging-function-call-debuginfo, r=wesleywiser
tests: Test line number in debuginfo for diverging function calls Closes rust-lang#59558 which just [E-needs-test](rust-lang#59558 (comment)). The bug seems to have been fixed in **nightly-2021-05-10**: ```sh for toolchain in nightly-2021-05-09 \ nightly-2021-05-10 \ 1.88; do echo -e "\nWith $toolchain:" rustc +$toolchain tests/codegen/diverging-function-call-debuginfo.rs --emit llvm-ir -o /tmp/out.ll -g -Clto -Copt-level=0 build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck --input-file /tmp/out.ll tests/codegen/diverging-function-call-debuginfo.rs --check-prefix=CHECK --dump-input-context 10 2>/dev/null && echo OK || echo FAIL done ``` ``` With nightly-2021-05-09: FAIL With nightly-2021-05-10: OK With 1.88: OK ``` which gives the following list of candidate commits. Not clear which one it is exactly but it doesn't matter much since we can confirm that the test works. I have confirmed locally that with **nightly-2021-05-09** we get `line: 0` for the last call. <details> <summary>click to expand</summary> ``` $ git log ^881c1ac408d93bb7adaa3a51dabab9266e82eee8 ca82264 --no-merges --oneline ``` f25aa57 Remove unused `opt_span_warn` function ebbc949 Note why `Handler::fatal` is different from `Sesssion::fatal` 96509b4 Make `Diagnostic::span_fatal` unconditionally raise an error e49f447 Remove some unnecessary uses of `struct_span_fatal` 955fdae Rename `Parser::span_fatal_err` -> `Parser::span_err` 4b7c8b0 Add `#[track_caller]` to `FakeDefId::expect_real()` ba13225 Remove `FakeDefId::expect_local()` 020d83d Enable `-W semicolon_in_expressions_from_macros` in bootstrap 1b928ff Update LLVM submodule c2b15a6 Support -C passes in NewPM 5519cbf Don't force -O1 with ThinLTO 7c4989a Drop -opt-bisect-limit=0 flag from test db140de Explicitly register GCOV profiling pass as well 5ecbe7f Explicitly register instrprof pass 0318883 Make -Z new-llvm-pass-manager an Option<bool> 0367e24 Avoid predecessors having Drop impls </details>
2 parents 8eb7ecb + dd48e56 commit 8595fdd

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/// Make sure that line debuginfo is correct for diverging calls under certain
2+
/// conditions. In particular we want to ensure that the line number is never
3+
/// 0, but we check the absence of 0 by looking for the expected exact line
4+
/// numbers. Regression test for <https://github.com/rust-lang/rust/issues/59558>.
5+
6+
//@ compile-flags: -g -Clto -Copt-level=0
7+
//@ no-prefer-dynamic
8+
9+
fn main() {
10+
if True == False {
11+
// unreachable
12+
// CHECK-DAG: [[UNREACHABLE_CALL_DBG:![0-9]+]] = !DILocation(line: [[@LINE+1]], column: 9, scope:
13+
diverge();
14+
}
15+
16+
// CHECK-DAG: [[LAST_CALL_DBG:![0-9]+]] = !DILocation(line: [[@LINE+1]], column: 5, scope:
17+
diverge();
18+
}
19+
20+
#[derive(PartialEq)]
21+
pub enum MyBool {
22+
True,
23+
False,
24+
}
25+
26+
use MyBool::*;
27+
28+
fn diverge() -> ! {
29+
panic!();
30+
}
31+
32+
// CHECK-DAG: call void {{.*}}diverging_function_call_debuginfo{{.*}}diverge{{.*}} !dbg [[LAST_CALL_DBG]]
33+
// CHECK-DAG: call void {{.*}}diverging_function_call_debuginfo{{.*}}diverge{{.*}} !dbg [[UNREACHABLE_CALL_DBG]]

0 commit comments

Comments
 (0)