Skip to content

Commit

Permalink
Generate dead code-coverage functions with private/default
Browse files Browse the repository at this point in the history
  • Loading branch information
wesleywiser authored and Ubuntu committed Dec 3, 2021
1 parent 1c02878 commit 5aa4f7a
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 2 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_codegen_llvm/src/coverageinfo/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,8 @@ fn declare_unused_fn(cx: &CodegenCx<'ll, 'tcx>, def_id: &DefId) -> Instance<'tcx
),
);

llvm::set_linkage(llfn, llvm::Linkage::WeakAnyLinkage);
llvm::set_visibility(llfn, llvm::Visibility::Hidden);
llvm::set_linkage(llfn, llvm::Linkage::PrivateLinkage);
llvm::set_visibility(llfn, llvm::Visibility::Default);

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

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
../coverage/issue-85461.rs:
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| 1|fn main() {
8| 1| bar::call_me();
9| 1| baz::call_me();
10| 1|}

../coverage/lib/inline_always_with_dead_code.rs:
1| |// compile-flags: -Zinstrument-coverage -Ccodegen-units=4 -Copt-level=0
2| |
3| |#![allow(dead_code)]
4| |
5| |mod foo {
6| | #[inline(always)]
7| 2| pub fn called() { }
8| |
9| 0| fn uncalled() { }
10| |}
11| |
12| |pub mod bar {
13| 1| pub fn call_me() {
14| 1| super::foo::called();
15| 1| }
16| |}
17| |
18| |pub mod baz {
19| 1| pub fn call_me() {
20| 1| super::foo::called();
21| 1| }
22| |}

10 changes: 10 additions & 0 deletions src/test/run-make-fulldeps/coverage/issue-85461.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Regression test for #85461: MSVC sometimes fail to link with dead code and #[inline(always)]

extern crate inline_always_with_dead_code;

use inline_always_with_dead_code::{bar, baz};

fn main() {
bar::call_me();
baz::call_me();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// compile-flags: -Zinstrument-coverage -Ccodegen-units=4 -Copt-level=0

#![allow(dead_code)]

mod foo {
#[inline(always)]
pub fn called() { }

fn uncalled() { }
}

pub mod bar {
pub fn call_me() {
super::foo::called();
}
}

pub mod baz {
pub fn call_me() {
super::foo::called();
}
}
23 changes: 23 additions & 0 deletions src/test/ui/issues/issue-85461.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// compile-flags: -Zinstrument-coverage -Ccodegen-units=4 --crate-type dylib -Copt-level=0
// build-pass

#![allow(dead_code)]

mod foo {
#[inline(always)]
pub fn called() { }

fn uncalled() { }
}

pub mod bar {
pub fn call_me() {
super::foo::called();
}
}

pub mod baz {
pub fn call_me() {
super::foo::called();
}
}

0 comments on commit 5aa4f7a

Please sign in to comment.