$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|      1|    // Initialize test constants in a way that cannot be determined at compile time, to ensure
   LL|      1|    // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
   LL|      1|    // 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|      1|    // Initialize test constants in a way that cannot be determined at compile time, to ensure
   LL|      1|    // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
   LL|      1|    // 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|      2|        "used from library used_crate.rs",
   LL|      2|    );
   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|      1|        "interesting?",
   LL|      1|    );
   LL|      1|}

