diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-09-13 16:00:18 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-09-13 16:00:18 -0700 |
| commit | c62919f6074c1ddf766139e5d484fbd7c6f899e1 (patch) | |
| tree | c9273ba1e60e78a6f0f7599335acec602e37a1f0 /src/libsyntax | |
| parent | cabba6b4d3c0d31f6cd224d4537ce2ff115b039b (diff) | |
| download | rust-c62919f6074c1ddf766139e5d484fbd7c6f899e1.tar.gz rust-c62919f6074c1ddf766139e5d484fbd7c6f899e1.zip | |
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.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/fold.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index c861c26b82e..5472c61a155 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))) |
