about summary refs log tree commit diff
path: root/tests/ui/parser
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-03-01 03:36:11 +0000
committerbors <bors@rust-lang.org>2024-03-01 03:36:11 +0000
commit6cbf0926d54c80ea6d15df333be9281f65bbeb36 (patch)
treea68611bb2c60aed0f51ecea1c44568b40bfa61a5 /tests/ui/parser
parent6f435eb0eb2926cdb6640b3382b9e3e21ef05f07 (diff)
parent406790e9d1f2a02f3b4d004cca7d33e69ef7dca5 (diff)
Auto merge of #121728 - tgross35:f16-f128-step1-ty-updates, r=compiler-errors
Add stubs in IR and ABI for `f16` and `f128`

This is the very first step toward the changes in https://github.com/rust-lang/rust/pull/114607 and the [`f16` and `f128` RFC](https://rust-lang.github.io/rfcs/3453-f16-and-f128.html). It adds the types to `rustc_type_ir::FloatTy` and `rustc_abi::Primitive`, and just propagates those out as `unimplemented!` stubs where necessary.

These types do not parse yet so there is no feature gate, and it should be okay to use `unimplemented!`.

The next steps will probably be AST support with parsing and the feature gate.

r? `@compiler-errors`
cc `@Nilstrieb` suggested breaking the PR up in https://github.com/rust-lang/rust/pull/120645#issuecomment-1925900572
Diffstat (limited to 'tests/ui/parser')
-rw-r--r--tests/ui/parser/f16-f128.rs37
-rw-r--r--tests/ui/parser/f16-f128.stderr67
2 files changed, 104 insertions, 0 deletions
diff --git a/tests/ui/parser/f16-f128.rs b/tests/ui/parser/f16-f128.rs
new file mode 100644
index 00000000000..4f31dccce3c
--- /dev/null
+++ b/tests/ui/parser/f16-f128.rs
@@ -0,0 +1,37 @@
+// Make sure we don't ICE while incrementally adding f16 and f128 support
+
+mod f16_checks {
+    const A: f16 = 10.0; //~ ERROR cannot find type `f16` in this scope
+
+    pub fn main() {
+        let a: f16 = 100.0; //~ ERROR cannot find type `f16` in this scope
+        let b = 0.0f16; //~ ERROR invalid width `16` for float literal
+
+        foo(1.23);
+    }
+
+    fn foo(a: f16) {} //~ ERROR cannot find type `f16` in this scope
+
+    struct Bar {
+        a: f16, //~ ERROR cannot find type `f16` in this scope
+    }
+}
+
+mod f128_checks {
+    const A: f128 = 10.0; //~ ERROR cannot find type `f128` in this scope
+
+    pub fn main() {
+        let a: f128 = 100.0; //~ ERROR cannot find type `f128` in this scope
+        let b = 0.0f128; //~ ERROR invalid width `128` for float literal
+
+        foo(1.23);
+    }
+
+    fn foo(a: f128) {} //~ ERROR cannot find type `f128` in this scope
+
+    struct Bar {
+        a: f128, //~ ERROR cannot find type `f128` in this scope
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/parser/f16-f128.stderr b/tests/ui/parser/f16-f128.stderr
new file mode 100644
index 00000000000..d3f2227acd7
--- /dev/null
+++ b/tests/ui/parser/f16-f128.stderr
@@ -0,0 +1,67 @@
+error[E0412]: cannot find type `f16` in this scope
+  --> $DIR/f16-f128.rs:4:14
+   |
+LL |     const A: f16 = 10.0;
+   |              ^^^ help: a builtin type with a similar name exists: `i16`
+
+error[E0412]: cannot find type `f16` in this scope
+  --> $DIR/f16-f128.rs:7:16
+   |
+LL |         let a: f16 = 100.0;
+   |                ^^^ help: a builtin type with a similar name exists: `i16`
+
+error[E0412]: cannot find type `f16` in this scope
+  --> $DIR/f16-f128.rs:13:15
+   |
+LL |     fn foo(a: f16) {}
+   |               ^^^ help: a builtin type with a similar name exists: `i16`
+
+error[E0412]: cannot find type `f16` in this scope
+  --> $DIR/f16-f128.rs:16:12
+   |
+LL |         a: f16,
+   |            ^^^ help: a builtin type with a similar name exists: `i16`
+
+error[E0412]: cannot find type `f128` in this scope
+  --> $DIR/f16-f128.rs:21:14
+   |
+LL |     const A: f128 = 10.0;
+   |              ^^^^ help: a builtin type with a similar name exists: `i128`
+
+error[E0412]: cannot find type `f128` in this scope
+  --> $DIR/f16-f128.rs:24:16
+   |
+LL |         let a: f128 = 100.0;
+   |                ^^^^ help: a builtin type with a similar name exists: `i128`
+
+error[E0412]: cannot find type `f128` in this scope
+  --> $DIR/f16-f128.rs:30:15
+   |
+LL |     fn foo(a: f128) {}
+   |               ^^^^ help: a builtin type with a similar name exists: `i128`
+
+error[E0412]: cannot find type `f128` in this scope
+  --> $DIR/f16-f128.rs:33:12
+   |
+LL |         a: f128,
+   |            ^^^^ help: a builtin type with a similar name exists: `i128`
+
+error: invalid width `16` for float literal
+  --> $DIR/f16-f128.rs:8:17
+   |
+LL |         let b = 0.0f16;
+   |                 ^^^^^^
+   |
+   = help: valid widths are 32 and 64
+
+error: invalid width `128` for float literal
+  --> $DIR/f16-f128.rs:25:17
+   |
+LL |         let b = 0.0f128;
+   |                 ^^^^^^^
+   |
+   = help: valid widths are 32 and 64
+
+error: aborting due to 10 previous errors
+
+For more information about this error, try `rustc --explain E0412`.