11use rustc_attr_data_structures:: { AttributeKind , OptimizeAttr } ;
22use rustc_feature:: { AttributeTemplate , template} ;
33use rustc_session:: parse:: feature_err;
4- use rustc_span:: { Span , sym} ;
4+ use rustc_span:: { Span , Symbol , sym} ;
55
66use super :: { AcceptMapping , AttributeOrder , AttributeParser , OnDuplicate , SingleAttributeParser } ;
77use crate :: context:: { AcceptContext , FinalizeContext , Stage } ;
@@ -11,7 +11,7 @@ use crate::session_diagnostics::NakedFunctionIncompatibleAttribute;
1111pub ( crate ) struct OptimizeParser ;
1212
1313impl < S : Stage > SingleAttributeParser < S > for OptimizeParser {
14- const PATH : & [ rustc_span :: Symbol ] = & [ sym:: optimize] ;
14+ const PATH : & [ Symbol ] = & [ sym:: optimize] ;
1515 const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
1616 const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: WarnButFutureError ;
1717 const TEMPLATE : AttributeTemplate = template ! ( List : "size|speed|none" ) ;
@@ -44,7 +44,7 @@ impl<S: Stage> SingleAttributeParser<S> for OptimizeParser {
4444pub ( crate ) struct ColdParser ;
4545
4646impl < S : Stage > SingleAttributeParser < S > for ColdParser {
47- const PATH : & [ rustc_span :: Symbol ] = & [ sym:: cold] ;
47+ const PATH : & [ Symbol ] = & [ sym:: cold] ;
4848 const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
4949 const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
5050 const TEMPLATE : AttributeTemplate = template ! ( Word ) ;
@@ -166,6 +166,24 @@ impl<S: Stage> AttributeParser<S> for NakedParser {
166166 }
167167}
168168
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+
169187pub ( crate ) struct NoMangleParser ;
170188
171189impl < S : Stage > SingleAttributeParser < S > for NoMangleParser {
0 commit comments