/// Make sure that line debuginfo is correct for diverging calls under certain /// conditions. In particular we want to ensure that the line number is never /// 0, but we check the absence of 0 by looking for the expected exact line /// numbers. Regression test for . //@ compile-flags: -g -Clto -Copt-level=0 //@ no-prefer-dynamic // First find the scope of both diverge() calls, namely this main() function. // CHECK-DAG: [[MAIN_SCOPE:![0-9]+]] = distinct !DISubprogram(name: "main", linkageName: {{.*}}diverging_function_call_debuginfo{{.*}}main{{.*}} fn main() { if True == False { // unreachable // Then find the DILocation with the correct line number for this call ... // CHECK-DAG: [[UNREACHABLE_CALL_DBG:![0-9]+]] = !DILocation(line: [[@LINE+1]], {{.*}}scope: [[MAIN_SCOPE]] diverge(); } // ... and this call. // CHECK-DAG: [[LAST_CALL_DBG:![0-9]+]] = !DILocation(line: [[@LINE+1]], {{.*}}scope: [[MAIN_SCOPE]] diverge(); } #[derive(PartialEq)] pub enum MyBool { True, False, } use MyBool::*; fn diverge() -> ! { panic!(); } // Finally make sure both DILocations belong to each the respective diverge() call. // CHECK-DAG: call void {{.*}}diverging_function_call_debuginfo{{.*}}diverge{{.*}} !dbg [[LAST_CALL_DBG]] // CHECK-DAG: call void {{.*}}diverging_function_call_debuginfo{{.*}}diverge{{.*}} !dbg [[UNREACHABLE_CALL_DBG]]