From c62919f6074c1ddf766139e5d484fbd7c6f899e1 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 13 Sep 2013 16:00:18 -0700 Subject: [PATCH] Work around a compiler crash folding labeled break. #9129 Servo is hitting this problem, so this is a workaround for a lack of a real solution. --- src/libsyntax/fold.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index c861c26b82eb3..5472c61a155a8 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -690,11 +690,19 @@ pub fn noop_fold_expr(e: &Expr_, fld: @ast_fold) -> Expr_ { ExprBreak(ref opt_ident) => { // FIXME #6993: add fold_name to fold.... then cut out the // bogus Name->Ident->Name conversion. - ExprBreak(opt_ident.map_move(|x| fld.fold_ident(Ident::new(x)).name)) + ExprBreak(opt_ident.map_move(|x| { + // FIXME #9129: Assigning the new ident to a temporary to work around codegen bug + let newx = Ident::new(x); + fld.fold_ident(newx).name + })) } ExprAgain(ref opt_ident) => { // FIXME #6993: add fold_name to fold.... - ExprAgain(opt_ident.map_move(|x| fld.fold_ident(Ident::new(x)).name)) + ExprAgain(opt_ident.map_move(|x| { + // FIXME #9129: Assigning the new ident to a temporary to work around codegen bug + let newx = Ident::new(x); + fld.fold_ident(newx).name + })) } ExprRet(ref e) => { ExprRet(e.map_move(|x| fld.fold_expr(x)))