$DIR/auxiliary/used_inline_crate.rs:
   LL|       |#![allow(unused_assignments, unused_variables)]
   LL|       |// Verify that coverage works with optimizations:
   LL|       |//@ compile-flags: -C opt-level=3
   LL|       |
   LL|       |use std::fmt::Debug;
   LL|       |
   LL|      1|pub fn used_function() {
   LL|       |    // Initialize test constants in a way that cannot be determined at compile time, to ensure
   LL|       |    // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
   LL|       |    // dependent conditions.
   LL|      1|    let is_true = std::env::args().len() == 1;
   LL|      1|    let mut countdown = 0;
   LL|      1|    if is_true {
   LL|      1|        countdown = 10;
   LL|      1|    }
                  ^0
   LL|      1|    use_this_lib_crate();
   LL|      1|}
   LL|       |
   LL|       |#[inline(always)]
   LL|      1|pub fn used_inline_function() {
   LL|       |    // Initialize test constants in a way that cannot be determined at compile time, to ensure
   LL|       |    // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
   LL|       |    // dependent conditions.
   LL|      1|    let is_true = std::env::args().len() == 1;
   LL|      1|    let mut countdown = 0;
   LL|      1|    if is_true {
   LL|      1|        countdown = 10;
   LL|      1|    }
                  ^0
   LL|      1|    use_this_lib_crate();
   LL|      1|}
   LL|       |
   LL|       |#[inline(always)]
   LL|      2|pub fn used_only_from_bin_crate_generic_function<T: Debug>(arg: T) {
   LL|      2|    println!("used_only_from_bin_crate_generic_function with {arg:?}");
   LL|      2|}
  ------------------
  | Unexecuted instantiation: used_inline_crate::used_only_from_bin_crate_generic_function::<_>
  ------------------
  | used_inline_crate::used_only_from_bin_crate_generic_function::<&alloc::vec::Vec<i32>>:
  |   LL|      1|pub fn used_only_from_bin_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      1|    println!("used_only_from_bin_crate_generic_function with {arg:?}");
  |   LL|      1|}
  ------------------
  | used_inline_crate::used_only_from_bin_crate_generic_function::<&str>:
  |   LL|      1|pub fn used_only_from_bin_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      1|    println!("used_only_from_bin_crate_generic_function with {arg:?}");
  |   LL|      1|}
  ------------------
   LL|       |// Expect for above function: `Unexecuted instantiation` (see notes in `used_crate.rs`)
   LL|       |
   LL|       |#[inline(always)]
   LL|      4|pub fn used_only_from_this_lib_crate_generic_function<T: Debug>(arg: T) {
   LL|      4|    println!("used_only_from_this_lib_crate_generic_function with {arg:?}");
   LL|      4|}
  ------------------
  | used_inline_crate::used_only_from_this_lib_crate_generic_function::<&str>:
  |   LL|      2|pub fn used_only_from_this_lib_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      2|    println!("used_only_from_this_lib_crate_generic_function with {arg:?}");
  |   LL|      2|}
  ------------------
  | used_inline_crate::used_only_from_this_lib_crate_generic_function::<alloc::vec::Vec<i32>>:
  |   LL|      2|pub fn used_only_from_this_lib_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      2|    println!("used_only_from_this_lib_crate_generic_function with {arg:?}");
  |   LL|      2|}
  ------------------
   LL|       |
   LL|       |#[inline(always)]
   LL|      3|pub fn used_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) {
   LL|      3|    println!("used_from_bin_crate_and_lib_crate_generic_function with {arg:?}");
   LL|      3|}
  ------------------
  | used_inline_crate::used_from_bin_crate_and_lib_crate_generic_function::<&str>:
  |   LL|      2|pub fn used_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      2|    println!("used_from_bin_crate_and_lib_crate_generic_function with {arg:?}");
  |   LL|      2|}
  ------------------
  | used_inline_crate::used_from_bin_crate_and_lib_crate_generic_function::<alloc::vec::Vec<i32>>:
  |   LL|      1|pub fn used_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      1|    println!("used_from_bin_crate_and_lib_crate_generic_function with {arg:?}");
  |   LL|      1|}
  ------------------
   LL|       |
   LL|       |#[inline(always)]
   LL|      3|pub fn used_with_same_type_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) {
   LL|      3|    println!("used_with_same_type_from_bin_crate_and_lib_crate_generic_function with {arg:?}");
   LL|      3|}
  ------------------
  | used_inline_crate::used_with_same_type_from_bin_crate_and_lib_crate_generic_function::<&str>:
  |   LL|      1|pub fn used_with_same_type_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      1|    println!("used_with_same_type_from_bin_crate_and_lib_crate_generic_function with {arg:?}");
  |   LL|      1|}
  ------------------
  | used_inline_crate::used_with_same_type_from_bin_crate_and_lib_crate_generic_function::<&str>:
  |   LL|      2|pub fn used_with_same_type_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) {
  |   LL|      2|    println!("used_with_same_type_from_bin_crate_and_lib_crate_generic_function with {arg:?}");
  |   LL|      2|}
  ------------------
   LL|       |
   LL|       |#[inline(always)]
   LL|      0|pub fn unused_generic_function<T: Debug>(arg: T) {
   LL|      0|    println!("unused_generic_function with {arg:?}");
   LL|      0|}
   LL|       |
   LL|       |#[inline(always)]
   LL|      0|pub fn unused_function() {
   LL|      0|    let is_true = std::env::args().len() == 1;
   LL|      0|    let mut countdown = 2;
   LL|      0|    if !is_true {
   LL|      0|        countdown = 20;
   LL|      0|    }
   LL|      0|}
   LL|       |
   LL|       |#[inline(always)]
   LL|       |#[allow(dead_code)]
   LL|      0|fn unused_private_function() {
   LL|      0|    let is_true = std::env::args().len() == 1;
   LL|      0|    let mut countdown = 2;
   LL|      0|    if !is_true {
   LL|      0|        countdown = 20;
   LL|      0|    }
   LL|      0|}
   LL|       |
   LL|      2|fn use_this_lib_crate() {
   LL|      2|    used_from_bin_crate_and_lib_crate_generic_function("used from library used_crate.rs");
   LL|      2|    used_with_same_type_from_bin_crate_and_lib_crate_generic_function(
   LL|       |        "used from library used_crate.rs",
   LL|       |    );
   LL|      2|    let some_vec = vec![5, 6, 7, 8];
   LL|      2|    used_only_from_this_lib_crate_generic_function(some_vec);
   LL|      2|    used_only_from_this_lib_crate_generic_function("used ONLY from library used_crate.rs");
   LL|      2|}

