diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2017-10-11 08:47:47 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2017-10-11 17:12:29 -0700 |
| commit | 5d415e8d080792615b424f3f0a931058519879b5 (patch) | |
| tree | 4f3742e49ab9837e3c9609d6d2f8b24cb4875e62 /src/test | |
| parent | a47c9f870f13603a06ffe63ab4834fc716912843 (diff) | |
| download | rust-5d415e8d080792615b424f3f0a931058519879b5.tar.gz rust-5d415e8d080792615b424f3f0a931058519879b5.zip | |
rustc: Handle #[inline(always)] at -O0
This commit updates the handling of `#[inline(always)]` functions at -O0 to ensure that it's always inlined regardless of the number of codegen units used. Closes #45201
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/codegen-units/partitioning/local-inlining-but-not-all.rs | 2 | ||||
| -rw-r--r-- | src/test/run-make/inline-always-many-cgu/Makefile | 8 | ||||
| -rw-r--r-- | src/test/run-make/inline-always-many-cgu/foo.rs | 25 |
3 files changed, 34 insertions, 1 deletions
diff --git a/src/test/codegen-units/partitioning/local-inlining-but-not-all.rs b/src/test/codegen-units/partitioning/local-inlining-but-not-all.rs index ccc8f03a40f..84464a627be 100644 --- a/src/test/codegen-units/partitioning/local-inlining-but-not-all.rs +++ b/src/test/codegen-units/partitioning/local-inlining-but-not-all.rs @@ -20,7 +20,7 @@ mod inline { //~ TRANS_ITEM fn local_inlining_but_not_all::inline[0]::inlined_function[0] @@ local_inlining_but_not_all-inline[External] - #[inline(always)] + #[inline] pub fn inlined_function() { diff --git a/src/test/run-make/inline-always-many-cgu/Makefile b/src/test/run-make/inline-always-many-cgu/Makefile new file mode 100644 index 00000000000..edf88a6327c --- /dev/null +++ b/src/test/run-make/inline-always-many-cgu/Makefile @@ -0,0 +1,8 @@ +-include ../tools.mk + +all: + $(RUSTC) foo.rs --emit llvm-ir -C codegen-units=2 + if grep -w call $(TMPDIR)/*.ll; then \ + echo "found call instruction when one wasn't expected"; \ + exit 1; \ + fi diff --git a/src/test/run-make/inline-always-many-cgu/foo.rs b/src/test/run-make/inline-always-many-cgu/foo.rs new file mode 100644 index 00000000000..539dcdfa9b3 --- /dev/null +++ b/src/test/run-make/inline-always-many-cgu/foo.rs @@ -0,0 +1,25 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub mod a { + #[inline(always)] + pub fn foo() { + } + + pub fn bar() { + } +} + +#[no_mangle] +pub fn bar() { + a::foo(); +} |
