1use crate::AttributeKind;
2
3#[derive(#[automatically_derived]
impl ::core::marker::StructuralPartialEq for EncodeCrossCrate { }
#[automatically_derived]
impl ::core::cmp::PartialEq for EncodeCrossCrate {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}PartialEq)]
4pub enum EncodeCrossCrate {
5 Yes,
6 No,
7}
8
9impl AttributeKind {
10 pub fn encode_cross_crate(&self) -> EncodeCrossCrate {
16 use AttributeKind::*;
17 use EncodeCrossCrate::*;
18
19 match self {
20 AllowInternalUnsafe(..) => Yes,
22 AllowInternalUnstable(..) => Yes,
23 AlwaysGca => Yes,
24 AutomaticallyDerived => Yes,
25 CfgAttrTrace(..) => Yes,
26 CfgTrace(..) => Yes,
27 CfiEncoding { .. } => Yes,
28 Cold => No,
29 CollapseDebugInfo(..) => Yes,
30 CompilerBuiltins => No,
31 ConstContinue(..) => No,
32 Coroutine => No,
33 Coverage(..) => No,
34 CrateName { .. } => No,
35 CrateType(_) => No,
36 CustomMir(_, _) => Yes,
37 DebuggerVisualizer(..) => No,
38 DefaultLibAllocator => No,
39 Deprecated { .. } => Yes,
40 DoNotRecommend => Yes,
41 Doc(_) => Yes,
42 DocComment { .. } => Yes,
43 EiiDeclaration(_) => Yes,
44 EiiImpl(..) => No,
45 ExportName { .. } => Yes,
46 ExportStable => No,
47 Feature(..) => No,
48 FfiConst => No,
49 FfiPure(..) => No,
50 Fundamental { .. } => Yes,
51 Ignore { .. } => No,
52 Inline(..) => No,
53 InstructionSet(..) => No,
54 InstrumentFn(..) => No,
55 Lang(..) => Yes,
56 Link(..) => No,
57 LinkName { .. } => Yes, LinkOrdinal { .. } => No,
59 LinkSection { .. } => Yes, Linkage(..) => No,
61 LintCheck(..) => No,
62 LoopMatch(..) => No,
63 MacroEscape => No,
64 MacroExport { .. } => Yes,
65 MacroUse { .. } => No,
66 Marker => No,
67 MayDangle(..) => No,
68 MoveSizeLimit { .. } => No,
69 MustNotSupend { .. } => Yes,
70 MustUse { .. } => Yes,
71 Naked(..) => No,
72 NeedsAllocator => No,
73 NeedsPanicRuntime => No,
74 NoBuiltins => Yes,
75 NoCore => No,
76 NoImplicitPrelude => No,
77 NoLink => No,
78 NoMain => No,
79 NoMangle(..) => Yes, NoStd => No,
81 NonExhaustive(..) => Yes, OnConst { .. } => Yes,
83 OnMove { .. } => Yes,
84 OnTypeError { .. } => Yes,
85 OnUnimplemented { .. } => Yes,
86 OnUnknown { .. } => Yes,
87 OnUnmatchedArgs { .. } => Yes,
88 Opaque => Yes,
89 Optimize(..) => No,
90 PanicRuntime => No,
91 PatchableFunctionEntry { .. } => Yes,
92 Path(..) => No,
93 PatternComplexityLimit { .. } => No,
94 PinV2(..) => Yes,
95 PreludeImport => No,
96 ProcMacro => No,
97 ProcMacroAttribute => No,
98 ProcMacroDerive { .. } => No,
99 ProfilerRuntime => No,
100 RecursionLimit { .. } => No,
101 ReexportTestHarnessMain(..) => No,
102 RegisterTool { .. } => No,
103 Repr { .. } => No,
104 RustcAbi { .. } => No,
105 RustcAlign { .. } => No,
106 RustcAllocator => No,
107 RustcAllocatorZeroed => No,
108 RustcAllocatorZeroedVariant { .. } => Yes,
109 RustcAllowConstFnUnstable(..) => No,
110 RustcAllowIncoherentImpl(..) => No,
111 RustcAllowLifetimeDependentSpecialization => No,
112 RustcAsPtr => Yes,
113 RustcAssertVariance { .. } => No,
114 RustcAutodiff(..) => Yes,
115 RustcBodyStability { .. } => No,
116 RustcBuiltinMacro { .. } => Yes,
117 RustcCanonicalSymbol => No,
118 RustcCaptureAnalysis => No,
119 RustcCguTestAttr { .. } => No,
120 RustcClean { .. } => No,
121 RustcCoherenceIsCore => No,
122 RustcCoinductive => No,
123 RustcComptime(..) => No, RustcConfusables { .. } => Yes,
125 RustcConstStability { .. } => Yes,
126 RustcConstStableIndirect => No,
127 RustcConversionSuggestion => Yes,
128 RustcDeallocator => No,
129 RustcDelayedBugFromInsideQuery => No,
130 RustcDenyExplicitImpl => No,
131 RustcDeprecatedSafe2024 { .. } => Yes,
132 RustcDiagnosticItem(..) => Yes,
133 RustcDoNotConstCheck => Yes,
134 RustcDocPrimitive(..) => Yes,
135 RustcDummy => No,
136 RustcDumpClauses => No,
137 RustcDumpDefParents => No,
138 RustcDumpDefPath(..) => No,
139 RustcDumpGenerics => No,
140 RustcDumpHiddenTypeOfOpaques => No,
141 RustcDumpInferredOutlives => No,
142 RustcDumpItemBounds => No,
143 RustcDumpLayout(..) => No,
144 RustcDumpObjectLifetimeDefaults => No,
145 RustcDumpSymbolName(..) => Yes,
146 RustcDumpUserArgs => No,
147 RustcDumpVariances => No,
148 RustcDumpVariancesOfOpaques => No,
149 RustcDumpVtable(..) => No,
150 RustcDynIncompatibleTrait(..) => No,
151 RustcEffectiveVisibility => Yes,
152 RustcEiiForeignItem => No,
153 RustcEvaluateWhereClauses => Yes,
154 RustcHasIncoherentInherentImpls => Yes,
155 RustcIfThisChanged(..) => No,
156 RustcInheritOverflowChecks => No,
157 RustcInsignificantDtor => Yes,
158 RustcIntrinsic => Yes,
159 RustcIntrinsicConstStableIndirect => No,
160 RustcLegacyConstGenerics { .. } => Yes,
161 RustcLintOptDenyFieldAccess { .. } => Yes,
162 RustcLintOptTy => Yes,
163 RustcLintQueryInstability => Yes,
164 RustcLintUntrackedQueryInformation => Yes,
165 RustcMacroTransparency(..) => Yes,
166 RustcMain => No,
167 RustcMir(..) => Yes,
168 RustcMustImplementOneOf { .. } => No,
169 RustcMustMatchExhaustively(..) => Yes,
170 RustcNeverReturnsNullPtr => Yes,
171 RustcNoImplicitAutorefs => Yes,
172 RustcNoImplicitBounds => No,
173 RustcNoMirInline => Yes,
174 RustcNoWritable => Yes,
175 RustcNonConstTraitMethod => No, RustcNonnullOptimizationGuaranteed => Yes,
177 RustcNounwind => No,
178 RustcObjcClass { .. } => No,
179 RustcObjcSelector { .. } => No,
180 RustcOffloadKernel => Yes,
181 RustcPanicsWhenZero => Yes,
182 RustcParenSugar => No,
183 RustcPassByValue => Yes,
184 RustcPassIndirectlyInNonRusticAbis(..) => No,
185 RustcPreserveUbChecks => No,
186 RustcProcMacroDecls => No,
187 RustcPubTransparent(..) => Yes,
188 RustcReallocator => No,
189 RustcRegions => No,
190 RustcScalableVector { .. } => Yes,
191 RustcShouldNotBeCalledOnConstItems => Yes,
192 RustcShowSpans(_) => No,
193 RustcSimdMonomorphizeLaneLimit(..) => Yes, RustcSkipDuringMethodDispatch { .. } => No,
195 RustcSpecializationTrait => No,
196 RustcStdInternalSymbol => No,
197 RustcStrictCoherence(..) => Yes,
198 RustcTestMarker(..) => No,
199 RustcThenThisWouldNeed(..) => No,
200 RustcTrivialFieldReads => Yes,
201 Sanitize { .. } => No,
202 ShouldPanic { .. } => No,
203 Splat(..) => Yes,
204 Stability { .. } => Yes,
205 TargetFeature { .. } => No,
206 TestRunner(..) => Yes,
207 ThreadLocal => No,
208 TrackCaller(..) => Yes,
209 TypeLengthLimit { .. } => No,
210 Unroll(..) => No,
211 UnstableFeatureBound(..) => No,
212 UnstableRemoved(..) => Yes,
213 Used { .. } => No,
214 WindowsSubsystem(..) => No,
215 }
217 }
218
219 pub fn is_extern_indicator(&self) -> bool {
225 use AttributeKind::*;
226
227 match self {
228 AllowInternalUnsafe(..) => false,
230 AllowInternalUnstable(..) => false,
231 AlwaysGca => false,
232 AutomaticallyDerived => false,
233 CfgAttrTrace(..) => false,
234 CfgTrace(..) => false,
235 CfiEncoding { .. } => false,
236 Cold => false,
237 CollapseDebugInfo(..) => false,
238 CompilerBuiltins => false,
239 ConstContinue(..) => false,
240 Coroutine => false,
241 Coverage(..) => false,
242 CrateName { .. } => false,
243 CrateType(_) => false,
244 CustomMir(_, _) => false,
245 DebuggerVisualizer(..) => false,
246 DefaultLibAllocator => false,
247 Deprecated { .. } => false,
248 DoNotRecommend => false,
249 Doc(_) => false,
250 DocComment { .. } => false,
251 EiiDeclaration(_) => false,
252 EiiImpl(..) => true,
253 ExportName { .. } => true,
254 ExportStable => false,
255 Feature(..) => false,
256 FfiConst => false,
257 FfiPure(..) => false,
258 Fundamental { .. } => false,
259 Ignore { .. } => false,
260 Inline(..) => false,
261 InstructionSet(..) => false,
262 InstrumentFn(..) => false,
263 Lang(item) => item.link_name().is_some(),
264 Link(..) => false,
265 LinkName { .. } => false,
266 LinkOrdinal { .. } => false,
267 LinkSection { .. } => false,
268 Linkage(linkage, _) => match *linkage {
269 crate::Linkage::Internal => false,
270 crate::Linkage::AvailableExternally
271 | crate::Linkage::External
272 | crate::Linkage::ExternalWeak
273 | crate::Linkage::LinkOnceAny
274 | crate::Linkage::LinkOnceODR
275 | crate::Linkage::WeakAny
276 | crate::Linkage::WeakODR => true,
277 },
278 LintCheck(_) => false,
279 LoopMatch(..) => false,
280 MacroEscape => false,
281 MacroExport { .. } => false,
282 MacroUse { .. } => false,
283 Marker => false,
284 MayDangle(..) => false,
285 MoveSizeLimit { .. } => false,
286 MustNotSupend { .. } => false,
287 MustUse { .. } => false,
288 Naked(..) => false,
289 NeedsAllocator => false,
290 NeedsPanicRuntime => false,
291 NoBuiltins => false,
292 NoCore => false,
293 NoImplicitPrelude => false,
294 NoLink => false,
295 NoMain => false,
296 NoMangle(..) => true,
297 NoStd => false,
298 NonExhaustive(..) => false,
299 OnConst { .. } => false,
300 OnMove { .. } => false,
301 OnTypeError { .. } => false,
302 OnUnimplemented { .. } => false,
303 OnUnknown { .. } => false,
304 OnUnmatchedArgs { .. } => false,
305 Opaque => false,
306 Optimize(..) => false,
307 PanicRuntime => false,
308 PatchableFunctionEntry { .. } => false,
309 Path(..) => false,
310 PatternComplexityLimit { .. } => false,
311 PinV2(..) => false,
312 PreludeImport => false,
313 ProcMacro => false,
314 ProcMacroAttribute => false,
315 ProcMacroDerive { .. } => false,
316 ProfilerRuntime => false,
317 RecursionLimit { .. } => false,
318 ReexportTestHarnessMain(..) => false,
319 RegisterTool { .. } => false,
320 Repr { .. } => false,
321 RustcAbi { .. } => false,
322 RustcAlign { .. } => false,
323 RustcAllocator => false,
324 RustcAllocatorZeroed => false,
325 RustcAllocatorZeroedVariant { .. } => false,
326 RustcAllowConstFnUnstable(..) => false,
327 RustcAllowIncoherentImpl(..) => false,
328 RustcAllowLifetimeDependentSpecialization => false,
329 RustcAsPtr => false,
330 RustcAssertVariance { .. } => false,
331 RustcAutodiff(..) => false,
332 RustcBodyStability { .. } => false,
333 RustcBuiltinMacro { .. } => false,
334 RustcCanonicalSymbol => false,
335 RustcCaptureAnalysis => false,
336 RustcCguTestAttr { .. } => false,
337 RustcClean { .. } => false,
338 RustcCoherenceIsCore => false,
339 RustcCoinductive => false,
340 RustcComptime(..) => false,
341 RustcConfusables { .. } => false,
342 RustcConstStability { .. } => false,
343 RustcConstStableIndirect => false,
344 RustcConversionSuggestion => false,
345 RustcDeallocator => false,
346 RustcDelayedBugFromInsideQuery => false,
347 RustcDenyExplicitImpl => false,
348 RustcDeprecatedSafe2024 { .. } => false,
349 RustcDiagnosticItem(..) => false,
350 RustcDoNotConstCheck => false,
351 RustcDocPrimitive(..) => false,
352 RustcDummy => false,
353 RustcDumpClauses => false,
354 RustcDumpDefParents => false,
355 RustcDumpDefPath(..) => false,
356 RustcDumpGenerics => false,
357 RustcDumpHiddenTypeOfOpaques => false,
358 RustcDumpInferredOutlives => false,
359 RustcDumpItemBounds => false,
360 RustcDumpLayout(..) => false,
361 RustcDumpObjectLifetimeDefaults => false,
362 RustcDumpSymbolName(..) => false,
363 RustcDumpUserArgs => false,
364 RustcDumpVariances => false,
365 RustcDumpVariancesOfOpaques => false,
366 RustcDumpVtable(..) => false,
367 RustcDynIncompatibleTrait(..) => false,
368 RustcEffectiveVisibility => false,
369 RustcEiiForeignItem => true,
370 RustcEvaluateWhereClauses => false,
371 RustcHasIncoherentInherentImpls => false,
372 RustcIfThisChanged(..) => false,
373 RustcInheritOverflowChecks => false,
374 RustcInsignificantDtor => false,
375 RustcIntrinsic => false,
376 RustcIntrinsicConstStableIndirect => false,
377 RustcLegacyConstGenerics { .. } => false,
378 RustcLintOptDenyFieldAccess { .. } => false,
379 RustcLintOptTy => false,
380 RustcLintQueryInstability => false,
381 RustcLintUntrackedQueryInformation => false,
382 RustcMacroTransparency(..) => false,
383 RustcMain => false,
384 RustcMir(..) => false,
385 RustcMustImplementOneOf { .. } => false,
386 RustcMustMatchExhaustively(..) => false,
387 RustcNeverReturnsNullPtr => false,
388 RustcNoImplicitAutorefs => false,
389 RustcNoImplicitBounds => false,
390 RustcNoMirInline => false,
391 RustcNoWritable => false,
392 RustcNonConstTraitMethod => false,
393 RustcNonnullOptimizationGuaranteed => false,
394 RustcNounwind => false,
395 RustcObjcClass { .. } => false,
396 RustcObjcSelector { .. } => false,
397 RustcOffloadKernel => true,
398 RustcPanicsWhenZero => false,
399 RustcParenSugar => false,
400 RustcPassByValue => false,
401 RustcPassIndirectlyInNonRusticAbis(..) => false,
402 RustcPreserveUbChecks => false,
403 RustcProcMacroDecls => false,
404 RustcPubTransparent(..) => false,
405 RustcReallocator => false,
406 RustcRegions => false,
407 RustcScalableVector { .. } => false,
408 RustcShouldNotBeCalledOnConstItems => false,
409 RustcShowSpans(_) => false,
410 RustcSimdMonomorphizeLaneLimit(..) => false,
411 RustcSkipDuringMethodDispatch { .. } => false,
412 RustcSpecializationTrait => false,
413 RustcStdInternalSymbol => true,
414 RustcStrictCoherence(..) => false,
415 RustcTestMarker(..) => false,
416 RustcThenThisWouldNeed(..) => false,
417 RustcTrivialFieldReads => false,
418 Sanitize { .. } => false,
419 ShouldPanic { .. } => false,
420 Splat(..) => false,
421 Stability { .. } => false,
422 TargetFeature { .. } => false,
423 TestRunner(..) => false,
424 ThreadLocal => false,
425 TrackCaller(..) => false,
426 TypeLengthLimit { .. } => false,
427 Unroll(..) => false,
428 UnstableFeatureBound(..) => false,
429 UnstableRemoved(..) => false,
430 Used { .. } => false,
431 WindowsSubsystem(..) => false,
432 }
434 }
435}