$DIR/uses_inline_crate.rs:
   LL|       |// This test was failing on Linux for a while due to #110393 somehow making
   LL|       |// the unused functions not instrumented, but it seems to be fine now.
   LL|       |
   LL|       |// Validates coverage now works with optimizations
   LL|       |//@ compile-flags: -C opt-level=3
   LL|       |
   LL|       |#![allow(unused_assignments, unused_variables)]
   LL|       |
   LL|       |//@ aux-build:used_inline_crate.rs
   LL|       |extern crate used_inline_crate;
   LL|       |
   LL|      1|fn main() {
   LL|      1|    used_inline_crate::used_function();
   LL|      1|    used_inline_crate::used_inline_function();
   LL|      1|    let some_vec = vec![1, 2, 3, 4];
   LL|      1|    used_inline_crate::used_only_from_bin_crate_generic_function(&some_vec);
   LL|      1|    used_inline_crate::used_only_from_bin_crate_generic_function("used from bin uses_crate.rs");
   LL|      1|    used_inline_crate::used_from_bin_crate_and_lib_crate_generic_function(some_vec);
   LL|      1|    used_inline_crate::used_with_same_type_from_bin_crate_and_lib_crate_generic_function(
   LL|       |        "interesting?",
   LL|       |    );
   LL|      1|}

