summary refs log tree commit diff
path: root/tests/ui/offset-of
diff options
context:
space:
mode:
authorLukas Markeffsky <@>2023-05-17 22:10:36 +0200
committerLukas Markeffsky <@>2023-05-20 15:20:27 +0200
commit7cdb23b98a58a4e73ab1e4ca5e3bb7d04645bdd7 (patch)
tree39a5ca1cfd00c064f1901e4d886308ff201d0146 /tests/ui/offset-of
parent6d1bf733d6d2501fa4f8dd99c7d9a97e2d23d284 (diff)
downloadrust-7cdb23b98a58a4e73ab1e4ca5e3bb7d04645bdd7.tar.gz
rust-7cdb23b98a58a4e73ab1e4ca5e3bb7d04645bdd7.zip
don't skip inference for type in `offset_of!`
Diffstat (limited to 'tests/ui/offset-of')
-rw-r--r--tests/ui/offset-of/offset-of-arg-count.rs2
-rw-r--r--tests/ui/offset-of/offset-of-dst-field.rs1
-rw-r--r--tests/ui/offset-of/offset-of-dst-field.stderr13
-rw-r--r--tests/ui/offset-of/offset-of-inference.rs11
-rw-r--r--tests/ui/offset-of/offset-of-inference.stderr9
5 files changed, 33 insertions, 3 deletions
diff --git a/tests/ui/offset-of/offset-of-arg-count.rs b/tests/ui/offset-of/offset-of-arg-count.rs
index 92a205f14d9..31de45bc756 100644
--- a/tests/ui/offset-of/offset-of-arg-count.rs
+++ b/tests/ui/offset-of/offset-of-arg-count.rs
@@ -13,7 +13,7 @@ fn main() {
     offset_of!(S, f..); //~ ERROR no rules expected the token
     offset_of!(S, f..,); //~ ERROR no rules expected the token
     offset_of!(Lt<'static>, bar); // issue #111657
-
+    offset_of!(Lt<'_>, bar); // issue #111678
 }
 
 struct S { f: u8, }
diff --git a/tests/ui/offset-of/offset-of-dst-field.rs b/tests/ui/offset-of/offset-of-dst-field.rs
index 89e73b8c6b8..3b8dc0b84a4 100644
--- a/tests/ui/offset-of/offset-of-dst-field.rs
+++ b/tests/ui/offset-of/offset-of-dst-field.rs
@@ -41,6 +41,7 @@ fn main() {
 fn delta() {
     offset_of!(Delta<Alpha>, z); //~ ERROR the size for values of type
     offset_of!(Delta<Extern>, z); //~ ERROR the size for values of type
+    offset_of!(Delta<dyn Trait>, z); //~ ERROR the size for values of type
 }
 
 fn generic_with_maybe_sized<T: ?Sized>() -> usize {
diff --git a/tests/ui/offset-of/offset-of-dst-field.stderr b/tests/ui/offset-of/offset-of-dst-field.stderr
index 992eab3d4bd..128c783d5dd 100644
--- a/tests/ui/offset-of/offset-of-dst-field.stderr
+++ b/tests/ui/offset-of/offset-of-dst-field.stderr
@@ -34,6 +34,15 @@ LL |     offset_of!(Delta<Extern>, z);
    = help: the trait `Sized` is not implemented for `Extern`
    = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
 
+error[E0277]: the size for values of type `dyn Trait` cannot be known at compilation time
+  --> $DIR/offset-of-dst-field.rs:44:5
+   |
+LL |     offset_of!(Delta<dyn Trait>, z);
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+   |
+   = help: the trait `Sized` is not implemented for `dyn Trait`
+   = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
 error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
   --> $DIR/offset-of-dst-field.rs:42:5
    |
@@ -49,7 +58,7 @@ LL | struct Alpha {
    = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0277]: the size for values of type `T` cannot be known at compilation time
-  --> $DIR/offset-of-dst-field.rs:47:5
+  --> $DIR/offset-of-dst-field.rs:48:5
    |
 LL | fn generic_with_maybe_sized<T: ?Sized>() -> usize {
    |                             - this type parameter needs to be `std::marker::Sized`
@@ -63,6 +72,6 @@ LL - fn generic_with_maybe_sized<T: ?Sized>() -> usize {
 LL + fn generic_with_maybe_sized<T>() -> usize {
    |
 
-error: aborting due to 6 previous errors
+error: aborting due to 7 previous errors
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/offset-of/offset-of-inference.rs b/tests/ui/offset-of/offset-of-inference.rs
new file mode 100644
index 00000000000..ba87574eae0
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-inference.rs
@@ -0,0 +1,11 @@
+// Test that inference types in `offset_of!` don't ICE.
+
+#![feature(offset_of)]
+
+struct Foo<T> {
+    x: T,
+}
+
+fn main() {
+    let _ = core::mem::offset_of!(Foo<_>, x); //~ ERROR: type annotations needed
+}
diff --git a/tests/ui/offset-of/offset-of-inference.stderr b/tests/ui/offset-of/offset-of-inference.stderr
new file mode 100644
index 00000000000..2a520f6f906
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-inference.stderr
@@ -0,0 +1,9 @@
+error[E0282]: type annotations needed
+  --> $DIR/offset-of-inference.rs:10:35
+   |
+LL |     let _ = core::mem::offset_of!(Foo<_>, x);
+   |                                   ^^^^^^ cannot infer type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.