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 UncheckedTypeAlias => Yes,
211 Unroll(..) => No,
212 UnstableFeatureBound(..) => No,
213 UnstableRemoved(..) => Yes,
214 Used { .. } => No,
215 WindowsSubsystem(..) => No,
216 }
218 }
219
220 pub fn is_extern_indicator(&self) -> bool {
226 use AttributeKind::*;
227
228 match self {
229 AllowInternalUnsafe(..) => false,
231 AllowInternalUnstable(..) => false,
232 AlwaysGca => false,
233 AutomaticallyDerived => false,
234 CfgAttrTrace(..) => false,
235 CfgTrace(..) => false,
236 CfiEncoding { .. } => false,
237 Cold => false,
238 CollapseDebugInfo(..) => false,
239 CompilerBuiltins => false,
240 ConstContinue(..) => false,
241 Coroutine => false,
242 Coverage(..) => false,
243 CrateName { .. } => false,
244 CrateType(_) => false,
245 CustomMir(_, _) => false,
246 DebuggerVisualizer(..) => false,
247 DefaultLibAllocator => false,
248 Deprecated { .. } => false,
249 DoNotRecommend => false,
250 Doc(_) => false,
251 DocComment { .. } => false,
252 EiiDeclaration(_) => false,
253 EiiImpl(..) => true,
254 ExportName { .. } => true,
255 ExportStable => false,
256 Feature(..) => false,
257 FfiConst => false,
258 FfiPure(..) => false,
259 Fundamental { .. } => false,
260 Ignore { .. } => false,
261 Inline(..) => false,
262 InstructionSet(..) => false,
263 InstrumentFn(..) => false,
264 Lang(item) => item.link_name().is_some(),
265 Link(..) => false,
266 LinkName { .. } => false,
267 LinkOrdinal { .. } => false,
268 LinkSection { .. } => false,
269 Linkage(linkage, _) => match *linkage {
270 crate::Linkage::Internal => false,
271 crate::Linkage::AvailableExternally
272 | crate::Linkage::External
273 | crate::Linkage::ExternalWeak
274 | crate::Linkage::LinkOnceAny
275 | crate::Linkage::LinkOnceODR
276 | crate::Linkage::WeakAny
277 | crate::Linkage::WeakODR => true,
278 },
279 LintCheck(_) => false,
280 LoopMatch(..) => false,
281 MacroEscape => false,
282 MacroExport { .. } => false,
283 MacroUse { .. } => false,
284 Marker => false,
285 MayDangle(..) => false,
286 MoveSizeLimit { .. } => false,
287 MustNotSupend { .. } => false,
288 MustUse { .. } => false,
289 Naked(..) => false,
290 NeedsAllocator => false,
291 NeedsPanicRuntime => false,
292 NoBuiltins => false,
293 NoCore => false,
294 NoImplicitPrelude => false,
295 NoLink => false,
296 NoMain => false,
297 NoMangle(..) => true,
298 NoStd => false,
299 NonExhaustive(..) => false,
300 OnConst { .. } => false,
301 OnMove { .. } => false,
302 OnTypeError { .. } => false,
303 OnUnimplemented { .. } => false,
304 OnUnknown { .. } => false,
305 OnUnmatchedArgs { .. } => false,
306 Opaque => false,
307 Optimize(..) => false,
308 PanicRuntime => false,
309 PatchableFunctionEntry { .. } => false,
310 Path(..) => false,
311 PatternComplexityLimit { .. } => false,
312 PinV2(..) => false,
313 PreludeImport => false,
314 ProcMacro => false,
315 ProcMacroAttribute => false,
316 ProcMacroDerive { .. } => false,
317 ProfilerRuntime => false,
318 RecursionLimit { .. } => false,
319 ReexportTestHarnessMain(..) => false,
320 RegisterTool { .. } => false,
321 Repr { .. } => false,
322 RustcAbi { .. } => false,
323 RustcAlign { .. } => false,
324 RustcAllocator => false,
325 RustcAllocatorZeroed => false,
326 RustcAllocatorZeroedVariant { .. } => false,
327 RustcAllowConstFnUnstable(..) => false,
328 RustcAllowIncoherentImpl(..) => false,
329 RustcAllowLifetimeDependentSpecialization => false,
330 RustcAsPtr => false,
331 RustcAssertVariance { .. } => false,
332 RustcAutodiff(..) => false,
333 RustcBodyStability { .. } => false,
334 RustcBuiltinMacro { .. } => false,
335 RustcCanonicalSymbol => false,
336 RustcCaptureAnalysis => false,
337 RustcCguTestAttr { .. } => false,
338 RustcClean { .. } => false,
339 RustcCoherenceIsCore => false,
340 RustcCoinductive => false,
341 RustcComptime(..) => false,
342 RustcConfusables { .. } => false,
343 RustcConstStability { .. } => false,
344 RustcConstStableIndirect => false,
345 RustcConversionSuggestion => false,
346 RustcDeallocator => false,
347 RustcDelayedBugFromInsideQuery => false,
348 RustcDenyExplicitImpl => false,
349 RustcDeprecatedSafe2024 { .. } => false,
350 RustcDiagnosticItem(..) => false,
351 RustcDoNotConstCheck => false,
352 RustcDocPrimitive(..) => false,
353 RustcDummy => false,
354 RustcDumpClauses => false,
355 RustcDumpDefParents => false,
356 RustcDumpDefPath(..) => false,
357 RustcDumpGenerics => false,
358 RustcDumpHiddenTypeOfOpaques => false,
359 RustcDumpInferredOutlives => false,
360 RustcDumpItemBounds => false,
361 RustcDumpLayout(..) => false,
362 RustcDumpObjectLifetimeDefaults => false,
363 RustcDumpSymbolName(..) => false,
364 RustcDumpUserArgs => false,
365 RustcDumpVariances => false,
366 RustcDumpVariancesOfOpaques => false,
367 RustcDumpVtable(..) => false,
368 RustcDynIncompatibleTrait(..) => false,
369 RustcEffectiveVisibility => false,
370 RustcEiiForeignItem => true,
371 RustcEvaluateWhereClauses => false,
372 RustcHasIncoherentInherentImpls => false,
373 RustcIfThisChanged(..) => false,
374 RustcInheritOverflowChecks => false,
375 RustcInsignificantDtor => false,
376 RustcIntrinsic => false,
377 RustcIntrinsicConstStableIndirect => false,
378 RustcLegacyConstGenerics { .. } => false,
379 RustcLintOptDenyFieldAccess { .. } => false,
380 RustcLintOptTy => false,
381 RustcLintQueryInstability => false,
382 RustcLintUntrackedQueryInformation => false,
383 RustcMacroTransparency(..) => false,
384 RustcMain => false,
385 RustcMir(..) => false,
386 RustcMustImplementOneOf { .. } => false,
387 RustcMustMatchExhaustively(..) => false,
388 RustcNeverReturnsNullPtr => false,
389 RustcNoImplicitAutorefs => false,
390 RustcNoImplicitBounds => false,
391 RustcNoMirInline => false,
392 RustcNoWritable => false,
393 RustcNonConstTraitMethod => false,
394 RustcNonnullOptimizationGuaranteed => false,
395 RustcNounwind => false,
396 RustcObjcClass { .. } => false,
397 RustcObjcSelector { .. } => false,
398 RustcOffloadKernel => true,
399 RustcPanicsWhenZero => false,
400 RustcParenSugar => false,
401 RustcPassByValue => false,
402 RustcPassIndirectlyInNonRusticAbis(..) => false,
403 RustcPreserveUbChecks => false,
404 RustcProcMacroDecls => false,
405 RustcPubTransparent(..) => false,
406 RustcReallocator => false,
407 RustcRegions => false,
408 RustcScalableVector { .. } => false,
409 RustcShouldNotBeCalledOnConstItems => false,
410 RustcShowSpans(_) => false,
411 RustcSimdMonomorphizeLaneLimit(..) => false,
412 RustcSkipDuringMethodDispatch { .. } => false,
413 RustcSpecializationTrait => false,
414 RustcStdInternalSymbol => true,
415 RustcStrictCoherence(..) => false,
416 RustcTestMarker(..) => false,
417 RustcThenThisWouldNeed(..) => false,
418 RustcTrivialFieldReads => false,
419 Sanitize { .. } => false,
420 ShouldPanic { .. } => false,
421 Splat(..) => false,
422 Stability { .. } => false,
423 TargetFeature { .. } => false,
424 TestRunner(..) => false,
425 ThreadLocal => false,
426 TrackCaller(..) => false,
427 TypeLengthLimit { .. } => false,
428 UncheckedTypeAlias => false,
429 Unroll(..) => false,
430 UnstableFeatureBound(..) => false,
431 UnstableRemoved(..) => false,
432 Used { .. } => false,
433 WindowsSubsystem(..) => false,
434 }
436 }
437}