about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-05-15 21:46:12 +0000
committerbors <bors@rust-lang.org>2024-05-15 21:46:12 +0000
commit1871252fc8bb672d40787e67404e6eaae7059369 (patch)
tree98a3d66badad4be194a44b257ce500b6eda2aa41
parentb21b74b5e673b9102502e8f69f378313d901746c (diff)
parent734a1099982b83d2edcac5ae58eb9e2bf384467f (diff)
downloadrust-1871252fc8bb672d40787e67404e6eaae7059369.tar.gz
rust-1871252fc8bb672d40787e67404e6eaae7059369.zip
Auto merge of #125164 - fmease:rollup-s5vwzlg, r=fmease
Rollup of 5 pull requests

Successful merges:

 - #125003 (avoid using aligned_alloc; posix_memalign is better-behaved)
 - #125142 (Migrate `run-make/rustdoc-themes` to new rmake.rs)
 - #125146 (Migrate `run-make/panic-impl-transitive` to `rmake`)
 - #125154 (Small improvements to the documentaion of FnAbi )
 - #125159 (Meta: Allow unauthenticated users to modify `L-*`, `PG-*` and `-Z*` labels)

r? `@ghost`
`@rustbot` modify labels: rollup
-rw-r--r--compiler/rustc_target/src/abi/call/mod.rs13
-rw-r--r--library/std/src/sys/pal/unix/alloc.rs19
-rw-r--r--src/tools/run-make-support/src/lib.rs6
-rw-r--r--src/tools/tidy/src/allowed_run_make_makefiles.txt2
-rw-r--r--tests/run-make/panic-impl-transitive/Makefile7
-rw-r--r--tests/run-make/panic-impl-transitive/rmake.rs19
-rw-r--r--tests/run-make/rustdoc-scrape-examples-ordering/rmake.rs10
-rw-r--r--tests/run-make/rustdoc-themes/Makefile11
-rw-r--r--tests/run-make/rustdoc-themes/rmake.rs31
-rw-r--r--triagebot.toml3
10 files changed, 78 insertions, 43 deletions
diff --git a/compiler/rustc_target/src/abi/call/mod.rs b/compiler/rustc_target/src/abi/call/mod.rs
index 919fa2140d5..fc79c9232d1 100644
--- a/compiler/rustc_target/src/abi/call/mod.rs
+++ b/compiler/rustc_target/src/abi/call/mod.rs
@@ -779,16 +779,21 @@ impl RiscvInterruptKind {
 /// Metadata describing how the arguments to a native function
 /// should be passed in order to respect the native ABI.
 ///
+/// The signature represented by this type may not match the MIR function signature.
+/// Certain attributes, like `#[track_caller]` can introduce additional arguments, which are present in [`FnAbi`], but not in `FnSig`.
+/// While this difference is rarely relevant, it should still be kept in mind.
+///
 /// I will do my best to describe this structure, but these
 /// comments are reverse-engineered and may be inaccurate. -NDM
 #[derive(Clone, PartialEq, Eq, Hash, HashStable_Generic)]
 pub struct FnAbi<'a, Ty> {
-    /// The LLVM types of each argument.
+    /// The type, layout, and information about how each argument is passed.
     pub args: Box<[ArgAbi<'a, Ty>]>,
 
-    /// LLVM return type.
+    /// The layout, type, and the way a value is returned from this function.
     pub ret: ArgAbi<'a, Ty>,
 
+    /// Marks this function as variadic (accepting a variable number of arguments).
     pub c_variadic: bool,
 
     /// The count of non-variadic arguments.
@@ -796,9 +801,9 @@ pub struct FnAbi<'a, Ty> {
     /// Should only be different from args.len() when c_variadic is true.
     /// This can be used to know whether an argument is variadic or not.
     pub fixed_count: u32,
-
+    /// The calling convention of this function.
     pub conv: Conv,
-
+    /// Indicates if an unwind may happen across a call to this function.
     pub can_unwind: bool,
 }
 
diff --git a/library/std/src/sys/pal/unix/alloc.rs b/library/std/src/sys/pal/unix/alloc.rs
index 993bf55edcf..9014bb3782a 100644
--- a/library/std/src/sys/pal/unix/alloc.rs
+++ b/library/std/src/sys/pal/unix/alloc.rs
@@ -87,21 +87,18 @@ cfg_if::cfg_if! {
             //                                       /memory/aligned_memory.cc
             libc::memalign(layout.align(), layout.size()) as *mut u8
         }
-    } else if #[cfg(target_os = "wasi")] {
-        #[inline]
-        unsafe fn aligned_malloc(layout: &Layout) -> *mut u8 {
-            // C11 aligned_alloc requires that the size be a multiple of the alignment.
-            // Layout already checks that the size rounded up doesn't overflow isize::MAX.
-            let align = layout.align();
-            let size = layout.size().next_multiple_of(align);
-            libc::aligned_alloc(align, size) as *mut u8
-        }
     } else {
         #[inline]
         unsafe fn aligned_malloc(layout: &Layout) -> *mut u8 {
             let mut out = ptr::null_mut();
-            // posix_memalign requires that the alignment be a multiple of `sizeof(void*)`.
-            // Since these are all powers of 2, we can just use max.
+            // We prefer posix_memalign over aligned_malloc since with aligned_malloc,
+            // implementations are making almost arbitrary choices for which alignments are
+            // "supported", making it hard to use. For instance, some implementations require the
+            // size to be a multiple of the alignment (wasi emmalloc), while others require the
+            // alignment to be at least the pointer size (Illumos, macOS) -- which may or may not be
+            // standards-compliant, but that does not help us.
+            // posix_memalign only has one, clear requirement: that the alignment be a multiple of
+            // `sizeof(void*)`. Since these are all powers of 2, we can just use max.
             let align = layout.align().max(crate::mem::size_of::<usize>());
             let ret = libc::posix_memalign(&mut out, align, layout.size());
             if ret != 0 { ptr::null_mut() } else { out as *mut u8 }
diff --git a/src/tools/run-make-support/src/lib.rs b/src/tools/run-make-support/src/lib.rs
index 446afa1f82e..03b1a7efaad 100644
--- a/src/tools/run-make-support/src/lib.rs
+++ b/src/tools/run-make-support/src/lib.rs
@@ -64,6 +64,12 @@ pub fn python_command() -> Command {
     Command::new(python_path)
 }
 
+pub fn htmldocck() -> Command {
+    let mut python = python_command();
+    python.arg(source_path().join("/src/etc/htmldocck.py"));
+    python
+}
+
 pub fn source_path() -> PathBuf {
     std::env::var("S").expect("S variable does not exist").into()
 }
diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt
index b84c147395d..44c9616dbb1 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -190,7 +190,6 @@ run-make/output-with-hyphens/Makefile
 run-make/override-aliased-flags/Makefile
 run-make/overwrite-input/Makefile
 run-make/panic-abort-eh_frame/Makefile
-run-make/panic-impl-transitive/Makefile
 run-make/pass-linker-flags-flavor/Makefile
 run-make/pass-linker-flags-from-dep/Makefile
 run-make/pass-linker-flags/Makefile
@@ -243,7 +242,6 @@ run-make/rustdoc-scrape-examples-multiple/Makefile
 run-make/rustdoc-scrape-examples-remap/Makefile
 run-make/rustdoc-scrape-examples-test/Makefile
 run-make/rustdoc-scrape-examples-whitespace/Makefile
-run-make/rustdoc-themes/Makefile
 run-make/rustdoc-verify-output-files/Makefile
 run-make/rustdoc-with-out-dir-option/Makefile
 run-make/rustdoc-with-output-option/Makefile
diff --git a/tests/run-make/panic-impl-transitive/Makefile b/tests/run-make/panic-impl-transitive/Makefile
deleted file mode 100644
index 9a271a22e10..00000000000
--- a/tests/run-make/panic-impl-transitive/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-include ../tools.mk
-
-# NOTE we use --emit=llvm-ir to avoid running the linker (linking will fail because there's no main
-# in this crate)
-all:
-	$(RUSTC) panic-impl-provider.rs
-	$(RUSTC) panic-impl-consumer.rs -C panic=abort --emit=llvm-ir -L $(TMPDIR)
diff --git a/tests/run-make/panic-impl-transitive/rmake.rs b/tests/run-make/panic-impl-transitive/rmake.rs
new file mode 100644
index 00000000000..86308f593b3
--- /dev/null
+++ b/tests/run-make/panic-impl-transitive/rmake.rs
@@ -0,0 +1,19 @@
+// In Rust programs where the standard library is unavailable (#![no_std]), we may be interested
+// in customizing how panics are handled. Here, the provider specifies that panics should be handled
+// by entering an infinite loop. This test checks that this panic implementation can be transitively
+// provided by an external crate.
+// --emit=llvm-ir is used to avoid running the linker, as linking will fail due to the lack of main
+// function in the crate.
+// See https://github.com/rust-lang/rust/pull/50338
+
+use run_make_support::{rustc, tmp_dir};
+
+fn main() {
+    rustc().input("panic-impl-provider.rs").run();
+    rustc()
+        .input("panic-impl-consumer.rs")
+        .panic("abort")
+        .emit("llvm-ir")
+        .library_search_path(tmp_dir())
+        .run();
+}
diff --git a/tests/run-make/rustdoc-scrape-examples-ordering/rmake.rs b/tests/run-make/rustdoc-scrape-examples-ordering/rmake.rs
index edcf3406d47..08ca9ce5de8 100644
--- a/tests/run-make/rustdoc-scrape-examples-ordering/rmake.rs
+++ b/tests/run-make/rustdoc-scrape-examples-ordering/rmake.rs
@@ -1,4 +1,4 @@
-use run_make_support::{python_command, rustc, rustdoc, source_path, tmp_dir};
+use run_make_support::{htmldocck, rustc, rustdoc, source_path, tmp_dir};
 use std::fs::read_dir;
 use std::path::Path;
 
@@ -45,11 +45,5 @@ fn main() {
     }
     rustdoc.run();
 
-    python_command()
-        .arg(source_path().join("/src/etc/htmldocck.py"))
-        .arg(out_dir)
-        .arg("src/lib.rs")
-        .status()
-        .unwrap()
-        .success();
+    htmldocck().arg(out_dir).arg("src/lib.rs").status().unwrap().success();
 }
diff --git a/tests/run-make/rustdoc-themes/Makefile b/tests/run-make/rustdoc-themes/Makefile
deleted file mode 100644
index a4980eb0b3e..00000000000
--- a/tests/run-make/rustdoc-themes/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-include ../tools.mk
-
-# Test that rustdoc will properly load in a theme file and display it in the theme selector.
-
-OUTPUT_DIR := "$(TMPDIR)/rustdoc-themes"
-
-all:
-	awk '/Begin theme: light/ {in_theme=1;next} /End theme:/ {in_theme=0} { if (in_theme) print }' \
-		< '$(S)/src/librustdoc/html/static/css/noscript.css' > '$(TMPDIR)/test.css'
-	$(RUSTDOC) -o $(OUTPUT_DIR) foo.rs --theme $(TMPDIR)/test.css
-	$(HTMLDOCCK) $(OUTPUT_DIR) foo.rs
diff --git a/tests/run-make/rustdoc-themes/rmake.rs b/tests/run-make/rustdoc-themes/rmake.rs
new file mode 100644
index 00000000000..1d7dfe6bb2a
--- /dev/null
+++ b/tests/run-make/rustdoc-themes/rmake.rs
@@ -0,0 +1,31 @@
+// Test that rustdoc will properly load in a theme file and display it in the theme selector.
+
+use run_make_support::{htmldocck, rustdoc, source_path, tmp_dir};
+
+fn main() {
+    let out_dir = tmp_dir().join("rustdoc-themes");
+    let test_css = out_dir.join("test.css");
+
+    let no_script =
+        std::fs::read_to_string(source_path().join("src/librustdoc/html/static/css/noscript.css"))
+            .unwrap();
+
+    let mut test_content = String::new();
+    let mut found_begin_light = false;
+    for line in no_script.split('\n') {
+        if line == "/* Begin theme: light */" {
+            found_begin_light = true;
+        } else if line == "/* End theme: light */" {
+            break;
+        } else if found_begin_light {
+            test_content.push_str(line);
+            test_content.push('\n');
+        }
+    }
+    assert!(!test_content.is_empty());
+    std::fs::create_dir_all(&out_dir).unwrap();
+    std::fs::write(&test_css, test_content).unwrap();
+
+    rustdoc().output(&out_dir).input("foo.rs").arg("--theme").arg(&test_css).run();
+    htmldocck().arg(out_dir).arg("foo.rs").status().unwrap().success();
+}
diff --git a/triagebot.toml b/triagebot.toml
index ddab6701786..80820d2f297 100644
--- a/triagebot.toml
+++ b/triagebot.toml
@@ -9,11 +9,14 @@ allow-unauthenticated = [
     "E-*",
     "F-*",
     "I-*",
+    "L-*",
     "NLL-*",
     "O-*",
+    "PG-*",
     "S-*",
     "T-*",
     "WG-*",
+    "-Z*",
     "beta-nominated",
     "const-hack",
     "llvm-*",