[gccrs COMMIT 2/2] intrinsic: Add separated tests for each type

gerris.rs@gmail.com gerris.rs@gmail.com
Tue Mar 24 23:14:18 GMT 2026


From: Mohamed Ali <mohmedali1462005@gmail.com>

gcc/testsuite/ChangeLog:

	* rust/execute/torture/ctlz_i16.rs: New test.
	* rust/execute/torture/ctlz_i32.rs: New test.
	* rust/execute/torture/ctlz_i64.rs: New test.
	* rust/execute/torture/ctlz_i8.rs: New test.
	* rust/execute/torture/ctlz_nonzero_i16.rs: New test.
	* rust/execute/torture/ctlz_nonzero_i32.rs: New test.
	* rust/execute/torture/ctlz_nonzero_i64.rs: New test.
	* rust/execute/torture/ctlz_nonzero_i8.rs: New test.
	* rust/execute/torture/ctlz_nonzero_u16.rs: New test.
	* rust/execute/torture/ctlz_nonzero_u32.rs: New test.
	* rust/execute/torture/ctlz_nonzero_u64.rs: New test.
	* rust/execute/torture/ctlz_nonzero_u8.rs: New test.
	* rust/execute/torture/ctlz_u16.rs: New test.
	* rust/execute/torture/ctlz_u32.rs: New test.
	* rust/execute/torture/ctlz_u64.rs: New test.
	* rust/execute/torture/ctlz_u8.rs: New test.

Signed-off-by: Mohamed Ali <mohmedali1462005@gmail.com>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.


Commit on github: https://github.com/Rust-GCC/gccrs/commit/2889c50e2031a865b5704ef60f3463d0f8b05c31

The commit has been mentioned in the following pull-request(s):
 - https://github.com/Rust-GCC/gccrs/pull/4467

 .../rust/execute/torture/ctlz_i16.rs          | 28 ++++++++++++++++++
 .../rust/execute/torture/ctlz_i32.rs          | 28 ++++++++++++++++++
 .../rust/execute/torture/ctlz_i64.rs          | 28 ++++++++++++++++++
 gcc/testsuite/rust/execute/torture/ctlz_i8.rs | 29 +++++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_i16.rs  | 27 +++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_i32.rs  | 27 +++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_i64.rs  | 27 +++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_i8.rs   | 27 +++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_u16.rs  | 25 ++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_u32.rs  | 25 ++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_u64.rs  | 25 ++++++++++++++++
 .../rust/execute/torture/ctlz_nonzero_u8.rs   | 25 ++++++++++++++++
 .../rust/execute/torture/ctlz_u16.rs          | 26 +++++++++++++++++
 .../rust/execute/torture/ctlz_u32.rs          | 26 +++++++++++++++++
 .../rust/execute/torture/ctlz_u64.rs          | 26 +++++++++++++++++
 gcc/testsuite/rust/execute/torture/ctlz_u8.rs | 26 +++++++++++++++++
 16 files changed, 425 insertions(+)
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i16.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i32.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i64.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i8.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u16.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u32.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u64.rs
 create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u8.rs

diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i16.rs b/gcc/testsuite/rust/execute/torture/ctlz_i16.rs
new file mode 100644
index 000000000..90db2e531
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i16.rs
@@ -0,0 +1,28 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    if ctlz(0i16) != 16 {
+        abort();
+    }
+    // 1i16 = 0x0001: 15 leading zeros
+    if ctlz(1i16) != 15 {
+        abort();
+    }
+    // -1i16 = 0xFFFF: 0 leading zeros
+    if ctlz(-1i16) != 0 {
+        abort();
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i32.rs b/gcc/testsuite/rust/execute/torture/ctlz_i32.rs
new file mode 100644
index 000000000..d49668751
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i32.rs
@@ -0,0 +1,28 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    if ctlz(0i32) != 32 {
+        abort();
+    }
+    // 1i32 = 0x00000001: 31 leading zeros
+    if ctlz(1i32) != 31 {
+        abort();
+    }
+    // -1i32 = 0xFFFFFFFF: 0 leading zeros
+    if ctlz(-1i32) != 0 {
+        abort();
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i64.rs b/gcc/testsuite/rust/execute/torture/ctlz_i64.rs
new file mode 100644
index 000000000..feb4694d0
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i64.rs
@@ -0,0 +1,28 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    if ctlz(0i64) != 64 {
+        abort();
+    }
+    // 1i64 = 0x0000000000000001: 63 leading zeros
+    if ctlz(1i64) != 63 {
+        abort();
+    }
+    // -1i64 = 0xFFFFFFFFFFFFFFFF: 0 leading zeros
+    if ctlz(-1i64) != 0 {
+        abort();
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i8.rs b/gcc/testsuite/rust/execute/torture/ctlz_i8.rs
new file mode 100644
index 000000000..204999f60
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i8.rs
@@ -0,0 +1,29 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    // 0i8 has all 8 bits zero
+    if ctlz(0i8) != 8 {
+        abort();
+    }
+    // 1i8 = 0x01: 7 leading zeros
+    if ctlz(1i8) != 7 {
+        abort();
+    }
+    // -1i8 = 0xFF in two's complement: all bits set, 0 leading zeros
+    if ctlz(-1i8) != 0 {
+        abort();
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
new file mode 100644
index 000000000..e8593ab22
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        // 1i16 = 0x0001: 15 leading zeros
+        if ctlz_nonzero(1i16) != 15 {
+            abort();
+        }
+        // -1i16 = 0xFFFF: 0 leading zeros
+        if ctlz_nonzero(-1i16) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
new file mode 100644
index 000000000..2c5afd3c1
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        // 1i32 = 0x00000001: 31 leading zeros
+        if ctlz_nonzero(1i32) != 31 {
+            abort();
+        }
+        // -1i32 = 0xFFFFFFFF: 0 leading zeros
+        if ctlz_nonzero(-1i32) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
new file mode 100644
index 000000000..b34f4ca16
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        // 1i64 = 0x0000000000000001: 63 leading zeros
+        if ctlz_nonzero(1i64) != 63 {
+            abort();
+        }
+        // -1i64 = 0xFFFFFFFFFFFFFFFF: 0 leading zeros
+        if ctlz_nonzero(-1i64) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
new file mode 100644
index 000000000..0f6c7f0c9
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        // 1i8 = 0x01: 7 leading zeros
+        if ctlz_nonzero(1i8) != 7 {
+            abort();
+        }
+        // -1i8 = 0xFF: 0 leading zeros
+        if ctlz_nonzero(-1i8) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
new file mode 100644
index 000000000..da0521c1c
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        if ctlz_nonzero(1u16) != 15 {
+            abort();
+        }
+        if ctlz_nonzero(0xFFFFu16) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
new file mode 100644
index 000000000..b1224067b
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        if ctlz_nonzero(1u32) != 31 {
+            abort();
+        }
+        if ctlz_nonzero(0xFFFFFFFFu32) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
new file mode 100644
index 000000000..9297c9d50
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        if ctlz_nonzero(1u64) != 63 {
+            abort();
+        }
+        if ctlz_nonzero(!0u64) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
new file mode 100644
index 000000000..d7baa555a
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz_nonzero<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    unsafe {
+        if ctlz_nonzero(1u8) != 7 {
+            abort();
+        }
+        if ctlz_nonzero(255u8) != 0 {
+            abort();
+        }
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u16.rs b/gcc/testsuite/rust/execute/torture/ctlz_u16.rs
new file mode 100644
index 000000000..ded1b7458
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u16.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    if ctlz(0u16) != 16 {
+        abort();
+    }
+    if ctlz(1u16) != 15 {
+        abort();
+    }
+    if ctlz(0xFFFFu16) != 0 {
+        abort();
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u32.rs b/gcc/testsuite/rust/execute/torture/ctlz_u32.rs
new file mode 100644
index 000000000..cb0b20cb3
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u32.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    if ctlz(0u32) != 32 {
+        abort();
+    }
+    if ctlz(1u32) != 31 {
+        abort();
+    }
+    if ctlz(0xFFFFFFFFu32) != 0 {
+        abort();
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u64.rs b/gcc/testsuite/rust/execute/torture/ctlz_u64.rs
new file mode 100644
index 000000000..bcf478e73
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u64.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    if ctlz(0u64) != 64 {
+        abort();
+    }
+    if ctlz(1u64) != 63 {
+        abort();
+    }
+    if ctlz(!0u64) != 0 {
+        abort();
+    }
+
+    0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u8.rs b/gcc/testsuite/rust/execute/torture/ctlz_u8.rs
new file mode 100644
index 000000000..8907a86cb
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u8.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+    pub fn ctlz<T>(x: T) -> u32;
+    pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+    if ctlz(0u8) != 8 {
+        abort();
+    }
+    if ctlz(1u8) != 7 {
+        abort();
+    }
+    if ctlz(255u8) != 0 {
+        abort();
+    }
+
+    0
+}
-- 
2.53.0



More information about the Gcc-rust mailing list