Auto merge of #68635 - JohnTitor:rollup-jsc34ac, r=JohnTitor
Rollup of 7 pull requests Successful merges: - #67722 (Minor: note how Any is an unsafe trait in SAFETY comments) - #68586 (Make conflicting_repr_hints a deny-by-default c-future-compat lint) - #68598 (Fix null synthetic_implementors error) - #68603 (Changelog: Demonstrate final build-override syntax) - #68609 (Set lld flavor for MSVC to link.exe) - #68611 (Correct ICE caused by macros generating invalid spans.) - #68627 (Document that write_all will not call write if given an empty buffer) Failed merges: r? @ghost
This commit is contained in:
commit
eed12bcd0c
14 changed files with 98 additions and 41 deletions
|
@ -62,9 +62,9 @@ Cargo
|
||||||
- [Cargo.lock now uses a more git friendly format that should help to reduce
|
- [Cargo.lock now uses a more git friendly format that should help to reduce
|
||||||
merge conflicts.][cargo/7579]
|
merge conflicts.][cargo/7579]
|
||||||
- [You can now override specific dependencies's build settings][cargo/7591] E.g.
|
- [You can now override specific dependencies's build settings][cargo/7591] E.g.
|
||||||
`[profile.dev.overrides.image] opt-level = 2` sets the `image` crate's
|
`[profile.dev.package.image] opt-level = 2` sets the `image` crate's
|
||||||
optimisation level to `2` for debug builds. You can also use
|
optimisation level to `2` for debug builds. You can also use
|
||||||
`[profile.<profile>.build_overrides]` to override build scripts and
|
`[profile.<profile>.build-override]` to override build scripts and
|
||||||
their dependencies.
|
their dependencies.
|
||||||
|
|
||||||
Misc
|
Misc
|
||||||
|
|
|
@ -194,7 +194,9 @@ impl dyn Any {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn downcast_ref<T: Any>(&self) -> Option<&T> {
|
pub fn downcast_ref<T: Any>(&self) -> Option<&T> {
|
||||||
if self.is::<T>() {
|
if self.is::<T>() {
|
||||||
// SAFETY: just checked whether we are pointing to the correct type
|
// SAFETY: just checked whether we are pointing to the correct type, and we can rely on
|
||||||
|
// that check for memory safety because we have implemented Any for all types; no other
|
||||||
|
// impls can exist as they would conflict with our impl.
|
||||||
unsafe { Some(&*(self as *const dyn Any as *const T)) }
|
unsafe { Some(&*(self as *const dyn Any as *const T)) }
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
@ -228,7 +230,9 @@ impl dyn Any {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn downcast_mut<T: Any>(&mut self) -> Option<&mut T> {
|
pub fn downcast_mut<T: Any>(&mut self) -> Option<&mut T> {
|
||||||
if self.is::<T>() {
|
if self.is::<T>() {
|
||||||
// SAFETY: just checked whether we are pointing to the correct type
|
// SAFETY: just checked whether we are pointing to the correct type, and we can rely on
|
||||||
|
// that check for memory safety because we have implemented Any for all types; no other
|
||||||
|
// impls can exist as they would conflict with our impl.
|
||||||
unsafe { Some(&mut *(self as *mut dyn Any as *mut T)) }
|
unsafe { Some(&mut *(self as *mut dyn Any as *mut T)) }
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
|
|
@ -14,7 +14,7 @@ use rustc_hir::def_id::DefId;
|
||||||
use rustc_hir::intravisit::{self, NestedVisitorMap, Visitor};
|
use rustc_hir::intravisit::{self, NestedVisitorMap, Visitor};
|
||||||
use rustc_hir::DUMMY_HIR_ID;
|
use rustc_hir::DUMMY_HIR_ID;
|
||||||
use rustc_hir::{self, HirId, Item, ItemKind, TraitItem, TraitItemKind};
|
use rustc_hir::{self, HirId, Item, ItemKind, TraitItem, TraitItemKind};
|
||||||
use rustc_session::lint::builtin::UNUSED_ATTRIBUTES;
|
use rustc_session::lint::builtin::{CONFLICTING_REPR_HINTS, UNUSED_ATTRIBUTES};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use syntax::ast::Attribute;
|
use syntax::ast::Attribute;
|
||||||
|
@ -196,7 +196,7 @@ impl CheckAttrVisitor<'tcx> {
|
||||||
self.tcx.codegen_fn_attrs(self.tcx.hir().local_def_id(hir_id));
|
self.tcx.codegen_fn_attrs(self.tcx.hir().local_def_id(hir_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
self.check_repr(attrs, span, target, item);
|
self.check_repr(attrs, span, target, item, hir_id);
|
||||||
self.check_used(attrs, target);
|
self.check_used(attrs, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,6 +357,7 @@ impl CheckAttrVisitor<'tcx> {
|
||||||
span: &Span,
|
span: &Span,
|
||||||
target: Target,
|
target: Target,
|
||||||
item: Option<&Item<'_>>,
|
item: Option<&Item<'_>>,
|
||||||
|
hir_id: HirId,
|
||||||
) {
|
) {
|
||||||
// Extract the names of all repr hints, e.g., [foo, bar, align] for:
|
// Extract the names of all repr hints, e.g., [foo, bar, align] for:
|
||||||
// ```
|
// ```
|
||||||
|
@ -446,13 +447,15 @@ impl CheckAttrVisitor<'tcx> {
|
||||||
|| (is_simd && is_c)
|
|| (is_simd && is_c)
|
||||||
|| (int_reprs == 1 && is_c && item.map_or(false, |item| is_c_like_enum(item)))
|
|| (int_reprs == 1 && is_c && item.map_or(false, |item| is_c_like_enum(item)))
|
||||||
{
|
{
|
||||||
struct_span_err!(
|
self.tcx
|
||||||
self.tcx.sess,
|
.struct_span_lint_hir(
|
||||||
hint_spans.collect::<Vec<Span>>(),
|
CONFLICTING_REPR_HINTS,
|
||||||
E0566,
|
hir_id,
|
||||||
"conflicting representation hints",
|
hint_spans.collect::<Vec<Span>>(),
|
||||||
)
|
"conflicting representation hints",
|
||||||
.emit();
|
)
|
||||||
|
.code(rustc_errors::error_code!(E0566))
|
||||||
|
.emit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ use crate::{
|
||||||
pluralize, CodeSuggestion, Diagnostic, DiagnosticId, Level, SubDiagnostic, SuggestionStyle,
|
pluralize, CodeSuggestion, Diagnostic, DiagnosticId, Level, SubDiagnostic, SuggestionStyle,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use log::*;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_span::hygiene::{ExpnKind, MacroKind};
|
use rustc_span::hygiene::{ExpnKind, MacroKind};
|
||||||
|
@ -2108,7 +2109,13 @@ impl<'a> Drop for WritableDst<'a> {
|
||||||
/// Whether the original and suggested code are visually similar enough to warrant extra wording.
|
/// Whether the original and suggested code are visually similar enough to warrant extra wording.
|
||||||
pub fn is_case_difference(sm: &SourceMap, suggested: &str, sp: Span) -> bool {
|
pub fn is_case_difference(sm: &SourceMap, suggested: &str, sp: Span) -> bool {
|
||||||
// FIXME: this should probably be extended to also account for `FO0` → `FOO` and unicode.
|
// FIXME: this should probably be extended to also account for `FO0` → `FOO` and unicode.
|
||||||
let found = sm.span_to_snippet(sp).unwrap();
|
let found = match sm.span_to_snippet(sp) {
|
||||||
|
Ok(snippet) => snippet,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Invalid span {:?}. Err={:?}", sp, e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
let ascii_confusables = &['c', 'f', 'i', 'k', 'o', 's', 'u', 'v', 'w', 'x', 'y', 'z'];
|
let ascii_confusables = &['c', 'f', 'i', 'k', 'o', 's', 'u', 'v', 'w', 'x', 'y', 'z'];
|
||||||
// All the chars that differ in capitalization are confusable (above):
|
// All the chars that differ in capitalization are confusable (above):
|
||||||
let confusable = found
|
let confusable = found
|
||||||
|
|
|
@ -18,6 +18,16 @@ declare_lint! {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare_lint! {
|
||||||
|
pub CONFLICTING_REPR_HINTS,
|
||||||
|
Deny,
|
||||||
|
"conflicts between `#[repr(..)]` hints that were previously accepted and used in practice",
|
||||||
|
@future_incompatible = FutureIncompatibleInfo {
|
||||||
|
reference: "issue #68585 <https://github.com/rust-lang/rust/issues/68585>",
|
||||||
|
edition: None,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
declare_lint! {
|
declare_lint! {
|
||||||
pub META_VARIABLE_MISUSE,
|
pub META_VARIABLE_MISUSE,
|
||||||
Allow,
|
Allow,
|
||||||
|
@ -520,6 +530,7 @@ declare_lint_pass! {
|
||||||
MACRO_USE_EXTERN_CRATE,
|
MACRO_USE_EXTERN_CRATE,
|
||||||
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
|
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
|
||||||
ILL_FORMED_ATTRIBUTE_INPUT,
|
ILL_FORMED_ATTRIBUTE_INPUT,
|
||||||
|
CONFLICTING_REPR_HINTS,
|
||||||
META_VARIABLE_MISUSE,
|
META_VARIABLE_MISUSE,
|
||||||
DEPRECATED_IN_FUTURE,
|
DEPRECATED_IN_FUTURE,
|
||||||
AMBIGUOUS_ASSOCIATED_ITEMS,
|
AMBIGUOUS_ASSOCIATED_ITEMS,
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
use crate::spec::{LinkArgs, LinkerFlavor, TargetOptions};
|
use crate::spec::{LinkArgs, LinkerFlavor, LldFlavor, TargetOptions};
|
||||||
use std::default::Default;
|
use std::default::Default;
|
||||||
|
|
||||||
pub fn opts() -> TargetOptions {
|
pub fn opts() -> TargetOptions {
|
||||||
|
let pre_args = vec!["/NOLOGO".to_string(), "/NXCOMPAT".to_string()];
|
||||||
let mut args = LinkArgs::new();
|
let mut args = LinkArgs::new();
|
||||||
args.insert(LinkerFlavor::Msvc, vec!["/NOLOGO".to_string(), "/NXCOMPAT".to_string()]);
|
args.insert(LinkerFlavor::Msvc, pre_args.clone());
|
||||||
|
args.insert(LinkerFlavor::Lld(LldFlavor::Link), pre_args);
|
||||||
|
|
||||||
TargetOptions {
|
TargetOptions {
|
||||||
function_sections: true,
|
function_sections: true,
|
||||||
|
@ -21,6 +23,7 @@ pub fn opts() -> TargetOptions {
|
||||||
// language packs, and avoid generating Non-UTF-8 error
|
// language packs, and avoid generating Non-UTF-8 error
|
||||||
// messages if a link error occurred.
|
// messages if a link error occurred.
|
||||||
link_env: vec![("VSLANG".to_string(), "1033".to_string())],
|
link_env: vec![("VSLANG".to_string(), "1033".to_string())],
|
||||||
|
lld_flavor: LldFlavor::Link,
|
||||||
pre_link_args: args,
|
pre_link_args: args,
|
||||||
crt_static_allows_dylibs: true,
|
crt_static_allows_dylibs: true,
|
||||||
crt_static_respected: true,
|
crt_static_respected: true,
|
||||||
|
|
|
@ -1895,21 +1895,23 @@ function getSearchElement() {
|
||||||
var implementors = document.getElementById("implementors-list");
|
var implementors = document.getElementById("implementors-list");
|
||||||
var synthetic_implementors = document.getElementById("synthetic-implementors-list");
|
var synthetic_implementors = document.getElementById("synthetic-implementors-list");
|
||||||
|
|
||||||
// This `inlined_types` variable is used to avoid having the same implementation showing
|
if (synthetic_implementors) {
|
||||||
// up twice. For example "String" in the "Sync" doc page.
|
// This `inlined_types` variable is used to avoid having the same implementation
|
||||||
//
|
// showing up twice. For example "String" in the "Sync" doc page.
|
||||||
// By the way, this is only used by and useful for traits implemented automatically (like
|
//
|
||||||
// "Send" and "Sync").
|
// By the way, this is only used by and useful for traits implemented automatically
|
||||||
var inlined_types = new Set();
|
// (like "Send" and "Sync").
|
||||||
onEachLazy(synthetic_implementors.getElementsByClassName("impl"), function(el) {
|
var inlined_types = new Set();
|
||||||
var aliases = el.getAttribute("aliases");
|
onEachLazy(synthetic_implementors.getElementsByClassName("impl"), function(el) {
|
||||||
if (!aliases) {
|
var aliases = el.getAttribute("aliases");
|
||||||
return;
|
if (!aliases) {
|
||||||
}
|
return;
|
||||||
aliases.split(",").forEach(function(alias) {
|
}
|
||||||
inlined_types.add(alias);
|
aliases.split(",").forEach(function(alias) {
|
||||||
|
inlined_types.add(alias);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
|
||||||
var libs = Object.getOwnPropertyNames(imp);
|
var libs = Object.getOwnPropertyNames(imp);
|
||||||
var llength = libs.length;
|
var llength = libs.length;
|
||||||
|
|
|
@ -1327,6 +1327,8 @@ pub trait Write {
|
||||||
/// not of [`ErrorKind::Interrupted`] kind generated from this method will be
|
/// not of [`ErrorKind::Interrupted`] kind generated from this method will be
|
||||||
/// returned.
|
/// returned.
|
||||||
///
|
///
|
||||||
|
/// If the buffer contains no data, this will never call [`write`].
|
||||||
|
///
|
||||||
/// # Errors
|
/// # Errors
|
||||||
///
|
///
|
||||||
/// This function will return the first error of
|
/// This function will return the first error of
|
||||||
|
|
|
@ -11,11 +11,13 @@ enum B {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C, u64)] //~ ERROR conflicting representation hints
|
#[repr(C, u64)] //~ ERROR conflicting representation hints
|
||||||
|
//~^ WARN this was previously accepted
|
||||||
enum C {
|
enum C {
|
||||||
C,
|
C,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(u32, u64)] //~ ERROR conflicting representation hints
|
#[repr(u32, u64)] //~ ERROR conflicting representation hints
|
||||||
|
//~^ WARN this was previously accepted
|
||||||
enum D {
|
enum D {
|
||||||
D,
|
D,
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,45 +3,52 @@ error[E0566]: conflicting representation hints
|
||||||
|
|
|
|
||||||
LL | #[repr(C, u64)]
|
LL | #[repr(C, u64)]
|
||||||
| ^ ^^^
|
| ^ ^^^
|
||||||
|
|
|
||||||
|
= note: `#[deny(conflicting_repr_hints)]` on by default
|
||||||
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
|
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||||
|
|
||||||
error[E0566]: conflicting representation hints
|
error[E0566]: conflicting representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:18:8
|
--> $DIR/conflicting-repr-hints.rs:19:8
|
||||||
|
|
|
|
||||||
LL | #[repr(u32, u64)]
|
LL | #[repr(u32, u64)]
|
||||||
| ^^^ ^^^
|
| ^^^ ^^^
|
||||||
|
|
|
||||||
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
|
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||||
|
|
||||||
error[E0587]: type has conflicting packed and align representation hints
|
error[E0587]: type has conflicting packed and align representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:27:1
|
--> $DIR/conflicting-repr-hints.rs:29:1
|
||||||
|
|
|
|
||||||
LL | struct F(i32);
|
LL | struct F(i32);
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0587]: type has conflicting packed and align representation hints
|
error[E0587]: type has conflicting packed and align representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:31:1
|
--> $DIR/conflicting-repr-hints.rs:33:1
|
||||||
|
|
|
|
||||||
LL | struct G(i32);
|
LL | struct G(i32);
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0587]: type has conflicting packed and align representation hints
|
error[E0587]: type has conflicting packed and align representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:35:1
|
--> $DIR/conflicting-repr-hints.rs:37:1
|
||||||
|
|
|
|
||||||
LL | struct H(i32);
|
LL | struct H(i32);
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0634]: type has conflicting packed representation hints
|
error[E0634]: type has conflicting packed representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:38:1
|
--> $DIR/conflicting-repr-hints.rs:40:1
|
||||||
|
|
|
|
||||||
LL | struct I(i32);
|
LL | struct I(i32);
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0634]: type has conflicting packed representation hints
|
error[E0634]: type has conflicting packed representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:42:1
|
--> $DIR/conflicting-repr-hints.rs:44:1
|
||||||
|
|
|
|
||||||
LL | struct J(i32);
|
LL | struct J(i32);
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0587]: type has conflicting packed and align representation hints
|
error[E0587]: type has conflicting packed and align representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:48:1
|
--> $DIR/conflicting-repr-hints.rs:50:1
|
||||||
|
|
|
|
||||||
LL | / union X {
|
LL | / union X {
|
||||||
LL | |
|
LL | |
|
||||||
|
@ -50,7 +57,7 @@ LL | | }
|
||||||
| |_^
|
| |_^
|
||||||
|
|
||||||
error[E0587]: type has conflicting packed and align representation hints
|
error[E0587]: type has conflicting packed and align representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:55:1
|
--> $DIR/conflicting-repr-hints.rs:57:1
|
||||||
|
|
|
|
||||||
LL | / union Y {
|
LL | / union Y {
|
||||||
LL | |
|
LL | |
|
||||||
|
@ -59,7 +66,7 @@ LL | | }
|
||||||
| |_^
|
| |_^
|
||||||
|
|
||||||
error[E0587]: type has conflicting packed and align representation hints
|
error[E0587]: type has conflicting packed and align representation hints
|
||||||
--> $DIR/conflicting-repr-hints.rs:62:1
|
--> $DIR/conflicting-repr-hints.rs:64:1
|
||||||
|
|
|
|
||||||
LL | / union Z {
|
LL | / union Z {
|
||||||
LL | |
|
LL | |
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
struct Foo(u64, u64);
|
struct Foo(u64, u64);
|
||||||
|
|
||||||
#[repr(C)] //~ ERROR conflicting representation hints
|
#[repr(C)] //~ ERROR conflicting representation hints
|
||||||
|
//~^ WARN this was previously accepted
|
||||||
#[repr(simd)] //~ error: SIMD types are experimental
|
#[repr(simd)] //~ error: SIMD types are experimental
|
||||||
struct Bar(u64, u64);
|
struct Bar(u64, u64);
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ LL | #[repr(simd)]
|
||||||
= help: add `#![feature(repr_simd)]` to the crate attributes to enable
|
= help: add `#![feature(repr_simd)]` to the crate attributes to enable
|
||||||
|
|
||||||
error[E0658]: SIMD types are experimental and possibly buggy
|
error[E0658]: SIMD types are experimental and possibly buggy
|
||||||
--> $DIR/feature-gate-repr-simd.rs:5:1
|
--> $DIR/feature-gate-repr-simd.rs:6:1
|
||||||
|
|
|
|
||||||
LL | #[repr(simd)]
|
LL | #[repr(simd)]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
@ -21,8 +21,13 @@ error[E0566]: conflicting representation hints
|
||||||
|
|
|
|
||||||
LL | #[repr(C)]
|
LL | #[repr(C)]
|
||||||
| ^
|
| ^
|
||||||
|
LL |
|
||||||
LL | #[repr(simd)]
|
LL | #[repr(simd)]
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
|
||||||
|
= note: `#[deny(conflicting_repr_hints)]` on by default
|
||||||
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
|
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#[repr(C, u8)] //~ ERROR conflicting representation hints
|
#[repr(C, u8)] //~ ERROR conflicting representation hints
|
||||||
|
//~^ WARN this was previously accepted
|
||||||
enum Foo {
|
enum Foo {
|
||||||
A,
|
A,
|
||||||
B,
|
B,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)] //~ ERROR conflicting representation hints
|
#[repr(C)] //~ ERROR conflicting representation hints
|
||||||
|
//~^ WARN this was previously accepted
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
enum Bar {
|
enum Bar {
|
||||||
A,
|
A,
|
||||||
|
|
|
@ -3,14 +3,22 @@ error[E0566]: conflicting representation hints
|
||||||
|
|
|
|
||||||
LL | #[repr(C, u8)]
|
LL | #[repr(C, u8)]
|
||||||
| ^ ^^
|
| ^ ^^
|
||||||
|
|
|
||||||
|
= note: `#[deny(conflicting_repr_hints)]` on by default
|
||||||
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
|
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||||
|
|
||||||
error[E0566]: conflicting representation hints
|
error[E0566]: conflicting representation hints
|
||||||
--> $DIR/issue-47094.rs:7:8
|
--> $DIR/issue-47094.rs:8:8
|
||||||
|
|
|
|
||||||
LL | #[repr(C)]
|
LL | #[repr(C)]
|
||||||
| ^
|
| ^
|
||||||
|
LL |
|
||||||
LL | #[repr(u8)]
|
LL | #[repr(u8)]
|
||||||
| ^^
|
| ^^
|
||||||
|
|
|
||||||
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
|
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue