diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2017-08-22 14:36:49 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2017-08-28 08:06:52 -0700 |
| commit | b6f554b6dc972608761db93a375bcb0e89155e1d (patch) | |
| tree | 4543e921c025346532151af3a5ec8ae5b8666447 /src/test/codegen | |
| parent | a24e0f25d7a0ac793b37eb4db353d5f9f2befc97 (diff) | |
| download | rust-b6f554b6dc972608761db93a375bcb0e89155e1d.tar.gz rust-b6f554b6dc972608761db93a375bcb0e89155e1d.zip | |
std: Mark allocation functions as nounwind
This commit flags all allocation-related functions in liballoc as "this can't unwind" which should largely resolve the size-related issues found on #42808. The documentation on the trait was updated with such a restriction (they can't panic) as well as some other words about the relative instability about implementing a bullet-proof allocator. Closes #42808
Diffstat (limited to 'src/test/codegen')
| -rw-r--r-- | src/test/codegen/dealloc-no-unwind.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/codegen/dealloc-no-unwind.rs b/src/test/codegen/dealloc-no-unwind.rs new file mode 100644 index 00000000000..551b66e103a --- /dev/null +++ b/src/test/codegen/dealloc-no-unwind.rs @@ -0,0 +1,32 @@ +// 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. +// +// no-system-llvm +// compile-flags: -O + +#![crate_type="lib"] + +struct A; + +impl Drop for A { + fn drop(&mut self) { + extern { fn foo(); } + unsafe { foo(); } + } +} + +#[no_mangle] +pub fn a(a: Box<i32>) { + // CHECK-LABEL: define void @a + // CHECK: call void @__rust_dealloc + // CHECK-NEXT: call void @foo + let _a = A; + drop(a); +} |
