Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kcov is reporting 100% for Rust lib even though some methods are not covered

Tags:

rust

kcov

I'm trying to add code coverage to my rust library. It's reporting that it is covered 100%, but when I look at the report a lot of lines are not counted: https://codecov.io/gh/JelteF/defaultmap/src/c878e108c61f270718c909e1500c4c2e865a33d1/src/lib.rs#L93...106

What is the reason for this and is it possible to fix this? I have already tried setting RUSTFLAGS to "-C link-dead-code" as suggested in this answer: https://stackoverflow.com/a/38371687/2570866 That didn't help however.

like image 419
JelteF Avatar asked Apr 23 '17 03:04

JelteF


1 Answers

This is a known issue (https://github.com/rust-lang/rust/issues/39293), with no solutions implemented yet. Generics in Rust are similar to templates in C++, if you don't use the generic function, no code will be generated at all. Indeed those functions are not present:

$ nm target/debug/defaultmap-2fd0c3085042f647 | grep DefaultHashMap | cargo demangle
000000000002c350 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::Index<KB>>::index::h14fb5e24128b7e47
000000000002c390 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::Index<KB>>::index::h5c00e602e45f6925
000000000002c3d0 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::Index<KB>>::index::hc5dfb7b3478d945a
000000000002c420 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::IndexMut<K>>::index_mut::h8b298bf16464a070
000000000002c470 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::IndexMut<K>>::index_mut::hcc509def35f89759
000000000002bfc0 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get::h6a0f4cb5c61c67e8
000000000002c060 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get::ha5fdb528b5dd94a5
000000000002c110 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get::hc1a5643986209ba6
000000000002c1b0 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get_mut::h14f0ded6ba3206f3
000000000002c2a0 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get_mut::h6ea36d917e778099
000000000002eaf0 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::fmt::Debug>::fmt::h2cefa624bd18fcfe
000000000002e9e0 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::default::Default>::default::h0b736edcd6ac228a
000000000002ea60 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::default::Default>::default::hd09b7abe1e63b94f

I think, for now, the only practical solution is to manually inspect the coverage report, and add back missing tests for the ignored functions.

like image 135
kennytm Avatar answered Nov 15 '22 07:11

kennytm