]> git.lizzy.rs Git - rust.git/commitdiff
Add tests
authorTicki <Ticki@users.noreply.github.com>
Mon, 21 Mar 2016 20:13:50 +0000 (21:13 +0100)
committerTicki <Ticki@users.noreply.github.com>
Tue, 22 Mar 2016 08:58:23 +0000 (09:58 +0100)
src/libsyntax/feature_gate.rs
src/test/codegen/naked-functions.rs [new file with mode: 0644]

index ebd8db1b25ccb6d37280b9c8d7ce6bdf1b5822fd..698913be292adbc6de6f0b1fdc5789e8c40b25e1 100644 (file)
     // rust runtime internal
     ("unwind_attributes", "1.4.0", None, Active),
 
-       // allow the use of `#[naked]` on functions.
+    // allow the use of `#[naked]` on functions.
     ("naked_functions", "1.9.0", None, Active),
 
     // allow empty structs and enum variants with braces
diff --git a/src/test/codegen/naked-functions.rs b/src/test/codegen/naked-functions.rs
new file mode 100644 (file)
index 0000000..0a600f4
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2015 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.
+
+// ignore-tidy-linelength
+
+// compile-flags: -C no-prepopulate-passes
+
+#![crate_type = "lib"]
+#![feature(naked_functions)]
+
+// CHECK: Function Attrs: naked uwtable
+// CHECK-NEXT: define internal void @naked_empty()
+#[no_mangle]
+#[naked]
+fn naked_empty() {
+    // CHECK: ret void
+}
+
+// CHECK: Function Attrs: naked uwtable
+#[no_mangle]
+#[naked]
+// CHECK-NEXT: define internal void @naked_with_args(i{{[0-9]+}})
+fn naked_with_args(a: isize) {
+    // CHECK: %a = alloca i{{[0-9]+}}
+    // CHECK: ret void
+}
+
+// CHECK: Function Attrs: naked uwtable
+// CHECK-NEXT: define internal i{{[0-9]+}} @naked_with_return()
+#[no_mangle]
+#[naked]
+fn naked_with_return() -> isize {
+    // CHECK: ret i{{[0-9]+}} 0
+    0
+}
+
+// CHECK: Function Attrs: naked uwtable
+// CHECK-NEXT: define internal i{{[0-9]+}} @naked_with_args_and_return(i{{[0-9]+}})
+#[no_mangle]
+#[naked]
+fn naked_with_args_and_return(a: isize) -> isize {
+    // CHECK: %a = alloca i{{[0-9]+}}
+    // CHECK: ret i{{[0-9]+}} %{{[0-9]+}}
+    a
+}
+
+// CHECK: Function Attrs: naked uwtable
+// CHECK-NEXT: define internal void @naked_recursive()
+#[no_mangle]
+#[naked]
+fn naked_recursive() {
+    // CHECK: call void @naked_empty()
+    naked_empty();
+    // CHECK: %{{[0-9]+}} = call i{{[0-9]+}} @naked_with_return()
+    naked_with_args(
+        // CHECK: %{{[0-9]+}} = call i{{[0-9]+}} @naked_with_args_and_return(i{{[0-9]+}} %{{[0-9]+}})
+        naked_with_args_and_return(
+            // CHECK: call void @naked_with_args(i{{[0-9]+}} %{{[0-9]+}})
+            naked_with_return()
+        )
+    );
+}