about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-12-29 00:38:26 +0000
committerbors <bors@rust-lang.org>2024-12-29 00:38:26 +0000
commit0b63477350d8b5d49b86e4f4aedf066b0a5846c0 (patch)
tree45385c4163419fd28ae591cc99dacadfe4a39111
parentb76036c88c1fa7b63f412e777e185336848c52d6 (diff)
parent0a52407d4301e0bd38685058c24f51e287dce22c (diff)
downloadrust-0b63477350d8b5d49b86e4f4aedf066b0a5846c0.tar.gz
rust-0b63477350d8b5d49b86e4f4aedf066b0a5846c0.zip
Auto merge of #134864 - Zalathar:rollup-suc8ay9, r=Zalathar
Rollup of 3 pull requests

Successful merges:

 - #134849 (compiletest: Slightly simplify the handling of debugger directive prefixes)
 - #134850 (Document virality of `feature(rustc_private)`)
 - #134852 (Added a codegen test for optimization with const arrays)

r? `@ghost`
`@rustbot` modify labels: rollup
-rw-r--r--src/doc/unstable-book/src/language-features/rustc-private.md7
-rw-r--r--src/tools/compiletest/src/runtest/debugger.rs25
-rw-r--r--src/tools/compiletest/src/runtest/debuginfo.rs12
-rw-r--r--tests/codegen/const-array.rs15
4 files changed, 31 insertions, 28 deletions
diff --git a/src/doc/unstable-book/src/language-features/rustc-private.md b/src/doc/unstable-book/src/language-features/rustc-private.md
index 97fce5980e4..3b83a3cf4df 100644
--- a/src/doc/unstable-book/src/language-features/rustc-private.md
+++ b/src/doc/unstable-book/src/language-features/rustc-private.md
@@ -6,6 +6,9 @@ The tracking issue for this feature is: [#27812]
 
 ------------------------
 
-This feature allows access to unstable internal compiler crates.
+This feature allows access to unstable internal compiler crates such as `rustc_driver`.
 
-Additionally it changes the linking behavior of crates which have this feature enabled. It will prevent linking to a dylib if there's a static variant of it already statically linked into another dylib dependency. This is required to successfully link to `rustc_driver`.
+The presence of this feature changes the way the linkage format for dylibs is calculated in a way
+that is necessary for linking against dylibs that statically link `std` (such as `rustc_driver`).
+This makes this feature "viral" in linkage; its use in a given crate makes its use required in
+dependent crates which link to it (including integration tests, which are built as separate crates).
diff --git a/src/tools/compiletest/src/runtest/debugger.rs b/src/tools/compiletest/src/runtest/debugger.rs
index c15422fb6f6..d9e5c3fa0d8 100644
--- a/src/tools/compiletest/src/runtest/debugger.rs
+++ b/src/tools/compiletest/src/runtest/debugger.rs
@@ -19,15 +19,9 @@ pub(super) struct DebuggerCommands {
 }
 
 impl DebuggerCommands {
-    pub fn parse_from(
-        file: &Path,
-        config: &Config,
-        debugger_prefixes: &[&str],
-    ) -> Result<Self, String> {
-        let directives = debugger_prefixes
-            .iter()
-            .map(|prefix| (format!("{prefix}-command"), format!("{prefix}-check")))
-            .collect::<Vec<_>>();
+    pub fn parse_from(file: &Path, config: &Config, debugger_prefix: &str) -> Result<Self, String> {
+        let command_directive = format!("{debugger_prefix}-command");
+        let check_directive = format!("{debugger_prefix}-check");
 
         let mut breakpoint_lines = vec![];
         let mut commands = vec![];
@@ -48,14 +42,11 @@ impl DebuggerCommands {
                 continue;
             };
 
-            for &(ref command_directive, ref check_directive) in &directives {
-                config
-                    .parse_name_value_directive(&line, command_directive)
-                    .map(|cmd| commands.push(cmd));
-
-                config
-                    .parse_name_value_directive(&line, check_directive)
-                    .map(|cmd| check_lines.push((line_no, cmd)));
+            if let Some(command) = config.parse_name_value_directive(&line, &command_directive) {
+                commands.push(command);
+            }
+            if let Some(pattern) = config.parse_name_value_directive(&line, &check_directive) {
+                check_lines.push((line_no, pattern));
             }
         }
 
diff --git a/src/tools/compiletest/src/runtest/debuginfo.rs b/src/tools/compiletest/src/runtest/debuginfo.rs
index c621c22ac99..b236b067569 100644
--- a/src/tools/compiletest/src/runtest/debuginfo.rs
+++ b/src/tools/compiletest/src/runtest/debuginfo.rs
@@ -59,14 +59,8 @@ impl TestCx<'_> {
             return;
         }
 
-        let prefixes = {
-            static PREFIXES: &[&str] = &["cdb", "cdbg"];
-            // No "native rust support" variation for CDB yet.
-            PREFIXES
-        };
-
         // Parse debugger commands etc from test files
-        let dbg_cmds = DebuggerCommands::parse_from(&self.testpaths.file, self.config, prefixes)
+        let dbg_cmds = DebuggerCommands::parse_from(&self.testpaths.file, self.config, "cdb")
             .unwrap_or_else(|e| self.fatal(&e));
 
         // https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-commands
@@ -137,7 +131,7 @@ impl TestCx<'_> {
     }
 
     fn run_debuginfo_gdb_test_no_opt(&self) {
-        let dbg_cmds = DebuggerCommands::parse_from(&self.testpaths.file, self.config, &["gdb"])
+        let dbg_cmds = DebuggerCommands::parse_from(&self.testpaths.file, self.config, "gdb")
             .unwrap_or_else(|e| self.fatal(&e));
         let mut cmds = dbg_cmds.commands.join("\n");
 
@@ -403,7 +397,7 @@ impl TestCx<'_> {
         }
 
         // Parse debugger commands etc from test files
-        let dbg_cmds = DebuggerCommands::parse_from(&self.testpaths.file, self.config, &["lldb"])
+        let dbg_cmds = DebuggerCommands::parse_from(&self.testpaths.file, self.config, "lldb")
             .unwrap_or_else(|e| self.fatal(&e));
 
         // Write debugger script:
diff --git a/tests/codegen/const-array.rs b/tests/codegen/const-array.rs
new file mode 100644
index 00000000000..f2b331c315d
--- /dev/null
+++ b/tests/codegen/const-array.rs
@@ -0,0 +1,15 @@
+//@ compile-flags: -O
+
+#![crate_type = "lib"]
+
+const LUT: [u8; 2] = [1, 1];
+
+// CHECK-LABEL: @decode
+#[no_mangle]
+pub fn decode(i: u8) -> u8 {
+    // CHECK: start:
+    // CHECK-NEXT: icmp
+    // CHECK-NEXT: select
+    // CHECK-NEXT: ret
+    if i < 2 { LUT[i as usize] } else { 2 }
+}