From 57c75b6b10c329ed1c9c1957e98a990dd04608f2 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 28 May 2015 15:18:47 -0400 Subject: [PATCH] permit const-fn in macro expansions --- src/librustc/middle/check_const.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/librustc/middle/check_const.rs b/src/librustc/middle/check_const.rs index 390b3142e93..ff7c570284f 100644 --- a/src/librustc/middle/check_const.rs +++ b/src/librustc/middle/check_const.rs @@ -205,7 +205,16 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> { ret_ty: Ty<'tcx>) -> bool { if let Some(fn_like) = const_eval::lookup_const_fn_by_id(self.tcx, def_id) { - if self.mode != Mode::Var && !self.tcx.sess.features.borrow().const_fn { + if + // we are in a static/const initializer + self.mode != Mode::Var && + + // feature-gate is not enabled + !self.tcx.sess.features.borrow().const_fn && + + // this doesn't come from a macro that has #[allow_internal_unstable] + !self.tcx.sess.codemap().span_allows_unstable(expr.span) + { self.tcx.sess.span_err( expr.span, &format!("const fns are an unstable feature"));