Skip to content

Commit 0554aba

Browse files
authored
Auto merge of #34172 - jseyfried:avoid_configuring_interpolated_ast, r=alexcrichton
Fix ICE regression caused by configuring interpolated AST Fixes #34171. r? @nrc
2 parents 8c6bd23 + c751ec6 commit 0554aba

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/libsyntax/config.rs

+7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use feature_gate::GatedCfgAttr;
1414
use fold::Folder;
1515
use {ast, fold, attr};
1616
use codemap::{Spanned, respan};
17+
use parse::token;
1718
use ptr::P;
1819

1920
use util::small_vector::SmallVector;
@@ -247,6 +248,12 @@ impl<T: CfgFolder> fold::Folder for T {
247248
self.configure(item).map(|item| fold::noop_fold_trait_item(item, self))
248249
.unwrap_or(SmallVector::zero())
249250
}
251+
252+
fn fold_interpolated(&mut self, nt: token::Nonterminal) -> token::Nonterminal {
253+
// Don't configure interpolated AST (c.f. #34171).
254+
// Interpolated AST will get configured once the surrounding tokens are parsed.
255+
nt
256+
}
250257
}
251258

252259
fn fold_expr<F: CfgFolder>(folder: &mut F, expr: P<ast::Expr>) -> P<ast::Expr> {

src/test/compile-fail/issue-34171.rs

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![feature(rustc_attrs)]
12+
13+
macro_rules! null { ($i:tt) => {} }
14+
macro_rules! apply_null {
15+
($i:item) => { null! { $i } }
16+
}
17+
18+
#[rustc_error]
19+
fn main() { //~ ERROR compilation successful
20+
apply_null!(#[cfg(all())] fn f() {});
21+
}

0 commit comments

Comments
 (0)