}
}
- /// We currently do not permit const generics in `const fn`,
- /// as this is tantamount to allowing compile-time dependent typing.
- ///
- /// FIXME(const_generics): Is this really true / necessary? Discuss with @varkor.
- /// At any rate, the restriction feels too syntactic. Consider moving it to e.g. typeck.
- fn check_const_fn_const_generic(&self, span: Span, sig: &FnSig, generics: &Generics) {
- if let Const::Yes(const_span) = sig.header.constness {
- // Look for const generics and error if we find any.
- for param in &generics.params {
- if let GenericParamKind::Const { .. } = param.kind {
- self.err_handler()
- .struct_span_err(
- span,
- "const parameters are not permitted in const functions",
- )
- .span_label(const_span, "`const` because of this")
- .emit();
- }
- }
- }
- }
-
fn check_item_named(&self, ident: Ident, kind: &str) {
if ident.name != kw::Underscore {
return;
.emit();
}
}
- ItemKind::Fn(def, ref sig, ref generics, ref body) => {
+ ItemKind::Fn(def, _, _, ref body) => {
self.check_defaultness(item.span, def);
- self.check_const_fn_const_generic(item.span, sig, generics);
if body.is_none() {
let msg = "free function without a body";
+// run-pass
#![feature(const_generics)]
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash
const fn const_u32_identity<const X: u32>() -> u32 {
- //~^ ERROR const parameters are not permitted in const functions
X
}
fn main() {
- println!("{:?}", const_u32_identity::<18>());
+ assert_eq!(const_u32_identity::<18>(), 18);
}
-error: const parameters are not permitted in const functions
- --> $DIR/const-fn-with-const-param.rs:4:1
- |
-LL | const fn const_u32_identity<const X: u32>() -> u32 {
- | ^----
- | |
- | _`const` because of this
- | |
-LL | |
-LL | | X
-LL | | }
- | |_^
-
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
- --> $DIR/const-fn-with-const-param.rs:1:12
+ --> $DIR/const-fn-with-const-param.rs:2:12
|
LL | #![feature(const_generics)]
| ^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
-error: aborting due to previous error; 1 warning emitted
+warning: 1 warning emitted