summaryrefslogtreecommitdiffstats
path: root/tests/ui/extern
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/extern')
-rw-r--r--tests/ui/extern/extern-const.fixed1
-rw-r--r--tests/ui/extern/extern-const.rs1
-rw-r--r--tests/ui/extern/extern-const.stderr4
-rw-r--r--tests/ui/extern/extern-crate-rename.stderr2
-rw-r--r--tests/ui/extern/extern-ffi-fn-with-body.stderr2
-rw-r--r--tests/ui/extern/extern-macro.stderr2
-rw-r--r--tests/ui/extern/extern-main-fn.stderr2
-rw-r--r--tests/ui/extern/extern-main-issue-86110.stderr2
-rw-r--r--tests/ui/extern/extern-type-diag-not-similar.stderr2
-rw-r--r--tests/ui/extern/extern-types-distinct-types.stderr2
-rw-r--r--tests/ui/extern/extern-types-field-offset.rs33
-rw-r--r--tests/ui/extern/extern-types-field-offset.run.stderr4
-rw-r--r--tests/ui/extern/extern-types-size_of_val.align.run.stderr4
-rw-r--r--tests/ui/extern/extern-types-size_of_val.rs14
-rw-r--r--tests/ui/extern/extern-types-size_of_val.size.run.stderr4
-rw-r--r--tests/ui/extern/extern-with-type-bounds.stderr2
-rw-r--r--tests/ui/extern/extern-wrong-value-type.stderr2
-rw-r--r--tests/ui/extern/issue-116203.rs21
-rw-r--r--tests/ui/extern/issue-116203.stderr46
-rw-r--r--tests/ui/extern/issue-13655.rs2
-rw-r--r--tests/ui/extern/issue-28324.mir.stderr2
-rw-r--r--tests/ui/extern/issue-28324.thir.stderr2
-rw-r--r--tests/ui/extern/issue-36122-accessing-externed-dst.stderr2
23 files changed, 137 insertions, 21 deletions
diff --git a/tests/ui/extern/extern-const.fixed b/tests/ui/extern/extern-const.fixed
index 9d96b4f63..248efc93d 100644
--- a/tests/ui/extern/extern-const.fixed
+++ b/tests/ui/extern/extern-const.fixed
@@ -6,7 +6,6 @@
// run-rustfix
// ignore-wasm32-bare no external library to link to.
-// ignore-asmjs wasm2js does not support source maps yet
// compile-flags: -g
#![feature(rustc_private)]
extern crate libc;
diff --git a/tests/ui/extern/extern-const.rs b/tests/ui/extern/extern-const.rs
index 7cef5b349..d3b3bef6d 100644
--- a/tests/ui/extern/extern-const.rs
+++ b/tests/ui/extern/extern-const.rs
@@ -6,7 +6,6 @@
// run-rustfix
// ignore-wasm32-bare no external library to link to.
-// ignore-asmjs wasm2js does not support source maps yet
// compile-flags: -g
#![feature(rustc_private)]
extern crate libc;
diff --git a/tests/ui/extern/extern-const.stderr b/tests/ui/extern/extern-const.stderr
index 7f67adbdb..4c2c3d6e0 100644
--- a/tests/ui/extern/extern-const.stderr
+++ b/tests/ui/extern/extern-const.stderr
@@ -1,5 +1,5 @@
error: extern items cannot be `const`
- --> $DIR/extern-const.rs:16:11
+ --> $DIR/extern-const.rs:15:11
|
LL | const rust_dbg_static_mut: libc::c_int;
| ------^^^^^^^^^^^^^^^^^^^
@@ -8,5 +8,5 @@ LL | const rust_dbg_static_mut: libc::c_int;
|
= note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
-error: aborting due to previous error
+error: aborting due to 1 previous error
diff --git a/tests/ui/extern/extern-crate-rename.stderr b/tests/ui/extern/extern-crate-rename.stderr
index 5f1477955..43f6e56ab 100644
--- a/tests/ui/extern/extern-crate-rename.stderr
+++ b/tests/ui/extern/extern-crate-rename.stderr
@@ -12,6 +12,6 @@ help: you can use `as` to change the binding name of the import
LL | extern crate m2 as other_m1;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0259`.
diff --git a/tests/ui/extern/extern-ffi-fn-with-body.stderr b/tests/ui/extern/extern-ffi-fn-with-body.stderr
index 079c9cecd..dc34490b3 100644
--- a/tests/ui/extern/extern-ffi-fn-with-body.stderr
+++ b/tests/ui/extern/extern-ffi-fn-with-body.stderr
@@ -14,5 +14,5 @@ LL | | }
= help: you might have meant to write a function accessible through FFI, which can be done by writing `extern fn` outside of the `extern` block
= note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
-error: aborting due to previous error
+error: aborting due to 1 previous error
diff --git a/tests/ui/extern/extern-macro.stderr b/tests/ui/extern/extern-macro.stderr
index 5b7a72073..e4d767f0e 100644
--- a/tests/ui/extern/extern-macro.stderr
+++ b/tests/ui/extern/extern-macro.stderr
@@ -4,6 +4,6 @@ error[E0433]: failed to resolve: partially resolved path in a macro
LL | let _ = Foo::bar!();
| ^^^^^^^^ partially resolved path in a macro
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0433`.
diff --git a/tests/ui/extern/extern-main-fn.stderr b/tests/ui/extern/extern-main-fn.stderr
index 846102670..fd4e67e89 100644
--- a/tests/ui/extern/extern-main-fn.stderr
+++ b/tests/ui/extern/extern-main-fn.stderr
@@ -7,6 +7,6 @@ LL | extern "C" fn main() {}
= note: expected signature `fn()`
found signature `extern "C" fn()`
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0580`.
diff --git a/tests/ui/extern/extern-main-issue-86110.stderr b/tests/ui/extern/extern-main-issue-86110.stderr
index 18dfddc46..8a3262fbc 100644
--- a/tests/ui/extern/extern-main-issue-86110.stderr
+++ b/tests/ui/extern/extern-main-issue-86110.stderr
@@ -4,5 +4,5 @@ error: the `main` function cannot be declared in an `extern` block
LL | fn main();
| ^^^^^^^^^
-error: aborting due to previous error
+error: aborting due to 1 previous error
diff --git a/tests/ui/extern/extern-type-diag-not-similar.stderr b/tests/ui/extern/extern-type-diag-not-similar.stderr
index 75836f7ec..3547f9b3f 100644
--- a/tests/ui/extern/extern-type-diag-not-similar.stderr
+++ b/tests/ui/extern/extern-type-diag-not-similar.stderr
@@ -11,6 +11,6 @@ note: required by a bound in `assert_send`
LL | fn assert_send<T: Send + ?Sized>() {}
| ^^^^ required by this bound in `assert_send`
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/extern/extern-types-distinct-types.stderr b/tests/ui/extern/extern-types-distinct-types.stderr
index 3e6dc5cef..ea4e51862 100644
--- a/tests/ui/extern/extern-types-distinct-types.stderr
+++ b/tests/ui/extern/extern-types-distinct-types.stderr
@@ -14,6 +14,6 @@ LL | r
= note: expected reference `&B`
found reference `&A`
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/extern/extern-types-field-offset.rs b/tests/ui/extern/extern-types-field-offset.rs
new file mode 100644
index 000000000..bfbc1e9bf
--- /dev/null
+++ b/tests/ui/extern/extern-types-field-offset.rs
@@ -0,0 +1,33 @@
+// run-fail
+// check-run-results
+// exec-env:RUST_BACKTRACE=0
+// normalize-stderr-test: "(core/src/panicking\.rs):[0-9]+:[0-9]+" -> "$1:$$LINE:$$COL"
+#![feature(extern_types)]
+
+extern "C" {
+ type Opaque;
+}
+
+struct Newtype(Opaque);
+
+struct S {
+ i: i32,
+ j: i32,
+ a: Newtype,
+}
+
+fn main() {
+ let buf = [0i32; 4];
+
+ let x: &Newtype = unsafe { &*(&buf as *const _ as *const Newtype) };
+ // Projecting to the newtype works, because it is always at offset 0.
+ let field = &x.0;
+
+ let x: &S = unsafe { &*(&buf as *const _ as *const S) };
+ // Accessing sized fields is perfectly fine, even at non-zero offsets.
+ let field = &x.i;
+ let field = &x.j;
+ // This needs to compute the field offset, but we don't know the type's alignment,
+ // so this panics.
+ let field = &x.a;
+}
diff --git a/tests/ui/extern/extern-types-field-offset.run.stderr b/tests/ui/extern/extern-types-field-offset.run.stderr
new file mode 100644
index 000000000..1b04b860d
--- /dev/null
+++ b/tests/ui/extern/extern-types-field-offset.run.stderr
@@ -0,0 +1,4 @@
+thread 'main' panicked at library/core/src/panicking.rs:$LINE:$COL:
+attempted to compute the size or alignment of extern type `Opaque`
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+thread caused non-unwinding panic. aborting.
diff --git a/tests/ui/extern/extern-types-size_of_val.align.run.stderr b/tests/ui/extern/extern-types-size_of_val.align.run.stderr
new file mode 100644
index 000000000..20c4d8785
--- /dev/null
+++ b/tests/ui/extern/extern-types-size_of_val.align.run.stderr
@@ -0,0 +1,4 @@
+thread 'main' panicked at library/core/src/panicking.rs:$LINE:$COL:
+attempted to compute the size or alignment of extern type `A`
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+thread caused non-unwinding panic. aborting.
diff --git a/tests/ui/extern/extern-types-size_of_val.rs b/tests/ui/extern/extern-types-size_of_val.rs
index 3b02ea28e..4c4de873b 100644
--- a/tests/ui/extern/extern-types-size_of_val.rs
+++ b/tests/ui/extern/extern-types-size_of_val.rs
@@ -1,4 +1,8 @@
-// run-pass
+// run-fail
+// check-run-results
+// exec-env:RUST_BACKTRACE=0
+// normalize-stderr-test: "(core/src/panicking\.rs):[0-9]+:[0-9]+" -> "$1:$$LINE:$$COL"
+// revisions: size align
#![feature(extern_types)]
use std::mem::{align_of_val, size_of_val};
@@ -10,6 +14,10 @@ extern "C" {
fn main() {
let x: &A = unsafe { &*(1usize as *const A) };
- assert_eq!(size_of_val(x), 0);
- assert_eq!(align_of_val(x), 1);
+ // These don't have a dynamic size, so this should panic.
+ if cfg!(size) {
+ assert_eq!(size_of_val(x), 0);
+ } else {
+ assert_eq!(align_of_val(x), 1);
+ }
}
diff --git a/tests/ui/extern/extern-types-size_of_val.size.run.stderr b/tests/ui/extern/extern-types-size_of_val.size.run.stderr
new file mode 100644
index 000000000..20c4d8785
--- /dev/null
+++ b/tests/ui/extern/extern-types-size_of_val.size.run.stderr
@@ -0,0 +1,4 @@
+thread 'main' panicked at library/core/src/panicking.rs:$LINE:$COL:
+attempted to compute the size or alignment of extern type `A`
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+thread caused non-unwinding panic. aborting.
diff --git a/tests/ui/extern/extern-with-type-bounds.stderr b/tests/ui/extern/extern-with-type-bounds.stderr
index 88be1e5dd..42448d9e9 100644
--- a/tests/ui/extern/extern-with-type-bounds.stderr
+++ b/tests/ui/extern/extern-with-type-bounds.stderr
@@ -4,6 +4,6 @@ error[E0405]: cannot find trait `NoSuchTrait` in this scope
LL | fn align_of<T: NoSuchTrait>() -> usize;
| ^^^^^^^^^^^ not found in this scope
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0405`.
diff --git a/tests/ui/extern/extern-wrong-value-type.stderr b/tests/ui/extern/extern-wrong-value-type.stderr
index 463cee831..1c08aa171 100644
--- a/tests/ui/extern/extern-wrong-value-type.stderr
+++ b/tests/ui/extern/extern-wrong-value-type.stderr
@@ -14,6 +14,6 @@ note: required by a bound in `is_fn`
LL | fn is_fn<F>(_: F) where F: Fn() {}
| ^^^^ required by this bound in `is_fn`
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/extern/issue-116203.rs b/tests/ui/extern/issue-116203.rs
new file mode 100644
index 000000000..f82128416
--- /dev/null
+++ b/tests/ui/extern/issue-116203.rs
@@ -0,0 +1,21 @@
+extern "C" {
+ thread_local! {
+ static FOO: u32 = 0;
+ //~^ error: extern items cannot be `const`
+ //~| error: incorrect `static` inside `extern` block
+ }
+}
+
+macro_rules! hello {
+ ($name:ident) => {
+ const $name: () = ();
+ };
+}
+
+extern "C" {
+ hello! { yes }
+ //~^ error: extern items cannot be `const`
+ //~| error: incorrect `static` inside `extern` block
+}
+
+fn main() {}
diff --git a/tests/ui/extern/issue-116203.stderr b/tests/ui/extern/issue-116203.stderr
new file mode 100644
index 000000000..86e4cc763
--- /dev/null
+++ b/tests/ui/extern/issue-116203.stderr
@@ -0,0 +1,46 @@
+error: extern items cannot be `const`
+ --> $DIR/issue-116203.rs:3:14
+ |
+LL | static FOO: u32 = 0;
+ | ^^^
+ |
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error: extern items cannot be `const`
+ --> $DIR/issue-116203.rs:16:14
+ |
+LL | hello! { yes }
+ | ^^^
+ |
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error: incorrect `static` inside `extern` block
+ --> $DIR/issue-116203.rs:3:14
+ |
+LL | extern "C" {
+ | ---------- `extern` blocks define existing foreign statics and statics inside of them cannot have a body
+LL | / thread_local! {
+LL | | static FOO: u32 = 0;
+ | | ^^^ cannot have a body
+LL | |
+LL | |
+LL | | }
+ | |_____- the invalid body
+ |
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error: incorrect `static` inside `extern` block
+ --> $DIR/issue-116203.rs:16:14
+ |
+LL | const $name: () = ();
+ | -- the invalid body
+...
+LL | extern "C" {
+ | ---------- `extern` blocks define existing foreign statics and statics inside of them cannot have a body
+LL | hello! { yes }
+ | ^^^ cannot have a body
+ |
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/extern/issue-13655.rs b/tests/ui/extern/issue-13655.rs
index 6dd184799..a47b5183f 100644
--- a/tests/ui/extern/issue-13655.rs
+++ b/tests/ui/extern/issue-13655.rs
@@ -1,7 +1,5 @@
// run-pass
#![feature(fn_traits, unboxed_closures)]
-use std::ops::Fn;
-
struct Foo<T>(T);
impl<T: Copy> Fn<()> for Foo<T> {
diff --git a/tests/ui/extern/issue-28324.mir.stderr b/tests/ui/extern/issue-28324.mir.stderr
index aff8bf792..9376ac35e 100644
--- a/tests/ui/extern/issue-28324.mir.stderr
+++ b/tests/ui/extern/issue-28324.mir.stderr
@@ -6,6 +6,6 @@ LL | pub static BAZ: u32 = *&error_message_count;
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0133`.
diff --git a/tests/ui/extern/issue-28324.thir.stderr b/tests/ui/extern/issue-28324.thir.stderr
index c696c3598..8857f379a 100644
--- a/tests/ui/extern/issue-28324.thir.stderr
+++ b/tests/ui/extern/issue-28324.thir.stderr
@@ -6,6 +6,6 @@ LL | pub static BAZ: u32 = *&error_message_count;
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0133`.
diff --git a/tests/ui/extern/issue-36122-accessing-externed-dst.stderr b/tests/ui/extern/issue-36122-accessing-externed-dst.stderr
index 5f78775f5..25348b640 100644
--- a/tests/ui/extern/issue-36122-accessing-externed-dst.stderr
+++ b/tests/ui/extern/issue-36122-accessing-externed-dst.stderr
@@ -6,6 +6,6 @@ LL | static symbol: [usize];
|
= help: the trait `Sized` is not implemented for `[usize]`
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0277`.