[generic_assert] Constify methods used by the formatting system
This commit is contained in:
parent
dcfa38fe23
commit
db17be84fe
4 changed files with 11 additions and 31 deletions
|
@ -596,7 +596,7 @@ impl<'a> Arguments<'a> {
|
|||
/// When using the format_args!() macro, this function is used to generate the
|
||||
/// Arguments structure.
|
||||
#[inline]
|
||||
pub fn new_v1<const P: usize, const A: usize>(
|
||||
pub const fn new_v1<const P: usize, const A: usize>(
|
||||
pieces: &'a [&'static str; P],
|
||||
args: &'a [rt::Argument<'a>; A],
|
||||
) -> Arguments<'a> {
|
||||
|
@ -612,7 +612,7 @@ impl<'a> Arguments<'a> {
|
|||
/// 2. Every `rt::Placeholder::position` value within `fmt` must be a valid index of `args`.
|
||||
/// 3. Every `rt::Count::Param` within `fmt` must contain a valid index of `args`.
|
||||
#[inline]
|
||||
pub fn new_v1_formatted(
|
||||
pub const fn new_v1_formatted(
|
||||
pieces: &'a [&'static str],
|
||||
args: &'a [rt::Argument<'a>],
|
||||
fmt: &'a [rt::Placeholder],
|
||||
|
|
|
@ -96,12 +96,12 @@ pub struct Argument<'a> {
|
|||
#[rustc_diagnostic_item = "ArgumentMethods"]
|
||||
impl Argument<'_> {
|
||||
#[inline]
|
||||
fn new<'a, T>(x: &'a T, f: fn(&T, &mut Formatter<'_>) -> Result) -> Argument<'a> {
|
||||
const fn new<'a, T>(x: &'a T, f: fn(&T, &mut Formatter<'_>) -> Result) -> Argument<'a> {
|
||||
Argument {
|
||||
// INVARIANT: this creates an `ArgumentType<'a>` from a `&'a T` and
|
||||
// a `fn(&T, ...)`, so the invariant is maintained.
|
||||
ty: ArgumentType::Placeholder {
|
||||
value: NonNull::from(x).cast(),
|
||||
value: NonNull::from_ref(x).cast(),
|
||||
// SAFETY: function pointers always have the same layout.
|
||||
formatter: unsafe { mem::transmute(f) },
|
||||
_lifetime: PhantomData,
|
||||
|
@ -150,7 +150,7 @@ impl Argument<'_> {
|
|||
Self::new(x, UpperExp::fmt)
|
||||
}
|
||||
#[inline]
|
||||
pub fn from_usize(x: &usize) -> Argument<'_> {
|
||||
pub const fn from_usize(x: &usize) -> Argument<'_> {
|
||||
Argument { ty: ArgumentType::Count(*x) }
|
||||
}
|
||||
|
||||
|
@ -181,7 +181,7 @@ impl Argument<'_> {
|
|||
}
|
||||
|
||||
#[inline]
|
||||
pub(super) fn as_usize(&self) -> Option<usize> {
|
||||
pub(super) const fn as_usize(&self) -> Option<usize> {
|
||||
match self.ty {
|
||||
ArgumentType::Count(count) => Some(count),
|
||||
ArgumentType::Placeholder { .. } => None,
|
||||
|
@ -199,7 +199,7 @@ impl Argument<'_> {
|
|||
/// println!("{f}");
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn none() -> [Self; 0] {
|
||||
pub const fn none() -> [Self; 0] {
|
||||
[]
|
||||
}
|
||||
}
|
||||
|
@ -216,7 +216,7 @@ impl UnsafeArg {
|
|||
/// See documentation where `UnsafeArg` is required to know when it is safe to
|
||||
/// create and use `UnsafeArg`.
|
||||
#[inline]
|
||||
pub unsafe fn new() -> Self {
|
||||
pub const unsafe fn new() -> Self {
|
||||
Self { _private: () }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
const fn failure() {
|
||||
panic!("{:?}", 0);
|
||||
//~^ ERROR cannot call non-const formatting macro in constant functions
|
||||
//~| ERROR cannot call non-const associated function `Arguments::<'_>::new_v1::<1, 1>` in constant functions
|
||||
}
|
||||
|
||||
const fn print() {
|
||||
println!("{:?}", 0);
|
||||
//~^ ERROR cannot call non-const formatting macro in constant functions
|
||||
//~| ERROR cannot call non-const associated function `Arguments::<'_>::new_v1::<2, 1>` in constant functions
|
||||
//~| ERROR cannot call non-const function `_print` in constant functions
|
||||
}
|
||||
|
||||
|
|
|
@ -7,17 +7,8 @@ LL | panic!("{:?}", 0);
|
|||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the macro `$crate::const_format_args` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0015]: cannot call non-const associated function `Arguments::<'_>::new_v1::<1, 1>` in constant functions
|
||||
--> $DIR/format.rs:2:5
|
||||
|
|
||||
LL | panic!("{:?}", 0);
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the macro `$crate::const_format_args` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0015]: cannot call non-const formatting macro in constant functions
|
||||
--> $DIR/format.rs:8:15
|
||||
--> $DIR/format.rs:7:15
|
||||
|
|
||||
LL | println!("{:?}", 0);
|
||||
| ^^^^
|
||||
|
@ -25,17 +16,8 @@ LL | println!("{:?}", 0);
|
|||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0015]: cannot call non-const associated function `Arguments::<'_>::new_v1::<2, 1>` in constant functions
|
||||
--> $DIR/format.rs:8:5
|
||||
|
|
||||
LL | println!("{:?}", 0);
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0015]: cannot call non-const function `_print` in constant functions
|
||||
--> $DIR/format.rs:8:5
|
||||
--> $DIR/format.rs:7:5
|
||||
|
|
||||
LL | println!("{:?}", 0);
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -43,6 +25,6 @@ LL | println!("{:?}", 0);
|
|||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue