if the system linker is not used then specifying custom flags
doesn't have much meaning.
+* `link_llvm_intrinsics` – Allows linking to LLVM intrinsics via
+ `#[link_name="llvm.*"]`.
+
* `linkage` - Allows use of the `linkage` attribute, which is not portable.
* `log_syntax` - Allows use of the `log_syntax` macro attribute, which is a
stack. If a value with a destructor is freed during unwinding, the code for the
destructor is run, also on the thread's control stack. Running the destructor
code causes a temporary transition to a *running* state, and allows the
-destructor code to cause any subsequent state transitions. The original thread
+destructor code to cause any subsequent state transitions. The original thread
of unwinding and panicking thereby may suspend temporarily, and may involve
(recursive) unwinding of the stack of a failed destructor. Nonetheless, the
outermost unwinding activity will continue until the stack is unwound and the
-thread transitions to the *dead* state. There is no way to "recover" from thread
+thread transitions to the *dead* state. There is no way to "recover" from thread
panics. Once a thread has temporarily suspended its unwinding in the *panicking*
state, a panic occurring from within this destructor results in *hard* panic.
A hard panic currently results in the process aborting.
("simd", Active),
("default_type_params", Active),
("quote", Active),
+ ("link_llvm_intrinsics", Active),
("linkage", Active),
("struct_inherit", Removed),
"the `linkage` attribute is experimental \
and not portable across platforms")
}
+
+ let links_to_llvm = match attr::first_attr_value_str_by_name(i.attrs[], "link_name") {
+ Some(val) => val.get().starts_with("llvm."),
+ _ => false
+ };
+ if links_to_llvm {
+ self.gate_feature("link_llvm_intrinsics", i.span,
+ "linking to LLVM intrinsics is experimental");
+ }
+
visit::walk_foreign_item(self, i)
}
--- /dev/null
+// Copyright 2014 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.
+
+extern {
+ #[link_name = "llvm.sqrt.f32"]
+ fn sqrt(x: f32) -> f32; //~ ERROR linking to LLVM intrinsics is experimental
+}
+
+fn main(){
+}
--- /dev/null
+// Copyright 2014 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.
+#![feature(link_llvm_intrinsics)]
+
+extern {
+ #[link_name = "llvm.sqrt.f32"]
+ fn sqrt(x: f32) -> f32;
+}
+
+fn main(){
+}