Skip to content

Commit 5aa4f7a

Browse files
wesleywiserUbuntu
authored and
Ubuntu
committed
Generate dead code-coverage functions with private/default
1 parent 1c02878 commit 5aa4f7a

File tree

5 files changed

+93
-2
lines changed

5 files changed

+93
-2
lines changed

compiler/rustc_codegen_llvm/src/coverageinfo/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,8 @@ fn declare_unused_fn(cx: &CodegenCx<'ll, 'tcx>, def_id: &DefId) -> Instance<'tcx
212212
),
213213
);
214214

215-
llvm::set_linkage(llfn, llvm::Linkage::WeakAnyLinkage);
216-
llvm::set_visibility(llfn, llvm::Visibility::Hidden);
215+
llvm::set_linkage(llfn, llvm::Linkage::PrivateLinkage);
216+
llvm::set_visibility(llfn, llvm::Visibility::Default);
217217

218218
assert!(cx.instances.borrow_mut().insert(instance, llfn).is_none());
219219

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
../coverage/issue-85461.rs:
2+
1| |// Regression test for #85461: MSVC sometimes fail to link with dead code and #[inline(always)]
3+
2| |
4+
3| |extern crate inline_always_with_dead_code;
5+
4| |
6+
5| |use inline_always_with_dead_code::{bar, baz};
7+
6| |
8+
7| 1|fn main() {
9+
8| 1| bar::call_me();
10+
9| 1| baz::call_me();
11+
10| 1|}
12+
13+
../coverage/lib/inline_always_with_dead_code.rs:
14+
1| |// compile-flags: -Zinstrument-coverage -Ccodegen-units=4 -Copt-level=0
15+
2| |
16+
3| |#![allow(dead_code)]
17+
4| |
18+
5| |mod foo {
19+
6| | #[inline(always)]
20+
7| 2| pub fn called() { }
21+
8| |
22+
9| 0| fn uncalled() { }
23+
10| |}
24+
11| |
25+
12| |pub mod bar {
26+
13| 1| pub fn call_me() {
27+
14| 1| super::foo::called();
28+
15| 1| }
29+
16| |}
30+
17| |
31+
18| |pub mod baz {
32+
19| 1| pub fn call_me() {
33+
20| 1| super::foo::called();
34+
21| 1| }
35+
22| |}
36+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Regression test for #85461: MSVC sometimes fail to link with dead code and #[inline(always)]
2+
3+
extern crate inline_always_with_dead_code;
4+
5+
use inline_always_with_dead_code::{bar, baz};
6+
7+
fn main() {
8+
bar::call_me();
9+
baz::call_me();
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// compile-flags: -Zinstrument-coverage -Ccodegen-units=4 -Copt-level=0
2+
3+
#![allow(dead_code)]
4+
5+
mod foo {
6+
#[inline(always)]
7+
pub fn called() { }
8+
9+
fn uncalled() { }
10+
}
11+
12+
pub mod bar {
13+
pub fn call_me() {
14+
super::foo::called();
15+
}
16+
}
17+
18+
pub mod baz {
19+
pub fn call_me() {
20+
super::foo::called();
21+
}
22+
}

src/test/ui/issues/issue-85461.rs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// compile-flags: -Zinstrument-coverage -Ccodegen-units=4 --crate-type dylib -Copt-level=0
2+
// build-pass
3+
4+
#![allow(dead_code)]
5+
6+
mod foo {
7+
#[inline(always)]
8+
pub fn called() { }
9+
10+
fn uncalled() { }
11+
}
12+
13+
pub mod bar {
14+
pub fn call_me() {
15+
super::foo::called();
16+
}
17+
}
18+
19+
pub mod baz {
20+
pub fn call_me() {
21+
super::foo::called();
22+
}
23+
}

0 commit comments

Comments
 (0)