1
1
use rustc_attr_data_structures:: { AttributeKind , OptimizeAttr } ;
2
2
use rustc_feature:: { AttributeTemplate , template} ;
3
3
use rustc_session:: parse:: feature_err;
4
- use rustc_span:: { Span , sym} ;
4
+ use rustc_span:: { Span , Symbol , sym} ;
5
5
6
6
use super :: { AcceptMapping , AttributeOrder , AttributeParser , OnDuplicate , SingleAttributeParser } ;
7
7
use crate :: context:: { AcceptContext , FinalizeContext , Stage } ;
@@ -11,7 +11,7 @@ use crate::session_diagnostics::NakedFunctionIncompatibleAttribute;
11
11
pub ( crate ) struct OptimizeParser ;
12
12
13
13
impl < S : Stage > SingleAttributeParser < S > for OptimizeParser {
14
- const PATH : & [ rustc_span :: Symbol ] = & [ sym:: optimize] ;
14
+ const PATH : & [ Symbol ] = & [ sym:: optimize] ;
15
15
const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
16
16
const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: WarnButFutureError ;
17
17
const TEMPLATE : AttributeTemplate = template ! ( List : "size|speed|none" ) ;
@@ -44,7 +44,7 @@ impl<S: Stage> SingleAttributeParser<S> for OptimizeParser {
44
44
pub ( crate ) struct ColdParser ;
45
45
46
46
impl < S : Stage > SingleAttributeParser < S > for ColdParser {
47
- const PATH : & [ rustc_span :: Symbol ] = & [ sym:: cold] ;
47
+ const PATH : & [ Symbol ] = & [ sym:: cold] ;
48
48
const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
49
49
const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
50
50
const TEMPLATE : AttributeTemplate = template ! ( Word ) ;
@@ -166,6 +166,24 @@ impl<S: Stage> AttributeParser<S> for NakedParser {
166
166
}
167
167
}
168
168
169
+ pub ( crate ) struct TrackCallerParser ;
170
+
171
+ impl < S : Stage > SingleAttributeParser < S > for TrackCallerParser {
172
+ const PATH : & [ Symbol ] = & [ sym:: track_caller] ;
173
+ const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
174
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
175
+ const TEMPLATE : AttributeTemplate = template ! ( Word ) ;
176
+
177
+ fn convert ( cx : & mut AcceptContext < ' _ , ' _ , S > , args : & ArgParser < ' _ > ) -> Option < AttributeKind > {
178
+ if !args. no_args ( ) {
179
+ cx. expected_no_args ( args. span ( ) . unwrap_or ( cx. attr_span ) ) ;
180
+ return None ;
181
+ }
182
+
183
+ Some ( AttributeKind :: TrackCaller ( cx. attr_span ) )
184
+ }
185
+ }
186
+
169
187
pub ( crate ) struct NoMangleParser ;
170
188
171
189
impl < S : Stage > SingleAttributeParser < S > for NoMangleParser {
0 commit comments