@@ -50,12 +50,23 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
50
50
callee : NameAndSpan {
51
51
name : expansion_desc. to_string ( ) ,
52
52
format : CompilerExpansion ,
53
+
54
+ // This does *not* mean code generated after
55
+ // `push_compiler_expansion` is automatically exempt
56
+ // from stability lints; must also tag such code with
57
+ // an appropriate span from `fld.cx.backtrace()`.
53
58
allow_internal_unstable : true ,
59
+
54
60
span : None ,
55
61
} ,
56
62
} ) ;
57
63
}
58
64
65
+ // Sets the expn_id so that we can use unstable methods.
66
+ fn allow_unstable ( fld : & mut MacroExpander , span : Span ) -> Span {
67
+ Span { expn_id : fld. cx . backtrace ( ) , ..span }
68
+ }
69
+
59
70
let expr_span = e. span ;
60
71
return e. and_then ( |ast:: Expr { id, node, span} | match node {
61
72
@@ -101,6 +112,8 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
101
112
& fld. cx . parse_sess . span_diagnostic ,
102
113
expr_span) ;
103
114
115
+ push_compiler_expansion ( fld, expr_span, "placement-in expansion" ) ;
116
+
104
117
let value_span = value_expr. span ;
105
118
let placer_span = placer. span ;
106
119
@@ -121,9 +134,14 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
121
134
let inplace_finalize = [ "ops" , "InPlace" , "finalize" ] ;
122
135
123
136
let make_call = |fld : & mut MacroExpander , p, args| {
124
- let path = mk_core_path ( fld, placer_span, p) ;
137
+ // We feed in the `expr_span` because codemap's span_allows_unstable
138
+ // allows the call_site span to inherit the `allow_internal_unstable`
139
+ // setting.
140
+ let span_unstable = allow_unstable ( fld, expr_span) ;
141
+ let path = mk_core_path ( fld, span_unstable, p) ;
125
142
let path = fld. cx . expr_path ( path) ;
126
- fld. cx . expr_call ( span, path, args)
143
+ let expr_span_unstable = allow_unstable ( fld, span) ;
144
+ fld. cx . expr_call ( expr_span_unstable, path, args)
127
145
} ;
128
146
129
147
let stmt_let = |fld : & mut MacroExpander , bind, expr| {
@@ -166,7 +184,9 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
166
184
} ;
167
185
168
186
let block = fld. cx . block_all ( span, vec ! [ s1, s2, s3] , expr) ;
169
- fld. cx . expr_block ( block)
187
+ let result = fld. cx . expr_block ( block) ;
188
+ fld. cx . bt_pop ( ) ;
189
+ result
170
190
}
171
191
172
192
// Issue #22181:
0 commit comments